精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用Hadoop和MapReduce進行大數據分析

大數據 Hadoop
Google在2001年發布圖像搜索功能時,只有2.5億索引圖像,不到10年,這個巨大的搜索功能已經可以檢索超過100億個圖像了,每分鐘有35小時的內容上傳到YouTube。據稱,Twitter每天平均5500萬條記錄。早些時候,搜索功能每天記錄6億條查詢記錄。這就是我們討論大數據的意義所在。

 如此大規模的數據一度僅限于大企業、學校和政府機構 — 這些機構有能力購買昂貴的超級計算機、能夠雇用員工保障其運行。今天,由于存儲成本的降低和處理能力的商品化,一些小公司,甚至個人都可以存儲和挖掘同樣的數據,推動新一輪的應用程序創新。

大數據革命技術之一是MapReduce,一個編程模式,是Google針對大規模、分布式數據而開發的。在本文中,我將介紹Apache的開源MapReduce實現、Hadoop,也有人將其稱之為云計算的殺手應用程序。

關于Hadoop

Apache的Hadoop框架本質上是一個用于分析大數據集的機制,不一定位于數據存儲中。Hadoop提取出了MapReduce的大規模數據分析引擎,更易于開發人員理解。Hadoop可以擴展到無數個節點,可以處理所有活動和相關數據存儲的協調。

Hadoop的眾多特性和配置使其成為一個十分有用且功能強大的框架,其用途和功能令人驚訝。Yahoo!以及其他許多組織已經找到了一個高效機制來分析成堆的字節數。在單個節點上運行Hadoop也很容易;您所需要的只是一些需要分析的數據,以及熟悉一般的Java代碼。Hadoop也可和 uby、Python以及C++一起使用。

作為處理大數據集的概念框架,MapReduce對于使用許多計算機來解決分布式問題而言是高度優化的。顧名思義,這個框架由兩個函數構成。map 函數專用于獲取大數據輸入,并將其分成小片段,然后交由其他進程進行操作。reduce函數整理map收集的各個回應,然后顯示最后的輸出。

在Hadoop中,您可以通過擴展Hadoop自身的基類來定義map和reduce實現。實現和輸入輸出格式被一個指定它們的配置聯系在一起。 Hadoop非常適合處理包含結構數據的大型文件。Hadoop可以對輸入文件進行原始解析,這一點特別有用,這樣您就可以每次處理一行。定義一個map 函數實際上只是一個關于確定您從即將輸入的文本行中捕獲什么內容的問題。

數據,無處不在的數據!

美國政府產生大量數據,只有一部分是普通民眾所感興趣的。各種政府機構免費發布關于US經濟健康狀況和更改社會人口統計資料的數據。U.S. Geological Survey (USGS)發布國內外地震數據。

世界各地每天都有很多個小型地震發生。其中大多數發生在地殼深處,沒有人能感覺到,盡管如此,但是監聽站仍然會進行記錄。USGS以CSV(或逗號分隔值)文件的格式發布每周地震數據。

每周文件平均不是很大 — 只有大約100KB左右。但是,它可以作為學習Hadoop的基礎。記住,Hadoop有能力處理更 大的數據集。

跟蹤震動

我近期從USGS網站下載的CSV文件有大約920多行。如 清單 1 所示:

清單 1.一個USGS地震數據文件的行數統計

  1. $> wc -l eqs7day-M1.txt   
  2.   920 eqs7day-M1.txt 

 CVS文件內容如清單2所示(這是前兩行):

清單 2. CVS文件的前兩行

  1. $> head -n 2 eqs7day-M1.txt   
  2. Src,Eqid,Version,Datetime,Lat,Lon,Magnitude,Depth,NST,Region  
  3. ci,14896484,2,"Sunday, December 12, 2010 23:23:20 UTC",33.3040,-116.4130,1.0,11.70,22,  
  4.   "Southern California" 

這就是我稱之為信息豐富 的文件,尤其是當您想到它總共有920行記錄時。然而我只想知道在該文件報告的這一周內每一天有多少次地震發生。我想知道在這7天內哪個區域是地震頻發區。

我第一個想到的就是使用簡單的grep命令來搜索每天的地震數。看看這個文件,我發現數據記錄是從12月12開始的。因此我對該字符串執行了一次grep-c,其結果如清單3所示:

清單 3.12月12有多少次地震發生?

  1. $> grep -c 'December 12' eqs7day-M1.txt   
  2. 98 

安裝Hadoop如果您之前沒有安裝Hadoop,那么現在就裝。第一步,下載最新版二進制文件,解壓,然后在您的路徑上設置Hadoop的bin目錄。完成這些您就可以直接執行hadoop命令了。使用Hadoop要求您執行它的hadoop命令,而不是像您所見到的那樣調用java命令。您可以向 hadoop命令傳選項,諸如在哪里可以找到您的Java二進制文件(例如,表示您的map和reduce實現)。在我的示例中,我創建了一個jar文件,告訴Hadoop我想在我的jar文件內運行哪個任務。我也向Hadoop類路徑添加了一些運行我的應用程序所需的附加二進制文件。

現在,我知道在12月12日有98條記錄,也就是說有98次地震。我只能沿著這條記錄向下,對12月10日的記錄執行一次grep,接著是 11 號,等等。這聽起來有點乏味。更糟糕的是,我還需要知道在該文件中的是哪幾天。我確實不關心這些,甚至有時候我可能無法獲取該信息。事實上,我只想知道在七天這樣一個時間段內任何一天的地震次數,使用Hadoop我就可以很容易的獲取這一信息。

Hadoop只需要幾條信息就可以回答我的第一個和第二個問題:即,要處理哪條輸入以及如何處理map和reduce。我也必須提供了一個可以將每件事都聯系起來的作業。在我開始處理這些代碼之前,我需要花點時間確定我的CSV數據整齊有序。

使用opencsv進行數據解析

除了地震CSV文件的第一行之外,第一行是文件頭,每一行都是一系列逗號分隔數據值。我只對數據的3個部分感興趣:日期、地點和震級。為了獲取這些資料,我將使用一個很棒的開源庫opencsv,它將會幫助我分析CSV文件。

作為一個測試優先的工具,我首先編寫一個快捷JUnit測試,確認我可以從CSV文件的一個樣例行獲取的我所需要的信息,如清單 4 所示:

清單 4. 解析一個CSV行

  1. public class CSVProcessingTest {  
  2.  private final String LINE = "ci,14897012,2,\"Monday, December 13, 2010 " +  
  3.             "14:10:32 UTC\",33.0290,-115." +  
  4.             "5388,1.9,15.70,41,\"Southern California\"";  
  5.  @Test  
  6.  public void testReadingOneLine() throws Exception {  
  7.   String[] lines = new CSVParser().parseLine(LINE);  
  8.   assertEquals("should be Monday, December 13, 2010 14:10:32 UTC",  
  9.     "Monday, December 13, 2010 14:10:32 UTC", lines[3]);  
  10.   assertEquals("should be Southern California",  
  11.     "Southern California", lines[9]);  
  12.   assertEquals("should be 1.9""1.9", lines[6]);  
  13.  }  

正如您在清單4中所看到的,opencsv處理逗號分隔值非常容易。該解析器僅返回一組String,所以有可能獲取位置信息(別忘了,在 Java語言中數組和集合的訪問是從零開始的)。

轉換日期格式

當使用MapReduce進行處理時,map函數的任務是選擇一些要處理的值,以及一些鍵。這就是說,map主要處理和返回兩個元素:一個鍵和一個值。回到我之前的需求,我首先想知道每天會發生多少次地震。因此,當我在分析地震文件時,我將發布兩個值:鍵是日期,值是一個計數器。reduce函數將對計數器(只是一些值為1的整數)進行總計。因此,提供給我的是在目標地震文件中某一個日期出現的次數。

由于我只對24小時時段內的信息感興趣,我得剔除每個文件中的日期的時間部分。在 清單5中,我編寫了一個快速測試,驗證如何將一個傳入文件中的特定日期信息轉換成一個更一般的24小時日期:

清單 5.日期格式轉換

  1. @Test  
  2. public void testParsingDate() throws Exception {  
  3.  String datest = "Monday, December 13, 2010 14:10:32 UTC";  
  4.  SimpleDateFormat formatter = new SimpleDateFormat("EEEEE, MMMMM dd, yyyy HH:mm:ss Z");  
  5.  Date dt = formatter.parse(datest);  
  6.  formatter.applyPattern("dd-MM-yyyy");  
  7.  String dtstr = formatter.format(dt);  
  8.  assertEquals("should be 13-12-2010""13-12-2010", dtstr);  

在清單5中,我使用了SimpleDateFormat Java對象,將CSV文件中格式為Monday, December 13, 2010 14:10:32 UTC的日期String轉換成了更一般的13-12-2010。

Hadoop的map和reduce

現在我已經找到了處理CSV文件以及其日期格式的解決方法。我要開始在Hadoop中實施我的map和reduce函數了。這個過程需要理解 Java 泛型,因為 Hadoop 選擇使用顯式類型,為了安全起見。

當我使用 Hadoop 定義一個映射實現時,我只擴展Hadoop的Mapper類。然后我可以使用泛型來為傳出鍵和值指定顯式類。類型子句也指定了傳入鍵和值,這對于讀取文件分別是字節數和文本行數。

EarthQuakesPerDateMapper 類擴展了Hadoop的Mapper對象。它顯式地將其輸出鍵指定為一個Text對象,將其值指定為一個IntWritable,這是一個Hadoop特定類,實質上是一個整數。還要注意,class子句的前兩個類型是LongWritable和Text,分別是字節數和文本行數。

由于類定義中的類型子句,我將傳入map方法的參數類型設置為在context.write子句內帶有該方法的輸出。如果我想指定其他內容,將會出現一個編譯器問題,或Hadoop將輸出一個錯誤消息,描述類型不匹配的消息。

清單 6.一個映射實現清單 6 中的map實現比較簡單:本質上是,Hadoop為在輸入文件中找到的每一行文本調用這個類。為了避免除了CSV頭部,首先檢查是否字節數(key 對象)為零。然后執行清單4和5中的步驟:捕獲傳入日期,進行轉換,然后設置為傳出鍵。我也提供了一個數:1。就是說,我為每個日期編寫一個計數器,當 reduce實現被調用時,獲取一個鍵和一系列值。在本例中,鍵是日期及其值,如 清單7所示:

清單 7.一個 map 輸出和 reduce 輸入的邏輯視圖

以下是引用片段:
"13-12-2010":[1,1,1,1,1,1,1,1] 
"14-12-2010":[1,1,1,1,1,1] 
"15-12-2010":[1,1,1,1,1,1,1,1,1]

注意,context.write(new Text(dtstr), new IntWritable(1))(在清單6中)構建了如 清單7所示的邏輯集合。正如您所了解的,context是一個保存各種信息的Hadoop數據結構。context被傳遞到reduce實現,reduce獲取這些值為1的值然后總和起來。因此,一個 reduce 實現邏輯上創建如 清單8所示的數據結構:

清單 8.一個reduce輸出視圖 
    

以下是引用片段:
"13-12-2010":8 
"14-12-2010":6 
"15-12-2010":9


我的reduce實現如 清單9所示。與Hadoop的Mapper一樣,Reducer被參數化了:前兩個參數是傳入的鍵類型(Text)和值類型(IntWritable),后兩個參數是輸出類型:鍵和值,這在本例中是相同的。

清單 9.reduce實現

  1. public class EarthQuakesPerDateReducer extends Reducer<Text, IntWritable, Text,   
  2.   IntWritable> {  
  3.  @Override  
  4.  protected void reduce(Text key, Iterable<IntWritable> values, Context context)  
  5.   throws IOException, InterruptedException {  
  6.   int count = 0;  
  7.   for (IntWritable value : values) {  
  8.    count++;  
  9.   }  
  10.   context.write(key, new IntWritable(count));  
  11.  }  

我的reduce實現非常簡單。正如我在清單7中所指出的,傳入的是實際上是一個值的集合,在本例中是1的集合,我所做的就是將它們加起來,然后寫出一個新鍵值對表示日期和次數。我的 reduce 代碼可以挑出您在清單8中所見到的這幾行。邏輯流程看起來像這樣:

以下是引用片段:
"13-12-2010":[1,1,1,1,1,1,1,1] -> "13-12-2010":8


當然,這個清單的抽象形式是map -> reduce。

定義一個Hadoop Job

現在我已經對我的map和reduce實現進行了編碼,接下來所要做的是將所有這一切鏈接到一個Hadoop Job。定義一個Job比較簡單:您需要提供輸入和輸出、map和reduce實現(如清單6和清單9所示)以及輸出類型。在本例中我的輸出類型和 reduce 實現所用的是同一個類型。

清單 10. 一個將map和redece綁在一起的Job 

  1. public class EarthQuakesPerDayJob {  
  2.  public static void main(String[] args) throws Throwable {  
  3.   Job job = new Job();  
  4.   job.setJarByClass(EarthQuakesPerDayJob.class);  
  5.   FileInputFormat.addInputPath(job, new Path(args[0]));  
  6.   FileOutputFormat.setOutputPath(job, new Path(args[1]));  
  7.   job.setMapperClass(EarthQuakesPerDateMapper.class);  
  8.   job.setReducerClass(EarthQuakesPerDateReducer.class);  
  9.   job.setOutputKeyClass(Text.class);  
  10.   job.setOutputValueClass(IntWritable.class);  
  11.   System.exit(job.waitForCompletion(true) ? 0 : 1);  
  12.  }  

在清單10中,我使用一個main方法將所有這一切綁在一起,該方法有兩個參數:地震CSV文件的目錄,以及生成報告的輸出目錄(Hadoop 更喜歡創建該目錄)。

為了執行這個小框架,我需要將這些類打包。我還需要告知 Hadoop 在哪里可以找到opencsv二進制文件。然后可以通過命令行執行Hadoop,如 清單11所示:

清單 11.執行 Hadoop

  1. $> export HADOOP_CLASSPATH=lib/opencsv-2.2.jar  
  2. $> hadoop jar target/quake.jar com.b50.hadoop.quake.EarthQuakesPerDayJob  
  3.    ~/temp/mreduce/in/ ~/temp/mreduce/out 

運行這些代碼,Hadoop開始運行時您將可以看到一堆文本在屏幕上一閃而過。我所用的CSV文件相比專門用于處理這種情況的Hadoop,那真是小巫見大巫!hadoop應該可以在幾秒鐘內完成,具體取決于您的處理功能。

完成這些后,您可以使用任何編輯器查看輸出文件內容。還可以選擇直接使用hadoop命令。正如 清單12所示:

清單 12.讀取Hadoop輸出
    

以下是引用片段:
$> hadoop dfs -cat part-r-00000  
05-12-2010      43 
06-12-2010      143 
07-12-2010      112 
08-12-2010      136 
09-12-2010      178 
10-12-2010      114 
11-12-2010      114 
12-12-2010      79


如果您像我一樣,在清單12中首先會注意到的就是每天地震數—12月9日就有178次地震。希望您也會注意到Hadoop實現了我所想要的:整齊地列出我的研究范圍內每天的地震次數。

編寫另一個Mapper

接下來,我想找到地震發生在哪里,以及如何快速計算出在我的研究范圍內記錄地震次數最多的是哪個區域。當然,您已經猜到了,Hadoop可以輕松地做到。在這個案例中,鍵不再是日期而是區域。因此,我編寫了一個新的Mapper類。

清單 13.一個新的map實現

  1. public class EarthQuakeLocationMapper extends Mapper<LongWritable, Text, Text,  
  2.   IntWritable> {  
  3.  @Override  
  4.  protected void map(LongWritable key, Text value, Context context) throws IOException,  
  5.   InterruptedException {  
  6.   if (key.get() > 0) {  
  7.    String[] lines = new CSVParser().parseLine(value.toString());  
  8.    context.write(new Text(lines[9]), new IntWritable(1));  
  9.   }  
  10.  }  

和之前獲取日期然后進行轉換相比,在清單13中我所作的是獲取位置,這是CSV陣列中的最后一個條目。

相比一個龐大的位置和數字列表,我將結果限制在那些7天內出現10次的區域。

清單 14.哪里的地震較多?

  1.  public class EarthQuakeLocationReducer extends   
  2. Reducer<Text, IntWritable, Text, IntWritable> { @Override protected void   
  3. reduce(Text key, Iterable<IntWritable> values, Context context) throws   
  4. IOException, InterruptedException { int count = 0for (IntWritable value :   
  5. values) { count++; } if (count >= 10) { context.write(key, new   
  6. IntWritable(count)); } } }  

清單14中的代碼和清單9中的代碼非常類似;然而,在本例中,我限制了輸出大于或等于10。接下來,我將map和reduce,以及其他 Job 實現綁在一起,進行打包,然后和平常一樣執行Hadoop獲取我的新答案。

使用hadoop dfs目錄顯示我所請求的新值:

清單 15.地震區域分布
    

以下是引用片段:
$> hadoop dfs -cat part-r-00000  
Andreanof Islands, Aleutian Islands, Alaska     24 
Arkansas        40 
Baja California, Mexico 101 
Central Alaska  74 
Central California      68 
Greater Los Angeles area, California    16 
Island of Hawaii, Hawaii        16 
Kenai Peninsula, Alaska 11 
Nevada  15 
Northern California     114 
San Francisco Bay area, California      21 
Southern Alaska 97 
Southern California     115 
Utah    19 
western Montana 11

從清單15還可以得到什么?首先,北美洲西海岸,從墨西哥到阿拉斯加是地震高發區。其次,阿肯色州明顯位于斷帶層上,這是我沒有意識到的。最后,如果您居住在北部或者是南加州(很多軟件開發人員都居住于此),您周圍的地方每隔 13 分鐘會震動一次。

結束語

使用Hadoop分析數據輕松且高效,對于它對數據分析所提供的支持,我只是了解皮毛而已。Hadoop的設計旨在以一種分布式方式運行,處理運行 map和reduce的各個節點之間的協調性。作為示例,本文中我只在一個JVM上運行Hadoop,該JVM僅有一個無足輕重的文件。

Hadoop本身是一個功能強大的工具,圍繞它還有一個完整的、不斷擴展的生態系統,可以提供子項目至基于云計算的Hadoop服務。Hadoop生態系統演示了項目背后豐富的社區活動。來自社區的許多工具證實了大數據分析作為一個全球業務活動的可行性。有了Hadoop,分布式數據挖掘和分析對所有軟件創新者和企業家都是可用的,包括但不限于Google和Yahoo!這類大企業。

 

【編輯推薦】

 

 

責任編輯:彭凡 來源: IBMDW
相關推薦

2011-09-02 10:59:02

大數據數據分析Hadoop

2013-04-28 10:01:28

HDInsightWindows AzuHadoop

2016-12-22 09:52:13

Hadoop大數據分析

2015-07-01 13:51:12

HadoopMapReduce數據分析

2012-05-30 11:29:14

Hadoop大數據

2023-09-27 15:34:48

數據編程

2013-12-18 11:26:08

Hadoop大數據

2020-05-26 16:25:33

Hadoop下載安裝

2019-04-15 15:32:12

大數據開發數據分析數據科學

2013-01-21 10:55:52

大數據Ayasdi拓撲數據

2015-08-19 13:50:19

數據分析

2024-03-04 11:10:01

2015-08-14 10:28:09

大數據

2021-09-10 14:05:14

預測分析大數據分析大數據

2021-09-06 09:00:00

大數據大數據分析技術

2019-04-23 15:35:53

Hadoop大數據數據處理

2018-06-05 12:06:20

Hadoop開源工具

2014-03-12 10:17:22

R語言Hadoop

2013-10-30 09:13:35

微軟Hadoop AzurWindows Azu

2017-09-18 17:59:23

Hadoop數據分析
點贊
收藏

51CTO技術棧公眾號

日本午夜精品一区二区| 国产精品www网站| 日韩精品视频一区二区| 成人在线爆射| 亚洲精品国产无套在线观| 国产亚洲自拍偷拍| 中文字幕第三页| 欧美久久综合| 亚洲视频在线观看免费| 杨幂一区二区国产精品| 黑人巨大精品| 一区二区三区资源| 日本午夜精品一区二区三区| 亚洲xxx在线| 日韩精品乱码免费| 欧美裸体男粗大视频在线观看| 在线视频 日韩| 四虎国产精品免费久久5151| 精品久久久久人成| 伊人久久99| 黄视频在线观看免费| 国产成人av一区二区三区在线| 26uuu亚洲伊人春色| 亚洲 欧美 变态 另类 综合| 久久99国内| 精品欧美黑人一区二区三区| 日韩在线不卡一区| 性感美女一区二区在线观看| 一个色妞综合视频在线观看| 中文字幕精品一区日韩| 国产小视频在线| 99久久精品国产麻豆演员表| 99精品在线直播| 中文字幕+乱码+中文乱码www| 日韩网站在线| 久久久免费在线观看| 懂色av粉嫩av蜜臀av一区二区三区| 欧美**vk| 亚洲欧美三级伦理| 182在线视频| av不卡一区二区| 欧美一区二区高清| 中文字幕第一页在线视频| 成人在线中文| 欧美性极品少妇| 国产日韩成人内射视频| 一区二区精品伦理...| 午夜一区二区三区在线观看| youjizz.com在线观看| 免费在线观看的电影网站| 亚洲激情校园春色| 天天想你在线观看完整版电影免费| 男人影院在线观看| 国产精品国产三级国产普通话99| 婷婷四房综合激情五月| av在线免费一区| 国产精品久久久久三级| 一本一生久久a久久精品综合蜜| 69久久夜色| 国产精品天天摸av网| 一区二区视频在线免费| 国产区在线观看| 一区二区三区av电影| 欧美高清中文字幕| 香蕉伊大人中文在线观看| 狠狠久久亚洲欧美专区| 久久久精品在线视频| 成人天堂yy6080亚洲高清| 欧美亚洲高清一区| www.污污视频| 黑人久久a级毛片免费观看| 亚洲精品国产欧美| av网在线播放| 欧美一区影院| 97av视频在线| 日本成人一级片| 国产一二三精品| 国产91一区二区三区| 婷婷在线免费视频| 国产午夜精品美女毛片视频| 一级特黄录像免费播放全99| 日韩另类在线| 欧美视频不卡中文| 污污网站免费观看| 亚洲精选av| 亚洲欧美精品在线| 玖玖爱这里只有精品| 一本久道综合久久精品| 国产精品久久久久久久电影| 国产特级黄色片| 91蜜桃婷婷狠狠久久综合9色| 视频一区免费观看| 欧美日韩经典丝袜| 在线免费不卡视频| 欧美日韩人妻精品一区在线| 成人情趣视频网站| 国内精品久久久久久中文字幕| 日韩精品在线一区二区三区| 国产福利一区二区三区视频| 日韩精品久久久毛片一区二区| 污污视频在线看| 色香色香欲天天天影视综合网| 国产永久免费网站| 亚洲高清极品| 欧美第一黄网免费网站| 欧美日韩 一区二区三区| 国产成人综合视频| 翔田千里亚洲一二三区| av资源中文在线| 欧美日韩电影一区| 亚洲色图14p| 欧美久久综合| 成人免费大片黄在线播放| 亚洲欧美综合一区二区| 亚洲一区在线看| 国产福利精品一区二区三区| 亚洲综合福利| 久久久久久久久久国产| 国产精品一区二区人人爽| 久久色在线观看| 成年人午夜免费视频| 精品国产一区二区三区2021| 在线观看亚洲视频| 中文字幕一区二区人妻电影| 成人精品电影在线观看| 欧洲美女和动交zoz0z| 韩国成人在线| 日韩国产在线看| 国产在线观看免费av| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩在线精品| 台湾佬中文娱乐网欧美电影| 日韩欧美成人午夜| 杨钰莹一级淫片aaaaaa播放| 毛片av一区二区三区| 日韩理论片在线观看| 亚洲伊人av| 亚洲女人天堂成人av在线| 中日韩精品视频在线观看| 福利一区在线观看| 91视频 - 88av| 日韩高清在线观看一区二区| 久久影院模特热| 97超碰资源站| 国产精品久久久久影院| 浓精h攵女乱爱av| 欧美天天综合| 国产精品三级美女白浆呻吟| 成年人在线观看| 精品视频1区2区| 手机av在线不卡| 久久99久久精品| 激情五月五月婷婷| 欧美日韩午夜电影网| 欧美日韩国产第一页| 国产成人精品白浆久久69| 一区二区三区四区精品在线视频 | 美女脱光内衣内裤视频久久影院| 色女孩综合网| 亚洲网站免费| 九九热99久久久国产盗摄| 国产视频一区二区三区四区五区| 亚洲毛片av在线| 极品白嫩少妇无套内谢| 伊人成年综合电影网| 免费观看成人高| 亚洲第一影院| 最新69国产成人精品视频免费| 一区二区日韩视频| 夜夜嗨av一区二区三区网页 | 国产精品乱战久久久| 69av在线视频| 幼a在线观看| 日韩精品在线看片z| 久久久午夜影院| 国产精品美女久久久久av爽李琼| 91插插插影院| 日韩视频三区| 亚洲欧美日韩另类精品一区二区三区 | 伊人久久大香线蕉综合热线 | 91精品一区二区三区综合在线爱 | 亚洲精品一区二区口爆| 亚洲高清一区二区三区| 永久免费看mv网站入口78| 久久超碰97中文字幕| 极品粉嫩国产18尤物| 精品国产一区二区三区小蝌蚪| 91精品久久久久久久久中文字幕| 牛牛精品在线视频| 国产小视频国产精品| www.色呦呦| 91福利区一区二区三区| www青青草原| 国产日韩欧美综合一区| wwwxxx色| 免费精品视频在线| 国产特级淫片高清视频| 欧美顶级大胆免费视频| 精品一区二区不卡| 亚洲高清影院| 国产97在线视频| 丰满的护士2在线观看高清| 最新日韩中文字幕| 欧洲毛片在线| 精品国内片67194| 中文字幕av片| 精品久久久久久久久久久久| 国产suv一区二区三区| av男人天堂一区| 激情成人在线观看| 日韩电影一区二区三区| 免费无遮挡无码永久视频| 小小影院久久| 亚洲成人第一| 亚洲精品aaaaa| 国产日韩在线一区二区三区| 亚洲午夜国产成人| 国产精品青青在线观看爽香蕉| 春色校园综合激情亚洲| 毛片精品免费在线观看| 欧美三级理伦电影| 国产一区二区动漫| 日本1级在线| 精品对白一区国产伦| av网站免费大全| 欧美日韩精品久久久| 区一区二在线观看| 岛国av一区二区三区| 久久免费公开视频| 亚洲影视在线播放| 欧美在线视频第一页| 1区2区3区欧美| 国产一区在线观看免费| 国产欧美精品日韩区二区麻豆天美| 黄色国产在线观看| caoporm超碰国产精品| 在线看黄色的网站| av在线综合网| www.啪啪.com| kk眼镜猥琐国模调教系列一区二区| 欧美一区二区三区影院| 国产成人日日夜夜| 国产女主播在线播放| 懂色av中文一区二区三区| 任你躁av一区二区三区| 国产v日产∨综合v精品视频| 国产亚洲精品成人a| 丁香婷婷综合网| 久久久男人的天堂| 不卡av在线免费观看| 亚洲中文字幕无码一区| aaa国产一区| 黄色a一级视频| 国产亚洲欧美日韩俺去了| 免费在线观看a视频| 国产精品人人做人人爽人人添| 五月婷婷婷婷婷| 亚洲乱码日产精品bd| 久久精品第一页| 亚洲成人中文在线| 天天干在线播放| 欧洲精品一区二区| 91 中文字幕| 精品乱人伦小说| 污污网站免费在线观看| 亚洲免费av网址| 在线观看免费版| 久99九色视频在线观看| 激情视频免费网站| 日本国产精品| 日韩黄色影视| 天天天综合网| 阿v天堂2018| 久久精品男女| 91亚洲免费视频| 国产不卡在线一区| 泷泽萝拉在线播放| 国产精品美女视频| 黄色一级片在线| 欧美午夜久久久| 中文字幕人成人乱码亚洲电影| 91精品国产综合久久久蜜臀粉嫩 | 亚洲欧美日韩精品在线| 中文一区一区三区免费在线观看| 国产xxxx振车| 午夜一区不卡| 亚洲欧美日本一区二区| 99精品国产99久久久久久白柏| 天天躁夜夜躁狠狠是什么心态 | 日韩欧美亚洲国产| 在线免费观看日韩欧美| www.热久久| 国产亚洲成精品久久| 蜜臀av在线| 国产精品第一视频| 电影一区二区在线观看| 亚洲精品在线视频观看| 亚洲清纯自拍| 91亚洲一区二区| 国产欧美视频在线观看| www.99re7.com| 欧美美女视频在线观看| 少妇av一区二区| 美女av一区二区| 日本国产欧美| 精品在线观看一区二区| 欧美jjzz| 日本一二区免费| 久久精品一区二区三区不卡牛牛 | dy888亚洲精品一区二区三区| 欧美中文字幕视频| 日韩在线观看中文字幕| 亚洲精品视频一二三| 在线综合亚洲| 亚洲免费观看在线| 亚洲视频一区在线| 国产一级片一区二区| 国产午夜精品麻豆| 黄页在线观看免费| 91麻豆国产语对白在线观看| 不卡av一区二区| 久久精品午夜福利| 91美女在线视频| 日韩精品在线免费看| 欧美成人精品3d动漫h| 国产在线看片| 91九色国产在线| 欧美h版在线| 色戒在线免费观看| 国产精品美女久久福利网站 | 精品国产亚洲一区二区三区在线观看| 黄视频网站在线看| 成人精品视频99在线观看免费| 精品久久影视| 韩国视频一区二区三区| 中文字幕+乱码+中文字幕一区| av片免费观看| 亚洲片在线观看| 日韩一区二区三区在线免费观看 | 韩国三级av在线免费观看| 欧美亚洲第一页| 羞羞色国产精品网站| 日日橹狠狠爱欧美超碰| 2024国产精品| 激情视频网站在线观看| 国产一区二区三区久久精品| av在线日韩| 亚洲图片小说在线| 狠狠网亚洲精品| 欧美日韩免费一区二区| 欧美成人a∨高清免费观看| 欧美aaa免费| 精品国产乱码久久久久久久软件| 日韩视频一区| 国产sm调教视频| 欧美日韩国产精品自在自线| 黄色一级片在线观看| 亚洲一区中文字幕| 伊人久久成人| 女人又爽又黄免费女仆| 欧美日韩一区二区三区四区 | 亚洲高清视频的网址| 亚洲av成人无码久久精品老人| 国产激情综合五月久久| 久久福利影院| 日本中文字幕精品| 婷婷开心久久网| 成人一区二区不卡免费| 成人免费高清完整版在线观看| 欧美国产专区| 麻豆av免费观看| 8v天堂国产在线一区二区| 久久青青色综合| 欧美一区二区福利| 国内久久精品视频| 国产午夜免费视频| 亚洲视频综合网| 香蕉大人久久国产成人av| 91传媒久久久| 亚洲日本在线观看| 无码国产精品一区二区色情男同 | 国产精品50p| 国产精品素人视频| 亚洲欧美另类视频| 日本精品视频在线观看| 婷婷丁香综合| a级在线观看视频| 884aa四虎影成人精品一区| 爱搞国产精品| 中文字幕一区二区三区有限公司| 成人av在线播放网址| 中文字幕一级片| 97成人在线视频| 我不卡伦不卡影院| 91精彩刺激对白露脸偷拍| 日韩欧美色电影| 国产精品66| 欧洲av无码放荡人妇网站| 亚洲欧美一区二区不卡| 精品欧美不卡一区二区在线观看|