久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop Map/Reduce教程

發(fā)布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop Map/Reduce教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Hadoop Map/Reduce教程

??? 目的
??? 先決條件
??? 概述
??? 輸入與輸出
??? 例子:WordCount v1.0
??????? 源代碼
??????? 用法
??????? 解釋
??? Map/Reduce - 用戶界面
??????? 核心功能描述
??????????? Mapper
??????????? Reducer
??????????? Partitioner
??????????? Reporter
??????????? OutputCollector
??????? 作業(yè)配置
??????? 任務(wù)的執(zhí)行和環(huán)境
??????? 作業(yè)的提交與監(jiān)控
??????????? 作業(yè)的控制
??????? 作業(yè)的輸入
??????????? InputSplit
??????????? RecordReader
??????? 作業(yè)的輸出
??????????? 任務(wù)的Side-Effect File
??????????? RecordWriter
??????? 其他有用的特性
??????????? Counters
??????????? DistributedCache
??????????? Tool
??????????? IsolationRunner
??????????? Profiling
??????????? 調(diào)試
??????????? JobControl
??????????? 數(shù)據(jù)壓縮
??? 例子:WordCount v2.0
??????? 源代碼
??????? 運行樣例
??????? 程序要點

目的

這篇教程從用戶的角度出發(fā),全面地介紹了Hadoop Map/Reduce框架的各個方面。

先決條件

請先確認Hadoop被正確安裝、配置和正常運行中。更多信息見:

  • Hadoop快速入門對初次使用者。
  • Hadoop集群搭建對大規(guī)模分布式集群。

概述

Hadoop Map/Reduce是一個使用簡易的軟件框架,基于它寫出來的應(yīng)用程序能夠運行在由上千個商用機器組成的大型集群上,并以一種可靠容錯的方式并行處理上T級別的數(shù)據(jù)集。

一個Map/Reduce 作業(yè)(job) 通常會把輸入的數(shù)據(jù)集切分為若干獨立的數(shù)據(jù)塊,由 map任務(wù)(task)以完全并行的方式處理它們。框架會對map的輸出先進行排序, 然后把結(jié)果輸入給reduce任務(wù)。通常作業(yè)的輸入和輸出都會被存儲在文件系統(tǒng)中。 整個框架負責任務(wù)的調(diào)度和監(jiān)控,以及重新執(zhí)行已經(jīng)失敗的任務(wù)。

通常,Map/Reduce框架和分布式文件系統(tǒng)是運行在一組相同的節(jié)點上的,也就是說,計算節(jié)點和存儲節(jié)點通常在一起。這種配置允許框架在那些已經(jīng)存好數(shù)據(jù)的節(jié)點上高效地調(diào)度任務(wù),這可以使整個集群的網(wǎng)絡(luò)帶寬被非常高效地利用。

Map/Reduce框架由一個單獨的master JobTracker 和每個集群節(jié)點一個slave TaskTracker共同組成。master負責調(diào)度構(gòu)成一個作業(yè)的所有任務(wù),這些任務(wù)分布在不同的slave上,master監(jiān)控它們的執(zhí)行,重新執(zhí)行已經(jīng)失敗的任務(wù)。而slave僅負責執(zhí)行由master指派的任務(wù)。

應(yīng)用程序至少應(yīng)該指明輸入/輸出的位置(路徑),并通過實現(xiàn)合適的接口或抽象類提供map和reduce函數(shù)。再加上其他作業(yè)的參數(shù),就構(gòu)成了作業(yè)配置(job configuration)。然后,Hadoop的 job client提交作業(yè)(jar包/可執(zhí)行程序等)和配置信息給JobTracker,后者負責分發(fā)這些軟件和配置信息給slave、調(diào)度任務(wù)并監(jiān)控它們的執(zhí)行,同時提供狀態(tài)和診斷信息給job-client。

雖然Hadoop框架是用JavaTM實現(xiàn)的,但Map/Reduce應(yīng)用程序則不一定要用 Java來寫 。

  • Hadoop Streaming是一種運行作業(yè)的實用工具,它允許用戶創(chuàng)建和運行任何可執(zhí)行程序 (例如:Shell工具)來做為mapper和reducer。
  • Hadoop Pipes是一個與SWIG兼容的C++ API (沒有基于JNITM技術(shù)),它也可用于實現(xiàn)Map/Reduce應(yīng)用程序。

輸入與輸出

Map/Reduce框架運轉(zhuǎn)在<key, value> 鍵值對上,也就是說, 框架把作業(yè)的輸入看為是一組<key, value> 鍵值對,同樣也產(chǎn)出一組 <key, value> 鍵值對做為作業(yè)的輸出,這兩組鍵值對的類型可能不同。

框架需要對keyvalue的類(classes)進行序列化操作, 因此,這些類需要實現(xiàn) Writable接口。 另外,為了方便框架執(zhí)行排序操作,key類必須實現(xiàn) WritableComparable接口。

一個Map/Reduce 作業(yè)的輸入和輸出類型如下所示:

(input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output)

例子:WordCount v1.0

在深入細節(jié)之前,讓我們先看一個Map/Reduce的應(yīng)用示例,以便對它們的工作方式有一個初步的認識。

WordCount是一個簡單的應(yīng)用,它可以計算出指定數(shù)據(jù)集中每一個單詞出現(xiàn)的次數(shù)。

這個應(yīng)用適用于 單機模式, 偽分布式模式 或 完全分布式模式 三種Hadoop安裝方式。

源代碼

?WordCount.java
1.package org.myorg;
2.?
3.import java.io.IOException;
4.import java.util.*;
5.?
6.import org.apache.hadoop.fs.Path;
7.import org.apache.hadoop.conf.*;
8.import org.apache.hadoop.io.*;
9.import org.apache.hadoop.mapred.*;
10.import org.apache.hadoop.util.*;
11.?
12.public class WordCount {
13.?
14.?? public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
15.???? private final static IntWritable one = new IntWritable(1);
16.???? private Text word = new Text();
17.?
18.???? public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
19.?????? String line = value.toString();
20.?????? StringTokenizer tokenizer = new StringTokenizer(line);
21.?????? while (tokenizer.hasMoreTokens()) {
22.???????? word.set(tokenizer.nextToken());
23.???????? output.collect(word, one);
24.?????? }
25.???? }
26.?? }
27.?
28.?? public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
29.???? public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
30.?????? int sum = 0;
31.?????? while (values.hasNext()) {
32.???????? sum += values.next().get();
33.?????? }
34.?????? output.collect(key, new IntWritable(sum));
35.???? }
36.?? }
37.?
38.?? public static void main(String[] args) throws Exception {
39.???? JobConf conf = new JobConf(WordCount.class);
40.???? conf.setJobName("wordcount");
41.?
42.???? conf.setOutputKeyClass(Text.class);
43.???? conf.setOutputValueClass(IntWritable.class);
44.?
45.???? conf.setMapperClass(Map.class);
46.???? conf.setCombinerClass(Reduce.class);
47.???? conf.setReducerClass(Reduce.class);
48.?
49.???? conf.setInputFormat(TextInputFormat.class);
50.???? conf.setOutputFormat(TextOutputFormat.class);
51.?
52.???? FileInputFormat.setInputPaths(conf, new Path(args[0]));
53.???? FileOutputFormat.setOutputPath(conf, new Path(args[1]));
54.?
55.???? JobClient.runJob(conf);
57.?? }
58.}
59.?

附此代碼:

ackage org.myorg;import java.io.IOException;import java.util.*;import org.apache.hadoop.fs.Path;import org.apache.hadoop.conf.*;import org.apache.hadoop.io.*;import org.apache.hadoop.mapred.*;import org.apache.hadoop.util.*;public class WordCount {public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {String line = value.toString();StringTokenizer tokenizer = new StringTokenizer(line);while (tokenizer.hasMoreTokens()) {word.set(tokenizer.nextToken());output.collect(word, one);}}}public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {int sum = 0;while (values.hasNext()) {sum += values.next().get();}output.collect(key, new IntWritable(sum));}}public static void main(String[] args) throws Exception {JobConf conf = new JobConf(WordCount.class);conf.setJobName("wordcount");conf.setOutputKeyClass(Text.class);conf.setOutputValueClass(IntWritable.class);conf.setMapperClass(Map.class);conf.setCombinerClass(Reduce.class);conf.setReducerClass(Reduce.class);conf.setInputFormat(TextInputFormat.class);conf.setOutputFormat(TextOutputFormat.class);FileInputFormat.setInputPaths(conf, new Path(args[0]));FileOutputFormat.setOutputPath(conf, new Path(args[1]));JobClient.runJob(conf);}}

用法

假設(shè)環(huán)境變量HADOOP_HOME對應(yīng)安裝時的根目錄,HADOOP_VERSION對應(yīng)Hadoop的當前安裝版本,編譯WordCount.java來創(chuàng)建jar包,可如下操作:

$ mkdir wordcount_classes
$ javac -classpath ${HADOOP_HOME}/hadoop-${HADOOP_VERSION}-core.jar -d wordcount_classes WordCount.java
$ jar -cvf /usr/joe/wordcount.jar -C wordcount_classes/ .

假設(shè):

  • /usr/joe/wordcount/input - 是HDFS中的輸入路徑
  • /usr/joe/wordcount/output - 是HDFS中的輸出路徑

用示例文本文件做為輸入:

$ bin/hadoop dfs -ls /usr/joe/wordcount/input/
/usr/joe/wordcount/input/file01
/usr/joe/wordcount/input/file02

$ bin/hadoop dfs -cat /usr/joe/wordcount/input/file01
Hello World Bye World

$ bin/hadoop dfs -cat /usr/joe/wordcount/input/file02
Hello Hadoop Goodbye Hadoop

運行應(yīng)用程序:

$ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount /usr/joe/wordcount/input /usr/joe/wordcount/output

輸出是:

$ bin/hadoop dfs -cat /usr/joe/wordcount/output/part-00000
Bye 1
Goodbye 1
Hadoop 2
Hello 2
World 2

應(yīng)用程序能夠使用-files選項來指定一個由逗號分隔的路徑列表,這些路徑是task的當前工作目錄。使用選項-libjars可以向map和reduce的classpath中添加jar包。使用-archives選項程序可以傳遞檔案文件做為參數(shù),這些檔案文件會被解壓并且在task的當前工作目錄下會創(chuàng)建一個指向解壓生成的目錄的符號鏈接(以壓縮包的名字命名)。 有關(guān)命令行選項的更多細節(jié)請參考 Commands manual。

使用-libjars-files運行wordcount例子:
hadoop jar hadoop-examples.jar wordcount -files cachefile.txt -libjars mylib.jar input output

解釋

WordCount應(yīng)用程序非常直截了當。

Mapper(14-26行)中的map方法(18-25行)通過指定的 TextInputFormat(49行)一次處理一行。然后,它通過StringTokenizer 以空格為分隔符將一行切分為若干tokens,之后,輸出< <word>, 1> 形式的鍵值對。

對于示例中的第一個輸入,map輸出是:
< Hello, 1>
< World, 1>
< Bye, 1>
< World, 1>

第二個輸入,map輸出是:
< Hello, 1>
< Hadoop, 1>
< Goodbye, 1>
< Hadoop, 1>

關(guān)于組成一個指定作業(yè)的map數(shù)目的確定,以及如何以更精細的方式去控制這些map,我們將在教程的后續(xù)部分學習到更多的內(nèi)容。

WordCount還指定了一個combiner (46行)。因此,每次map運行之后,會對輸出按照key進行排序,然后把輸出傳遞給本地的combiner(按照作業(yè)的配置與Reducer一樣),進行本地聚合。

第一個map的輸出是:
< Bye, 1>
< Hello, 1>
< World, 2>

第二個map的輸出是:
< Goodbye, 1>
< Hadoop, 2>
< Hello, 1>

Reducer(28-36行)中的reduce方法(29-35行) 僅是將每個key(本例中就是單詞)出現(xiàn)的次數(shù)求和。

因此這個作業(yè)的輸出就是:
< Bye, 1>
< Goodbye, 1>
< Hadoop, 2>
< Hello, 2>
< World, 2>

代碼中的run方法中指定了作業(yè)的幾個方面, 例如:通過命令行傳遞過來的輸入/輸出路徑、key/value的類型、輸入/輸出的格式等等JobConf中的配置信息。隨后程序調(diào)用了JobClient.runJob(55行)來提交作業(yè)并且監(jiān)控它的執(zhí)行。

我們將在本教程的后續(xù)部分學習更多的關(guān)于JobConf JobClientTool和其他接口及類(class)。

Map/Reduce - 用戶界面

這部分文檔為用戶將會面臨的Map/Reduce框架中的各個環(huán)節(jié)提供了適當?shù)募毠?jié)。這應(yīng)該會幫助用戶更細粒度地去實現(xiàn)、配置和調(diào)優(yōu)作業(yè)。然而,請注意每個類/接口的javadoc文檔提供最全面的文檔;本文只是想起到指南的作用。

我們會先看看MapperReducer接口。應(yīng)用程序通常會通過提供mapreduce方法來實現(xiàn)它們。

然后,我們會討論其他的核心接口,其中包括: JobConfJobClientPartitionerOutputCollectorReporterInputFormatOutputFormat等等。

最后,我們將通過討論框架中一些有用的功能點(例如:DistributedCache IsolationRunner等等)來收尾。

核心功能描述

應(yīng)用程序通常會通過提供mapreduce來實現(xiàn) MapperReducer接口,它們組成作業(yè)的核心。

Mapper

Mapper將輸入鍵值對(key/value pair)映射到一組中間格式的鍵值對集合。

Map是一類將輸入記錄集轉(zhuǎn)換為中間格式記錄集的獨立任務(wù)。 這種轉(zhuǎn)換的中間格式記錄集不需要與輸入記錄集的類型一致。一個給定的輸入鍵值對可以映射成0個或多個輸出鍵值對。

Hadoop Map/Reduce框架為每一個InputSplit產(chǎn)生一個map任務(wù),而每個InputSplit是由該作業(yè)的InputFormat產(chǎn)生的。

概括地說,對Mapper的實現(xiàn)者需要重寫 JobConfigurable.configure(JobConf)方法,這個方法需要傳遞一個JobConf參數(shù),目的是完成Mapper的初始化工作。然后,框架為這個任務(wù)的InputSplit中每個鍵值對調(diào)用一次 map(WritableComparable, Writable, OutputCollector, Reporter)操作。應(yīng)用程序可以通過重寫Closeable.close()方法來執(zhí)行相應(yīng)的清理工作。

輸出鍵值對不需要與輸入鍵值對的類型一致。一個給定的輸入鍵值對可以映射成0個或多個輸出鍵值對。通過調(diào)用 OutputCollector.collect(WritableComparable,Writable)可以收集輸出的鍵值對。

應(yīng)用程序可以使用Reporter報告進度,設(shè)定應(yīng)用級別的狀態(tài)消息,更新Counters(計數(shù)器),或者僅是表明自己運行正常。

框架隨后會把與一個特定key關(guān)聯(lián)的所有中間過程的值(value)分成組,然后把它們傳給Reducer以產(chǎn)出最終的結(jié)果。用戶可以通過 JobConf.setOutputKeyComparatorClass(Class)來指定具體負責分組的 Comparator

Mapper的輸出被排序后,就被劃分給每個Reducer。分塊的總數(shù)目和一個作業(yè)的reduce任務(wù)的數(shù)目是一樣的。用戶可以通過實現(xiàn)自定義的 Partitioner來控制哪個key被分配給哪個 Reducer

用戶可選擇通過 JobConf.setCombinerClass(Class)指定一個combiner,它負責對中間過程的輸出進行本地的聚集,這會有助于降低從MapperReducer數(shù)據(jù)傳輸量。

這些被排好序的中間過程的輸出結(jié)果保存的格式是(key-len, key, value-len, value),應(yīng)用程序可以通過JobConf控制對這些中間結(jié)果是否進行壓縮以及怎么壓縮,使用哪種 CompressionCodec。

需要多少個Map?

Map的數(shù)目通常是由輸入數(shù)據(jù)的大小決定的,一般就是所有輸入文件的總塊(block)數(shù)。

Map正常的并行規(guī)模大致是每個節(jié)點(node)大約10到100個map,對于CPU 消耗較小的map任務(wù)可以設(shè)到300個左右。由于每個任務(wù)初始化需要一定的時間,因此,比較合理的情況是map執(zhí)行的時間至少超過1分鐘。

這樣,如果你輸入10TB的數(shù)據(jù),每個塊(block)的大小是128MB,你將需要大約82,000個map來完成任務(wù),除非使用 setNumMapTasks(int)(注意:這里僅僅是對框架進行了一個提示(hint),實際決定因素見這里)將這個數(shù)值設(shè)置得更高。

Reducer

Reducer將與一個key關(guān)聯(lián)的一組中間數(shù)值集歸約(reduce)為一個更小的數(shù)值集。

用戶可以通過 JobConf.setNumReduceTasks(int)設(shè)定一個作業(yè)中reduce任務(wù)的數(shù)目。

概括地說,對Reducer的實現(xiàn)者需要重寫 JobConfigurable.configure(JobConf)方法,這個方法需要傳遞一個JobConf參數(shù),目的是完成Reducer的初始化工作。然后,框架為成組的輸入數(shù)據(jù)中的每個<key, (list of values)>對調(diào)用一次 reduce(WritableComparable, Iterator, OutputCollector, Reporter)方法。之后,應(yīng)用程序可以通過重寫Closeable.close()來執(zhí)行相應(yīng)的清理工作。

Reducer有3個主要階段:shuffle、sort和reduce。

Shuffle

Reducer的輸入就是Mapper已經(jīng)排好序的輸出。在這個階段,框架通過HTTP為每個Reducer獲得所有Mapper輸出中與之相關(guān)的分塊。

Sort

這個階段,框架將按照key的值對Reducer的輸入進行分組 (因為不同mapper的輸出中可能會有相同的key)。

Shuffle和Sort兩個階段是同時進行的;map的輸出也是一邊被取回一邊被合并的。

Secondary Sort

如果需要中間過程對key的分組規(guī)則和reduce前對key的分組規(guī)則不同,那么可以通過 JobConf.setOutputValueGroupingComparator(Class)來指定一個Comparator。再加上 JobConf.setOutputKeyComparatorClass(Class)可用于控制中間過程的key如何被分組,所以結(jié)合兩者可以實現(xiàn)按值的二次排序。

Reduce

在這個階段,框架為已分組的輸入數(shù)據(jù)中的每個 <key, (list of values)>對調(diào)用一次 reduce(WritableComparable, Iterator, OutputCollector, Reporter)方法。

Reduce任務(wù)的輸出通常是通過調(diào)用 OutputCollector.collect(WritableComparable, Writable)寫入 文件系統(tǒng)的。

應(yīng)用程序可以使用Reporter報告進度,設(shè)定應(yīng)用程序級別的狀態(tài)消息,更新Counters(計數(shù)器),或者僅是表明自己運行正常。

Reducer的輸出是沒有排序的。

需要多少個Reduce?

Reduce的數(shù)目建議是0.951.75乘以 (<no. of nodes> * mapred.tasktracker.reduce.tasks.maximum)。

用0.95,所有reduce可以在maps一完成時就立刻啟動,開始傳輸map的輸出結(jié)果。用1.75,速度快的節(jié)點可以在完成第一輪reduce任務(wù)后,可以開始第二輪,這樣可以得到比較好的負載均衡的效果。

增加reduce的數(shù)目會增加整個框架的開銷,但可以改善負載均衡,降低由于執(zhí)行失敗帶來的負面影響。

上述比例因子比整體數(shù)目稍小一些是為了給框架中的推測性任務(wù)(speculative-tasks) 或失敗的任務(wù)預(yù)留一些reduce的資源。

無Reducer

如果沒有歸約要進行,那么設(shè)置reduce任務(wù)的數(shù)目為零是合法的。

這種情況下,map任務(wù)的輸出會直接被寫入由 setOutputPath(Path)指定的輸出路徑。框架在把它們寫入FileSystem之前沒有對它們進行排序。

Partitioner

Partitioner用于劃分鍵值空間(key space)。

Partitioner負責控制map輸出結(jié)果key的分割。Key(或者一個key子集)被用于產(chǎn)生分區(qū),通常使用的是Hash函數(shù)。分區(qū)的數(shù)目與一個作業(yè)的reduce任務(wù)的數(shù)目是一樣的。因此,它控制將中間過程的key(也就是這條記錄)應(yīng)該發(fā)送給m個reduce任務(wù)中的哪一個來進行reduce操作。

HashPartitioner是默認的 Partitioner

Reporter

Reporter是用于Map/Reduce應(yīng)用程序報告進度,設(shè)定應(yīng)用級別的狀態(tài)消息, 更新Counters(計數(shù)器)的機制。

MapperReducer的實現(xiàn)可以利用Reporter 來報告進度,或者僅是表明自己運行正常。在那種應(yīng)用程序需要花很長時間處理個別鍵值對的場景中,這種機制是很關(guān)鍵的,因為框架可能會以為這個任務(wù)超時了,從而將它強行殺死。另一個避免這種情況發(fā)生的方式是,將配置參數(shù)mapred.task.timeout設(shè)置為一個足夠高的值(或者干脆設(shè)置為零,則沒有超時限制了)。

應(yīng)用程序可以用Reporter來更新Counter(計數(shù)器)。

OutputCollector

OutputCollector是一個Map/Reduce框架提供的用于收集 MapperReducer輸出數(shù)據(jù)的通用機制 (包括中間輸出結(jié)果和作業(yè)的輸出結(jié)果)。

Hadoop Map/Reduce框架附帶了一個包含許多實用型的mapper、reducer和partitioner 的類庫。

作業(yè)配置

JobConf代表一個Map/Reduce作業(yè)的配置。

JobConf是用戶向Hadoop框架描述一個Map/Reduce作業(yè)如何執(zhí)行的主要接口。框架會按照JobConf描述的信息忠實地去嘗試完成這個作業(yè),然而:

  • 一些參數(shù)可能會被管理者標記為 final,這意味它們不能被更改。
  • 一些作業(yè)的參數(shù)可以被直截了當?shù)剡M行設(shè)置(例如: setNumReduceTasks(int)),而另一些參數(shù)則與框架或者作業(yè)的其他參數(shù)之間微妙地相互影響,并且設(shè)置起來比較復(fù)雜(例如: setNumMapTasks(int))。

通常,JobConf會指明Mapper、Combiner(如果有的話)、 PartitionerReducerInputFormatOutputFormat的具體實現(xiàn)。JobConf還能指定一組輸入文件 (setInputPaths(JobConf, Path...) /addInputPath(JobConf, Path)) 和(setInputPaths(JobConf, String) /addInputPaths(JobConf, String)) 以及輸出文件應(yīng)該寫在哪兒 (setOutputPath(Path))。

JobConf可選擇地對作業(yè)設(shè)置一些高級選項,例如:設(shè)置Comparator; 放到DistributedCache上的文件;中間結(jié)果或者作業(yè)輸出結(jié)果是否需要壓縮以及怎么壓縮; 利用用戶提供的腳本(setMapDebugScript(String)/setReduceDebugScript(String)) 進行調(diào)試;作業(yè)是否允許預(yù)防性(speculative)任務(wù)的執(zhí)行 (setMapSpeculativeExecution(boolean))/(setReduceSpeculativeExecution(boolean)) ;每個任務(wù)最大的嘗試次數(shù) (setMaxMapAttempts(int)/setMaxReduceAttempts(int)) ;一個作業(yè)能容忍的任務(wù)失敗的百分比 (setMaxMapTaskFailuresPercent(int)/setMaxReduceTaskFailuresPercent(int)) ;等等。

當然,用戶能使用 set(String, String)/get(String, String) 來設(shè)置或者取得應(yīng)用程序需要的任意參數(shù)。然而,DistributedCache的使用是面向大規(guī)模只讀數(shù)據(jù)的。

任務(wù)的執(zhí)行和環(huán)境

TaskTracker是在一個單獨的jvm上以子進程的形式執(zhí)行 Mapper/Reducer任務(wù)(Task)的。

子任務(wù)會繼承父TaskTracker的環(huán)境。用戶可以通過JobConf中的 mapred.child.java.opts配置參數(shù)來設(shè)定子jvm上的附加選項,例如: 通過-Djava.library.path=<> 將一個非標準路徑設(shè)為運行時的鏈接用以搜索共享庫,等等。如果mapred.child.java.opts包含一個符號@taskid@, 它會被替換成map/reduce的taskid的值。

下面是一個包含多個參數(shù)和替換的例子,其中包括:記錄jvm GC日志; JVM JMX代理程序以無密碼的方式啟動,這樣它就能連接到j(luò)console上,從而可以查看子進程的內(nèi)存和線程,得到線程的dump;還把子jvm的最大堆尺寸設(shè)置為512MB, 并為子jvm的java.library.path添加了一個附加路徑。

<property>
??<name>mapred.child.java.opts</name>
??<value>
???? -Xmx512M -Djava.library.path=/home/mycompany/lib -verbose:gc -Xloggc:/tmp/@taskid@.gc
???? -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
??</value>
</property>

用戶或管理員也可以使用mapred.child.ulimit設(shè)定運行的子任務(wù)的最大虛擬內(nèi)存。mapred.child.ulimit的值以(KB)為單位,并且必須大于或等于-Xmx參數(shù)傳給JavaVM的值,否則VM會無法啟動。

注意:mapred.child.java.opts只用于設(shè)置task tracker啟動的子任務(wù)。為守護進程設(shè)置內(nèi)存選項請查看 cluster_setup.html

${mapred.local.dir}/taskTracker/是task tracker的本地目錄, 用于創(chuàng)建本地緩存和job。它可以指定多個目錄(跨越多個磁盤),文件會半隨機的保存到本地路徑下的某個目錄。當job啟動時,task tracker根據(jù)配置文檔創(chuàng)建本地job目錄,目錄結(jié)構(gòu)如以下所示:

  • ${mapred.local.dir}/taskTracker/archive/ :分布式緩存。這個目錄保存本地的分布式緩存。因此本地分布式緩存是在所有task和job間共享的。
  • ${mapred.local.dir}/taskTracker/jobcache/$jobid/ : 本地job目錄。
    • ${mapred.local.dir}/taskTracker/jobcache/$jobid/work/: job指定的共享目錄。各個任務(wù)可以使用這個空間做為暫存空間,用于它們之間共享文件。這個目錄通過job.local.dir 參數(shù)暴露給用戶。這個路徑可以通過API JobConf.getJobLocalDir()來訪問。它也可以被做為系統(tǒng)屬性獲得。因此,用戶(比如運行streaming)可以調(diào)用System.getProperty("job.local.dir")獲得該目錄。
    • ${mapred.local.dir}/taskTracker/jobcache/$jobid/jars/: 存放jar包的路徑,用于存放作業(yè)的jar文件和展開的jar。job.jar是應(yīng)用程序的jar文件,它會被自動分發(fā)到各臺機器,在task啟動前會被自動展開。使用api JobConf.getJar() 函數(shù)可以得到j(luò)ob.jar的位置。使用JobConf.getJar().getParent()可以訪問存放展開的jar包的目錄。
    • ${mapred.local.dir}/taskTracker/jobcache/$jobid/job.xml: 一個job.xml文件,本地的通用的作業(yè)配置文件。
    • ${mapred.local.dir}/taskTracker/jobcache/$jobid/$taskid: 每個任務(wù)有一個目錄task-id,它里面有如下的目錄結(jié)構(gòu):
      • ${mapred.local.dir}/taskTracker/jobcache/$jobid/$taskid/job.xml: 一個job.xml文件,本地化的任務(wù)作業(yè)配置文件。任務(wù)本地化是指為該task設(shè)定特定的屬性值。這些值會在下面具體說明。
      • ${mapred.local.dir}/taskTracker/jobcache/$jobid/$taskid/output 一個存放中間過程的輸出文件的目錄。它保存了由framwork產(chǎn)生的臨時map reduce數(shù)據(jù),比如map的輸出文件等。
      • ${mapred.local.dir}/taskTracker/jobcache/$jobid/$taskid/work: task的當前工作目錄。
      • ${mapred.local.dir}/taskTracker/jobcache/$jobid/$taskid/work/tmp: task的臨時目錄。(用戶可以設(shè)定屬性mapred.child.tmp 來為map和reduce task設(shè)定臨時目錄。缺省值是./tmp。如果這個值不是絕對路徑, 它會把task的工作路徑加到該路徑前面作為task的臨時文件路徑。如果這個值是絕對路徑則直接使用這個值。 如果指定的目錄不存在,會自動創(chuàng)建該目錄。之后,按照選項 -Djava.io.tmpdir='臨時文件的絕對路徑'執(zhí)行java子任務(wù)。 pipes和streaming的臨時文件路徑是通過環(huán)境變量TMPDIR='the absolute path of the tmp dir'設(shè)定的)。 如果mapred.child.tmp./tmp值,這個目錄會被創(chuàng)建。

下面的屬性是為每個task執(zhí)行時使用的本地參數(shù),它們保存在本地化的任務(wù)作業(yè)配置文件里:

名稱類型描述
mapred.job.idStringjob id
mapred.jarStringjob目錄下job.jar的位置
job.local.dirStringjob指定的共享存儲空間
mapred.tip.idStringtask id
mapred.task.idStringtask嘗試id
mapred.task.is.mapboolean是否是map task
mapred.task.partitioninttask在job中的id
map.input.fileStringmap讀取的文件名
map.input.startlongmap輸入的數(shù)據(jù)塊的起始位置偏移
map.input.lengthlongmap輸入的數(shù)據(jù)塊的字節(jié)數(shù)
mapred.work.output.dirStringtask臨時輸出目錄

task的標準輸出和錯誤輸出流會被讀到TaskTracker中,并且記錄到 ${HADOOP_LOG_DIR}/userlogs

DistributedCache 可用于map或reduce task中分發(fā)jar包和本地庫。子jvm總是把 當前工作目錄 加到 java.library.path LD_LIBRARY_PATH。 因此,可以通過 System.loadLibrary或 System.load裝載緩存的庫。有關(guān)使用分布式緩存加載共享庫的細節(jié)請參考 native_libraries.html

作業(yè)的提交與監(jiān)控

JobClient是用戶提交的作業(yè)與JobTracker交互的主要接口。

JobClient 提供提交作業(yè),追蹤進程,訪問子任務(wù)的日志記錄,獲得Map/Reduce集群狀態(tài)信息等功能。

作業(yè)提交過程包括:

  • 檢查作業(yè)輸入輸出樣式細節(jié)
  • 為作業(yè)計算InputSplit值。
  • 如果需要的話,為作業(yè)的DistributedCache建立必須的統(tǒng)計信息。
  • 拷貝作業(yè)的jar包和配置文件到FileSystem上的Map/Reduce系統(tǒng)目錄下。
  • 提交作業(yè)到JobTracker并且監(jiān)控它的狀態(tài)。
  • 作業(yè)的歷史文件記錄到指定目錄的"_logs/history/"子目錄下。這個指定目錄由hadoop.job.history.user.location設(shè)定,默認是作業(yè)輸出的目錄。因此默認情況下,文件會存放在mapred.output.dir/_logs/history目錄下。用戶可以設(shè)置hadoop.job.history.user.locationnone來停止日志記錄。

    用戶使用下面的命令可以看到在指定目錄下的歷史日志記錄的摘要。
    $ bin/hadoop job -history output-dir
    這個命令會打印出作業(yè)的細節(jié),以及失敗的和被殺死的任務(wù)細節(jié)。
    要查看有關(guān)作業(yè)的更多細節(jié)例如成功的任務(wù)、每個任務(wù)嘗試的次數(shù)(task attempt)等,可以使用下面的命令
    $ bin/hadoop job -history all output-dir

    用戶可以使用 OutputLogFilter 從輸出目錄列表中篩選日志文件。

    一般情況,用戶利用JobConf創(chuàng)建應(yīng)用程序并配置作業(yè)屬性, 然后用 JobClient 提交作業(yè)并監(jiān)視它的進程。

    作業(yè)的控制

    有時候,用一個單獨的Map/Reduce作業(yè)并不能完成一個復(fù)雜的任務(wù),用戶也許要鏈接多個Map/Reduce作業(yè)才行。這是容易實現(xiàn)的,因為作業(yè)通常輸出到分布式文件系統(tǒng)上的,所以可以把這個作業(yè)的輸出作為下一個作業(yè)的輸入實現(xiàn)串聯(lián)。

    然而,這也意味著,確保每一作業(yè)完成(成功或失敗)的責任就直接落在了客戶身上。在這種情況下,可以用的控制作業(yè)的選項有:

    • runJob(JobConf):提交作業(yè),僅當作業(yè)完成時返回。
    • submitJob(JobConf):只提交作業(yè),之后需要你輪詢它返回的 RunningJob句柄的狀態(tài),并根據(jù)情況調(diào)度。
    • JobConf.setJobEndNotificationURI(String):設(shè)置一個作業(yè)完成通知,可避免輪詢。

    作業(yè)的輸入

    InputFormat 為Map/Reduce作業(yè)描述輸入的細節(jié)規(guī)范。

    Map/Reduce框架根據(jù)作業(yè)的InputFormat來:

  • 檢查作業(yè)輸入的有效性。
  • 把輸入文件切分成多個邏輯InputSplit實例, 并把每一實例分別分發(fā)給一個 Mapper
  • 提供RecordReader的實現(xiàn),這個RecordReader從邏輯InputSplit中獲得輸入記錄,這些記錄將由Mapper處理。
  • 基于文件的InputFormat實現(xiàn)(通常是 FileInputFormat的子類)默認行為是按照輸入文件的字節(jié)大小,把輸入數(shù)據(jù)切分成邏輯分塊(logical InputSplit )。 其中輸入文件所在的FileSystem的數(shù)據(jù)塊尺寸是分塊大小的上限。下限可以設(shè)置mapred.min.split.size的值。

    考慮到邊界情況,對于很多應(yīng)用程序來說,很明顯按照文件大小進行邏輯分割是不能滿足需求的。 在這種情況下,應(yīng)用程序需要實現(xiàn)一個RecordReader來處理記錄的邊界并為每個任務(wù)提供一個邏輯分塊的面向記錄的視圖。

    TextInputFormat 是默認的InputFormat

    如果一個作業(yè)的InputformatTextInputFormat, 并且框架檢測到輸入文件的后綴是.gz和.lzo,就會使用對應(yīng)的CompressionCodec自動解壓縮這些文件。 但是需要注意,上述帶后綴的壓縮文件不會被切分,并且整個壓縮文件會分給一個mapper來處理。

    InputSplit

    InputSplit 是一個單獨的Mapper要處理的數(shù)據(jù)塊。

    一般的InputSplit 是字節(jié)樣式輸入,然后由RecordReader處理并轉(zhuǎn)化成記錄樣式。

    FileSplit 是默認的InputSplit。 它把 map.input.file 設(shè)定為輸入文件的路徑,輸入文件是邏輯分塊文件。

    RecordReader

    RecordReader 從InputSlit讀入<key, value>對。

    一般的,RecordReader 把由InputSplit 提供的字節(jié)樣式的輸入文件,轉(zhuǎn)化成由Mapper處理的記錄樣式的文件。 因此RecordReader負責處理記錄的邊界情況和把數(shù)據(jù)表示成keys/values對形式。

    作業(yè)的輸出

    OutputFormat 描述Map/Reduce作業(yè)的輸出樣式。

    Map/Reduce框架根據(jù)作業(yè)的OutputFormat來:

  • 檢驗作業(yè)的輸出,例如檢查輸出路徑是否已經(jīng)存在。
  • 提供一個RecordWriter的實現(xiàn),用來輸出作業(yè)結(jié)果。 輸出文件保存在FileSystem上。
  • TextOutputFormat是默認的 OutputFormat

    任務(wù)的Side-Effect File

    在一些應(yīng)用程序中,子任務(wù)需要產(chǎn)生一些side-file,這些文件與作業(yè)實際輸出結(jié)果的文件不同。

    在這種情況下,同一個Mapper或者Reducer的兩個實例(比如預(yù)防性任務(wù))同時打開或者寫 FileSystem上的同一文件就會產(chǎn)生沖突。因此應(yīng)用程序在寫文件的時候需要為每次任務(wù)嘗試(不僅僅是每次任務(wù),每個任務(wù)可以嘗試執(zhí)行很多次)選取一個獨一無二的文件名(使用attemptid,例如task_200709221812_0001_m_000000_0)。

    為了避免沖突,Map/Reduce框架為每次嘗試執(zhí)行任務(wù)都建立和維護一個特殊的 ${mapred.output.dir}/_temporary/_${taskid}子目錄,這個目錄位于本次嘗試執(zhí)行任務(wù)輸出結(jié)果所在的FileSystem上,可以通過 ${mapred.work.output.dir}來訪問這個子目錄。 對于成功完成的任務(wù)嘗試,只有${mapred.output.dir}/_temporary/_${taskid}下的文件會移動到${mapred.output.dir}。當然,框架會丟棄那些失敗的任務(wù)嘗試的子目錄。這種處理過程對于應(yīng)用程序來說是完全透明的。

    在任務(wù)執(zhí)行期間,應(yīng)用程序在寫文件時可以利用這個特性,比如 通過 FileOutputFormat.getWorkOutputPath()獲得${mapred.work.output.dir}目錄, 并在其下創(chuàng)建任意任務(wù)執(zhí)行時所需的side-file,框架在任務(wù)嘗試成功時會馬上移動這些文件,因此不需要在程序內(nèi)為每次任務(wù)嘗試選取一個獨一無二的名字。

    注意:在每次任務(wù)嘗試執(zhí)行期間,${mapred.work.output.dir} 的值實際上是 ${mapred.output.dir}/_temporary/_{$taskid},這個值是Map/Reduce框架創(chuàng)建的。 所以使用這個特性的方法是,在 FileOutputFormat.getWorkOutputPath() 路徑下創(chuàng)建side-file即可。

    對于只使用map不使用reduce的作業(yè),這個結(jié)論也成立。這種情況下,map的輸出結(jié)果直接生成到HDFS上。

    RecordWriter

    RecordWriter 生成<key, value> 對到輸出文件。

    RecordWriter的實現(xiàn)把作業(yè)的輸出結(jié)果寫到 FileSystem

    其他有用的特性

    Counters

    Counters 是多個由Map/Reduce框架或者應(yīng)用程序定義的全局計數(shù)器。 每一個Counter可以是任何一種 Enum類型。同一特定Enum類型的Counter可以匯集到一個組,其類型為Counters.Group

    應(yīng)用程序可以定義任意(Enum類型)的Counters并且可以通過 map 或者 reduce方法中的 Reporter.incrCounter(Enum, long)或者 Reporter.incrCounter(String, String, long) 更新。之后框架會匯總這些全局counters。

    DistributedCache

    DistributedCache 可將具體應(yīng)用相關(guān)的、大尺寸的、只讀的文件有效地分布放置。

    DistributedCache 是Map/Reduce框架提供的功能,能夠緩存應(yīng)用程序所需的文件(包括文本,檔案文件,jar文件等)。

    應(yīng)用程序在JobConf中通過url(hdfs://)指定需要被緩存的文件。 DistributedCache假定由hdfs://格式url指定的文件已經(jīng)在 FileSystem上了。

    Map-Redcue框架在作業(yè)所有任務(wù)執(zhí)行之前會把必要的文件拷貝到slave節(jié)點上。 它運行高效是因為每個作業(yè)的文件只拷貝一次并且為那些沒有文檔的slave節(jié)點緩存文檔。

    DistributedCache 根據(jù)緩存文檔修改的時間戳進行追蹤。 在作業(yè)執(zhí)行期間,當前應(yīng)用程序或者外部程序不能修改緩存文件。

    distributedCache可以分發(fā)簡單的只讀數(shù)據(jù)或文本文件,也可以分發(fā)復(fù)雜類型的文件例如歸檔文件和jar文件。歸檔文件(zip,tar,tgz和tar.gz文件)在slave節(jié)點上會被解檔(un-archived)。 這些文件可以設(shè)置執(zhí)行權(quán)限。

    用戶可以通過設(shè)置mapred.cache.{files|archives}來分發(fā)文件。 如果要分發(fā)多個文件,可以使用逗號分隔文件所在路徑。也可以利用API來設(shè)置該屬性: DistributedCache.addCacheFile(URI,conf)/ DistributedCache.addCacheArchive(URI,conf) and DistributedCache.setCacheFiles(URIs,conf)/ DistributedCache.setCacheArchives(URIs,conf) 其中URI的形式是 hdfs://host:port/absolute-path#link-name 在Streaming程序中,可以通過命令行選項 -cacheFile/-cacheArchive 分發(fā)文件。

    用戶可以通過 DistributedCache.createSymlink(Configuration)方法讓DistributedCache 在當前工作目錄下創(chuàng)建到緩存文件的符號鏈接。或者通過設(shè)置配置文件屬性mapred.create.symlinkyes。分布式緩存會截取URI的片段作為鏈接的名字。例如,URI是 hdfs://namenode:port/lib.so.1#lib.so,則在task當前工作目錄會有名為lib.so的鏈接, 它會鏈接分布式緩存中的lib.so.1

    DistributedCache可在map/reduce任務(wù)中作為 一種基礎(chǔ)軟件分發(fā)機制使用。它可以被用于分發(fā)jar包和本地庫(native libraries)。 DistributedCache.addArchiveToClassPath(Path, Configuration)和 DistributedCache.addFileToClassPath(Path, Configuration) API能夠被用于 緩存文件和jar包,并把它們加入子jvm的classpath。也可以通過設(shè)置配置文檔里的屬性 mapred.job.classpath.{files|archives}達到相同的效果。緩存文件可用于分發(fā)和裝載本地庫。

    Tool

    Tool 接口支持處理常用的Hadoop命令行選項。

    Tool 是Map/Reduce工具或應(yīng)用的標準。應(yīng)用程序應(yīng)只處理其定制參數(shù), 要把標準命令行選項通過 ToolRunner.run(Tool, String[]) 委托給 GenericOptionsParser處理。

    Hadoop命令行的常用選項有:
    -conf <configuration file>
    -D <property=value>
    -fs <local|namenode:port>
    -jt <local|jobtracker:port>

    IsolationRunner

    IsolationRunner 是幫助調(diào)試Map/Reduce程序的工具。

    使用IsolationRunner的方法是,首先設(shè)置 keep.failed.task.files屬性為true (同時參考keep.task.files.pattern)。

    然后,登錄到任務(wù)運行失敗的節(jié)點上,進入 TaskTracker的本地路徑運行 IsolationRunner
    $ cd <local path>/taskTracker/${taskid}/work
    $ bin/hadoop org.apache.hadoop.mapred.IsolationRunner ../job.xml

    IsolationRunner會把失敗的任務(wù)放在單獨的一個能夠調(diào)試的jvm上運行,并且采用和之前完全一樣的輸入數(shù)據(jù)。

    Profiling

    Profiling是一個工具,它使用內(nèi)置的java profiler工具進行分析獲得(2-3個)map或reduce樣例運行分析報告。

    用戶可以通過設(shè)置屬性mapred.task.profile指定系統(tǒng)是否采集profiler信息。 利用api JobConf.setProfileEnabled(boolean)可以修改屬性值。如果設(shè)為true, 則開啟profiling功能。profiler信息保存在用戶日志目錄下。缺省情況,profiling功能是關(guān)閉的。

    如果用戶設(shè)定使用profiling功能,可以使用配置文檔里的屬性 mapred.task.profile.{maps|reduces} 設(shè)置要profile map/reduce task的范圍。設(shè)置該屬性值的api是 JobConf.setProfileTaskRange(boolean,String)。 范圍的缺省值是0-2

    用戶可以通過設(shè)定配置文檔里的屬性mapred.task.profile.params 來指定profiler配置參數(shù)。修改屬性要使用api JobConf.setProfileParams(String)。當運行task時,如果字符串包含%s。 它會被替換成profileing的輸出文件名。這些參數(shù)會在命令行里傳遞到子JVM中。缺省的profiling 參數(shù)是 -agentlib:hprof=cpu=samples,heap=sites,force=n,thread=y,verbose=n,file=%s

    調(diào)試

    Map/Reduce框架能夠運行用戶提供的用于調(diào)試的腳本程序。 當map/reduce任務(wù)失敗時,用戶可以通過運行腳本在任務(wù)日志(例如任務(wù)的標準輸出、標準錯誤、系統(tǒng)日志以及作業(yè)配置文件)上做后續(xù)處理工作。用戶提供的調(diào)試腳本程序的標準輸出和標準錯誤會輸出為診斷文件。如果需要的話這些輸出結(jié)果也可以打印在用戶界面上。

    在接下來的章節(jié),我們討論如何與作業(yè)一起提交調(diào)試腳本。為了提交調(diào)試腳本, 首先要把這個腳本分發(fā)出去,而且還要在配置文件里設(shè)置。

    如何分發(fā)腳本文件:

    用戶要用 DistributedCache 機制來分發(fā)和鏈接腳本文件

    如何提交腳本:

    一個快速提交調(diào)試腳本的方法是分別為需要調(diào)試的map任務(wù)和reduce任務(wù)設(shè)置"mapred.map.task.debug.script" 和 "mapred.reduce.task.debug.script" 屬性的值。這些屬性也可以通過 JobConf.setMapDebugScript(String) 和 JobConf.setReduceDebugScript(String) API來設(shè)置。對于streaming, 可以分別為需要調(diào)試的map任務(wù)和reduce任務(wù)使用命令行選項-mapdebug 和 -reducedegug來提交調(diào)試腳本。

    腳本的參數(shù)是任務(wù)的標準輸出、標準錯誤、系統(tǒng)日志以及作業(yè)配置文件。在運行map/reduce失敗的節(jié)點上運行調(diào)試命令是:
    $script $stdout $stderr $syslog $jobconf

    Pipes 程序根據(jù)第五個參數(shù)獲得c++程序名。 因此調(diào)試pipes程序的命令是
    $script $stdout $stderr $syslog $jobconf $program

    默認行為

    對于pipes,默認的腳本會用gdb處理core dump, 打印 stack trace并且給出正在運行線程的信息。

    JobControl

    JobControl是一個工具,它封裝了一組Map/Reduce作業(yè)以及他們之間的依賴關(guān)系。

    數(shù)據(jù)壓縮

    Hadoop Map/Reduce框架為應(yīng)用程序的寫入文件操作提供壓縮工具,這些工具可以為map輸出的中間數(shù)據(jù)和作業(yè)最終輸出數(shù)據(jù)(例如reduce的輸出)提供支持。它還附帶了一些 CompressionCodec的實現(xiàn),比如實現(xiàn)了 zlib和lzo壓縮算法。 Hadoop同樣支持gzip文件格式。

    考慮到性能問題(zlib)以及Java類庫的缺失(lzo)等因素,Hadoop也為上述壓縮解壓算法提供本地庫的實現(xiàn)。更多的細節(jié)請參考 這里。

    中間輸出

    應(yīng)用程序可以通過 JobConf.setCompressMapOutput(boolean)api控制map輸出的中間結(jié)果,并且可以通過 JobConf.setMapOutputCompressorClass(Class)api指定 CompressionCodec

    作業(yè)輸出

    應(yīng)用程序可以通過 FileOutputFormat.setCompressOutput(JobConf, boolean) api控制輸出是否需要壓縮并且可以使用 FileOutputFormat.setOutputCompressorClass(JobConf, Class)api指定CompressionCodec

    如果作業(yè)輸出要保存成 SequenceFileOutputFormat格式,需要使用 SequenceFileOutputFormat.setOutputCompressionType(JobConf, SequenceFile.CompressionType)api,來設(shè)定 SequenceFile.CompressionType (i.e. RECORD / BLOCK - 默認是RECORD)。

    例子:WordCount v2.0

    這里是一個更全面的WordCount例子,它使用了我們已經(jīng)討論過的很多Map/Reduce框架提供的功能。

    運行這個例子需要HDFS的某些功能,特別是 DistributedCache相關(guān)功能。因此這個例子只能運行在 偽分布式 或者 完全分布式模式的 Hadoop上。

    源代碼

    ?WordCount.java
    1.package org.myorg;
    2.?
    3.import java.io.*;
    4.import java.util.*;
    5.?
    6.import org.apache.hadoop.fs.Path;
    7.import org.apache.hadoop.filecache.DistributedCache;
    8.import org.apache.hadoop.conf.*;
    9.import org.apache.hadoop.io.*;
    10.import org.apache.hadoop.mapred.*;
    11.import org.apache.hadoop.util.*;
    12.?
    13.public class WordCount extends Configured implements Tool {
    14.?
    15.?? public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
    16.?
    17.???? static enum Counters { INPUT_WORDS }
    18.?
    19.???? private final static IntWritable one = new IntWritable(1);
    20.???? private Text word = new Text();
    21.?
    22.???? private boolean caseSensitive = true;
    23.???? private Set<String> patternsToSkip = new HashSet<String>();
    24.?
    25.???? private long numRecords = 0;
    26.???? private String inputFile;
    27.?
    28.???? public void configure(JobConf job) {
    29.?????? caseSensitive = job.getBoolean("wordcount.case.sensitive", true);
    30.?????? inputFile = job.get("map.input.file");
    31.?
    32.?????? if (job.getBoolean("wordcount.skip.patterns", false)) {
    33.???????? Path[] patternsFiles = new Path[0];
    34.???????? try {
    35.?????????? patternsFiles = DistributedCache.getLocalCacheFiles(job);
    36.???????? } catch (IOException ioe) {
    37.?????????? System.err.println("Caught exception while getting cached files: " + StringUtils.stringifyException(ioe));
    38.???????? }
    39.???????? for (Path patternsFile : patternsFiles) {
    40.?????????? parseSkipFile(patternsFile);
    41.???????? }
    42.?????? }
    43.???? }
    44.?
    45.???? private void parseSkipFile(Path patternsFile) {
    46.?????? try {
    47.???????? BufferedReader fis = new BufferedReader(new FileReader(patternsFile.toString()));
    48.???????? String pattern = null;
    49.???????? while ((pattern = fis.readLine()) != null) {
    50.?????????? patternsToSkip.add(pattern);
    51.???????? }
    52.?????? } catch (IOException ioe) {
    53.???????? System.err.println("Caught exception while parsing the cached file '" + patternsFile + "' : " + StringUtils.stringifyException(ioe));
    54.?????? }
    55.???? }
    56.?
    57.???? public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
    58.?????? String line = (caseSensitive) ? value.toString() : value.toString().toLowerCase();
    59.?
    60.?????? for (String pattern : patternsToSkip) {
    61.???????? line = line.replaceAll(pattern, "");
    62.?????? }
    63.?
    64.?????? StringTokenizer tokenizer = new StringTokenizer(line);
    65.?????? while (tokenizer.hasMoreTokens()) {
    66.???????? word.set(tokenizer.nextToken());
    67.???????? output.collect(word, one);
    68.???????? reporter.incrCounter(Counters.INPUT_WORDS, 1);
    69.?????? }
    70.?
    71.?????? if ((++numRecords % 100) == 0) {
    72.???????? reporter.setStatus("Finished processing " + numRecords + " records " + "from the input file: " + inputFile);
    73.?????? }
    74.???? }
    75.?? }
    76.?
    77.?? public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
    78.???? public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
    79.?????? int sum = 0;
    80.?????? while (values.hasNext()) {
    81.???????? sum += values.next().get();
    82.?????? }
    83.?????? output.collect(key, new IntWritable(sum));
    84.???? }
    85.?? }
    86.?
    87.?? public int run(String[] args) throws Exception {
    88.???? JobConf conf = new JobConf(getConf(), WordCount.class);
    89.???? conf.setJobName("wordcount");
    90.?
    91.???? conf.setOutputKeyClass(Text.class);
    92.???? conf.setOutputValueClass(IntWritable.class);
    93.?
    94.???? conf.setMapperClass(Map.class);
    95.???? conf.setCombinerClass(Reduce.class);
    96.???? conf.setReducerClass(Reduce.class);
    97.?
    98.???? conf.setInputFormat(TextInputFormat.class);
    99.???? conf.setOutputFormat(TextOutputFormat.class);
    100.?
    101.???? List<String> other_args = new ArrayList<String>();
    102.???? for (int i=0; i < args.length; ++i) {
    103.?????? if ("-skip".equals(args[i])) {
    104.???????? DistributedCache.addCacheFile(new Path(args[++i]).toUri(), conf);
    105.???????? conf.setBoolean("wordcount.skip.patterns", true);
    106.?????? } else {
    107.???????? other_args.add(args[i]);
    108.?????? }
    109.???? }
    110.?
    111.???? FileInputFormat.setInputPaths(conf, new Path(other_args.get(0)));
    112.???? FileOutputFormat.setOutputPath(conf, new Path(other_args.get(1)));
    113.?
    114.???? JobClient.runJob(conf);
    115.???? return 0;
    116.?? }
    117.?
    118.?? public static void main(String[] args) throws Exception {
    119.???? int res = ToolRunner.run(new Configuration(), new WordCount(), args);
    120.???? System.exit(res);
    121.?? }
    122.}
    123.?


    附此代碼:

    ackage org.myorg;import java.io.*;import java.util.*;import org.apache.hadoop.fs.Path;import org.apache.hadoop.filecache.DistributedCache;import org.apache.hadoop.conf.*;import org.apache.hadoop.io.*;import org.apache.hadoop.mapred.*;import org.apache.hadoop.util.*;public class WordCount extends Configured implements Tool {public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {static enum Counters { INPUT_WORDS }private final static IntWritable one = new IntWritable(1);private Text word = new Text();private boolean caseSensitive = true;private Set<String> patternsToSkip = new HashSet<String>();private long numRecords = 0;private String inputFile;public void configure(JobConf job) {caseSensitive = job.getBoolean("wordcount.case.sensitive", true);inputFile = job.get("map.input.file");if (job.getBoolean("wordcount.skip.patterns", false)) {Path[] patternsFiles = new Path[0];try {patternsFiles = DistributedCache.getLocalCacheFiles(job);} catch (IOException ioe) {System.err.println("Caught exception while getting cached files: " + StringUtils.stringifyException(ioe));}for (Path patternsFile : patternsFiles) {parseSkipFile(patternsFile);}}}private void parseSkipFile(Path patternsFile) {try {BufferedReader fis = new BufferedReader(new FileReader(patternsFile.toString()));String pattern = null;while ((pattern = fis.readLine()) != null) {patternsToSkip.add(pattern);}} catch (IOException ioe) {System.err.println("Caught exception while parsing the cached file '" + patternsFile + "' : " + StringUtils.stringifyException(ioe));}}public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {String line = (caseSensitive) ? value.toString() : value.toString().toLowerCase();for (String pattern : patternsToSkip) {line = line.replaceAll(pattern, "");}StringTokenizer tokenizer = new StringTokenizer(line);while (tokenizer.hasMoreTokens()) {word.set(tokenizer.nextToken());output.collect(word, one);reporter.incrCounter(Counters.INPUT_WORDS, 1);}if ((++numRecords % 100) == 0) {reporter.setStatus("Finished processing " + numRecords + " records " + "from the input file: " + inputFile);}}}public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {int sum = 0;while (values.hasNext()) {sum += values.next().get();}output.collect(key, new IntWritable(sum));}}public int run(String[] args) throws Exception {JobConf conf = new JobConf(getConf(), WordCount.class);conf.setJobName("wordcount");conf.setOutputKeyClass(Text.class);conf.setOutputValueClass(IntWritable.class);conf.setMapperClass(Map.class);conf.setCombinerClass(Reduce.class);conf.setReducerClass(Reduce.class);conf.setInputFormat(TextInputFormat.class);conf.setOutputFormat(TextOutputFormat.class);List<String> other_args = new ArrayList<String>();for (int i=0; i < args.length; ++i) {if ("-skip".equals(args[i])) {DistributedCache.addCacheFile(new Path(args[++i]).toUri(), conf);conf.setBoolean("wordcount.skip.patterns", true);} else {other_args.add(args[i]);}}FileInputFormat.setInputPaths(conf, new Path(other_args.get(0)));FileOutputFormat.setOutputPath(conf, new Path(other_args.get(1)));JobClient.runJob(conf);return 0;}public static void main(String[] args) throws Exception {int res = ToolRunner.run(new Configuration(), new WordCount(), args);System.exit(res);}}

    運行樣例

    輸入樣例:

    $ bin/hadoop dfs -ls /usr/joe/wordcount/input/
    /usr/joe/wordcount/input/file01
    /usr/joe/wordcount/input/file02

    $ bin/hadoop dfs -cat /usr/joe/wordcount/input/file01
    Hello World, Bye World!

    $ bin/hadoop dfs -cat /usr/joe/wordcount/input/file02
    Hello Hadoop, Goodbye to hadoop.

    運行程序:

    $ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount /usr/joe/wordcount/input /usr/joe/wordcount/output

    輸出:

    $ bin/hadoop dfs -cat /usr/joe/wordcount/output/part-00000
    Bye 1
    Goodbye 1
    Hadoop, 1
    Hello 2
    World! 1
    World, 1
    hadoop. 1
    to 1

    注意此時的輸入與第一個版本的不同,輸出的結(jié)果也有不同。

    現(xiàn)在通過DistributedCache插入一個模式文件,文件中保存了要被忽略的單詞模式。

    $ hadoop dfs -cat /user/joe/wordcount/patterns.txt
    \.
    \,
    \!
    to

    再運行一次,這次使用更多的選項:

    $ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount -Dwordcount.case.sensitive=true /usr/joe/wordcount/input /usr/joe/wordcount/output -skip /user/joe/wordcount/patterns.txt

    應(yīng)該得到這樣的輸出:

    $ bin/hadoop dfs -cat /usr/joe/wordcount/output/part-00000
    Bye 1
    Goodbye 1
    Hadoop 1
    Hello 2
    World 2
    hadoop 1

    再運行一次,這一次關(guān)閉大小寫敏感性(case-sensitivity):

    $ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount -Dwordcount.case.sensitive=false /usr/joe/wordcount/input /usr/joe/wordcount/output -skip /user/joe/wordcount/patterns.txt

    輸出:

    $ bin/hadoop dfs -cat /usr/joe/wordcount/output/part-00000
    bye 1
    goodbye 1
    hadoop 2
    hello 2
    world 2

    程序要點

    通過使用一些Map/Reduce框架提供的功能,WordCount的第二個版本在原始版本基礎(chǔ)上有了如下的改進:

    • 展示了應(yīng)用程序如何在Mapper (和Reducer)中通過configure方法修改配置參數(shù)(28-43行)。
    • 展示了作業(yè)如何使用DistributedCache 來分發(fā)只讀數(shù)據(jù)。這里允許用戶指定單詞的模式,在計數(shù)時忽略那些符合模式的單詞(104行)。
    • 展示Tool接口和GenericOptionsParser處理Hadoop命令行選項的功能 (87-116, 119行)。
    • 展示了應(yīng)用程序如何使用Counters(68行),如何通過傳遞給map(和reduce)方法的Reporter實例來設(shè)置應(yīng)用程序的狀態(tài)信息(72行)。

    Java和JNI是Sun Microsystems, Inc.在美國和其它國家的注冊商標。

    出處:http://hadoop.apache.org/docs/r1.0.4/cn/mapred_tutorial.html

    總結(jié)

    以上是生活随笔為你收集整理的Hadoop Map/Reduce教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    日韩视频 中文字幕 视频一区 | 国产色在线 | 国产 | 一区二区传媒有限公司 | 人人妻人人澡人人爽欧美一区 | 亚洲中文字幕无码中文字在线 | 18禁黄网站男男禁片免费观看 | 久久久久99精品国产片 | 国产特级毛片aaaaaaa高清 | 成人精品一区二区三区中文字幕 | 学生妹亚洲一区二区 | 青青草原综合久久大伊人精品 | 日日摸夜夜摸狠狠摸婷婷 | 成熟女人特级毛片www免费 | 国产精品毛片一区二区 | 成人免费视频视频在线观看 免费 | 夜夜躁日日躁狠狠久久av | 午夜时刻免费入口 | 色综合久久88色综合天天 | 亚洲中文无码av永久不收费 | 激情内射亚州一区二区三区爱妻 | 国产无遮挡吃胸膜奶免费看 | 无码免费一区二区三区 | 网友自拍区视频精品 | 国产精品无码永久免费888 | 四虎影视成人永久免费观看视频 | 亚洲区小说区激情区图片区 | 少妇一晚三次一区二区三区 | 精品人妻人人做人人爽夜夜爽 | 亚洲色欲久久久综合网东京热 | 国产成人综合在线女婷五月99播放 | 欧美真人作爱免费视频 | 久久综合久久自在自线精品自 | 亚洲男人av香蕉爽爽爽爽 | 久久精品国产精品国产精品污 | 中文字幕av无码一区二区三区电影 | 97资源共享在线视频 | 帮老师解开蕾丝奶罩吸乳网站 | 牲欲强的熟妇农村老妇女 | 成人试看120秒体验区 | 青青草原综合久久大伊人精品 | 国产精品无码成人午夜电影 | 性生交片免费无码看人 | 国产精品高潮呻吟av久久 | 国产97色在线 | 免 | 亚洲日韩精品欧美一区二区 | 狠狠色丁香久久婷婷综合五月 | 在线播放免费人成毛片乱码 | 人人爽人人爽人人片av亚洲 | 国产精品久久久久久亚洲影视内衣 | 亚洲国产精品久久人人爱 | 成人免费视频视频在线观看 免费 | 中文字幕色婷婷在线视频 | 亚洲乱码中文字幕在线 | 夜夜夜高潮夜夜爽夜夜爰爰 | 131美女爱做视频 | 曰韩无码二三区中文字幕 | 国产在线一区二区三区四区五区 | 少妇人妻av毛片在线看 | 人人妻人人澡人人爽人人精品 | 欧美亚洲日韩国产人成在线播放 | 亚洲欧美国产精品久久 | 综合激情五月综合激情五月激情1 | 亚洲大尺度无码无码专区 | 免费看少妇作爱视频 | 黑人玩弄人妻中文在线 | 精品国偷自产在线视频 | 美女黄网站人色视频免费国产 | 国产成人综合美国十次 | 欧美精品国产综合久久 | 久久综合给久久狠狠97色 | 国产9 9在线 | 中文 | 久久成人a毛片免费观看网站 | 永久免费观看美女裸体的网站 | 乱人伦中文视频在线观看 | 久久久久亚洲精品男人的天堂 | 精品亚洲韩国一区二区三区 | 女人色极品影院 | 欧美野外疯狂做受xxxx高潮 | 无码中文字幕色专区 | 欧美自拍另类欧美综合图片区 | 国产亚洲视频中文字幕97精品 | 国产精品理论片在线观看 | 无码av免费一区二区三区试看 | 四虎国产精品一区二区 | 亚洲国产精品无码久久久久高潮 | 亚洲成色在线综合网站 | 日韩av无码中文无码电影 | 日本大香伊一区二区三区 | 成人无码精品1区2区3区免费看 | 国产激情精品一区二区三区 | 欧美亚洲国产一区二区三区 | 国产人妖乱国产精品人妖 | 波多野结衣av在线观看 | 国产成人精品一区二区在线小狼 | 婷婷五月综合缴情在线视频 | 亚洲七七久久桃花影院 | 丰满人妻一区二区三区免费视频 | 欧洲熟妇色 欧美 | 亚洲精品一区二区三区在线 | 成人免费无码大片a毛片 | 波多野结衣av一区二区全免费观看 | 又色又爽又黄的美女裸体网站 | 狂野欧美性猛交免费视频 | 久久亚洲日韩精品一区二区三区 | 一个人免费观看的www视频 | 丰满少妇熟乱xxxxx视频 | 亚洲自偷自拍另类第1页 | 日本精品久久久久中文字幕 | 无码人妻丰满熟妇区毛片18 | 成熟人妻av无码专区 | 麻豆蜜桃av蜜臀av色欲av | 国产莉萝无码av在线播放 | 亚洲中文字幕在线无码一区二区 | 色一情一乱一伦一视频免费看 | 18无码粉嫩小泬无套在线观看 | 精品国产一区二区三区av 性色 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲国产欧美日韩精品一区二区三区 | 波多野结衣高清一区二区三区 | 精品成人av一区二区三区 | 亚洲国产高清在线观看视频 | 久久久久久久女国产乱让韩 | 婷婷色婷婷开心五月四房播播 | 无码av中文字幕免费放 | 欧美 日韩 人妻 高清 中文 | 波多野结衣乳巨码无在线观看 | 少妇性荡欲午夜性开放视频剧场 | 国产明星裸体无码xxxx视频 | 久久99精品久久久久久动态图 | 西西人体www44rt大胆高清 | 粗大的内捧猛烈进出视频 | 激情内射日本一区二区三区 | 亚洲小说春色综合另类 | 国产精品久久久久久无码 | 成人影院yy111111在线观看 | 亚洲色欲色欲欲www在线 | av无码久久久久不卡免费网站 | 日本乱人伦片中文三区 | 日韩精品a片一区二区三区妖精 | 精品国产av色一区二区深夜久久 | 欧美国产日产一区二区 | 伊人久久婷婷五月综合97色 | 夜夜影院未满十八勿进 | 亚洲精品久久久久中文第一幕 | 东北女人啪啪对白 | 色一情一乱一伦一区二区三欧美 | 国产午夜视频在线观看 | 偷窥日本少妇撒尿chinese | 久久成人a毛片免费观看网站 | 久久97精品久久久久久久不卡 | 日本乱人伦片中文三区 | 曰韩少妇内射免费播放 | 人人妻人人澡人人爽欧美一区 | 国产亚洲美女精品久久久2020 | av在线亚洲欧洲日产一区二区 | 高中生自慰www网站 | 久久这里只有精品视频9 | 国产精品18久久久久久麻辣 | 国内综合精品午夜久久资源 | 无码国产乱人伦偷精品视频 | 亚洲 日韩 欧美 成人 在线观看 | 国产激情无码一区二区app | 日日麻批免费40分钟无码 | 日韩av无码一区二区三区不卡 | 久久精品成人欧美大片 | 色综合视频一区二区三区 | 99er热精品视频 | 国产国语老龄妇女a片 | 色老头在线一区二区三区 | 国产人妻人伦精品 | 5858s亚洲色大成网站www | 中文字幕无线码 | 久精品国产欧美亚洲色aⅴ大片 | 中国大陆精品视频xxxx | 成人无码影片精品久久久 | 成人性做爰aaa片免费看不忠 | 风流少妇按摩来高潮 | 又大又黄又粗又爽的免费视频 | 成人欧美一区二区三区 | 妺妺窝人体色www婷婷 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 2019nv天堂香蕉在线观看 | 国产精品毛片一区二区 | 黄网在线观看免费网站 | 捆绑白丝粉色jk震动捧喷白浆 | 99精品无人区乱码1区2区3区 | 国产亚洲精品久久久久久国模美 | 超碰97人人射妻 | 亚洲自偷自偷在线制服 | 欧美兽交xxxx×视频 | 动漫av网站免费观看 | 日本精品人妻无码77777 天堂一区人妻无码 | 男女猛烈xx00免费视频试看 | 亚洲国产欧美在线成人 | 欧美激情综合亚洲一二区 | 国产亚洲欧美在线专区 | 精品亚洲韩国一区二区三区 | 欧美喷潮久久久xxxxx | 日韩无码专区 | 高清不卡一区二区三区 | 亚洲国产成人av在线观看 | 国产激情综合五月久久 | 麻豆国产97在线 | 欧洲 | 暴力强奷在线播放无码 | 人人妻人人澡人人爽精品欧美 | 亚洲男人av香蕉爽爽爽爽 | 丰满肥臀大屁股熟妇激情视频 | 国产午夜福利亚洲第一 | 美女毛片一区二区三区四区 | 欧美一区二区三区 | 亚洲精品午夜国产va久久成人 | 免费观看的无遮挡av | 最近中文2019字幕第二页 | 日本又色又爽又黄的a片18禁 | 亚洲热妇无码av在线播放 | 亲嘴扒胸摸屁股激烈网站 | 国产在线精品一区二区高清不卡 | 成熟人妻av无码专区 | 人妻少妇精品无码专区二区 | 国产区女主播在线观看 | 久久精品国产日本波多野结衣 | 国产精品永久免费视频 | 日韩欧美中文字幕在线三区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 欧美成人午夜精品久久久 | 黑人粗大猛烈进出高潮视频 | 国产精品a成v人在线播放 | 久久99精品国产.久久久久 | 樱花草在线社区www | 狂野欧美性猛交免费视频 | 日本www一道久久久免费榴莲 | 欧美 日韩 亚洲 在线 | 久久综合给合久久狠狠狠97色 | 亚洲色无码一区二区三区 | 白嫩日本少妇做爰 | 无码精品人妻一区二区三区av | 国产成人av免费观看 | 亚洲狠狠色丁香婷婷综合 | 亚洲中文字幕成人无码 | 亚洲中文无码av永久不收费 | 欧美人与动性行为视频 | 国产精品久久久久9999小说 | 又粗又大又硬又长又爽 | 国产精品沙发午睡系列 | 白嫩日本少妇做爰 | a国产一区二区免费入口 | 亚洲综合无码久久精品综合 | 久久精品国产一区二区三区肥胖 | 精品无码国产一区二区三区av | 久久精品一区二区三区四区 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲精品午夜国产va久久成人 | 亚洲自偷精品视频自拍 | 久久久精品456亚洲影院 | 一本大道伊人av久久综合 | 377p欧洲日本亚洲大胆 | av香港经典三级级 在线 | 水蜜桃色314在线观看 | 女人色极品影院 | 国产人妻人伦精品1国产丝袜 | 色综合久久久无码网中文 | 人妻与老人中文字幕 | 欧美性黑人极品hd | 午夜精品一区二区三区在线观看 | 香蕉久久久久久av成人 | 国产后入清纯学生妹 | 国产激情一区二区三区 | 18禁黄网站男男禁片免费观看 | 人人澡人人透人人爽 | 99久久精品无码一区二区毛片 | 内射老妇bbwx0c0ck | 中文字幕无码免费久久9一区9 | 亚洲va中文字幕无码久久不卡 | 丰满肥臀大屁股熟妇激情视频 | 成人试看120秒体验区 | 在线а√天堂中文官网 | 亚洲一区二区三区播放 | 老熟妇仑乱视频一区二区 | 日日摸夜夜摸狠狠摸婷婷 | 欧美人与善在线com | 国产69精品久久久久app下载 | 国产精品亚洲lv粉色 | av无码电影一区二区三区 | 亚洲日韩一区二区 | 在线播放亚洲第一字幕 | 中文字幕无码日韩专区 | 久久久久免费精品国产 | 亚洲狠狠婷婷综合久久 | 乱人伦人妻中文字幕无码久久网 | 免费无码午夜福利片69 | 国产成人人人97超碰超爽8 | 丰满肥臀大屁股熟妇激情视频 | 国产亚洲精品久久久久久大师 | 青草青草久热国产精品 | 东京无码熟妇人妻av在线网址 | 久久综合香蕉国产蜜臀av | 精品一区二区三区无码免费视频 | 精品国产麻豆免费人成网站 | 精品国产一区二区三区四区在线看 | 成熟人妻av无码专区 | 国产福利视频一区二区 | 又湿又紧又大又爽a视频国产 | 伊人色综合久久天天小片 | 国产精品久久久 | 在线天堂新版最新版在线8 | 久久精品人妻少妇一区二区三区 | 国产两女互慰高潮视频在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲国产欧美在线成人 | 欧美 日韩 亚洲 在线 | 国产又爽又黄又刺激的视频 | 水蜜桃av无码 | 久久久久99精品成人片 | 乌克兰少妇性做爰 | 1000部啪啪未满十八勿入下载 | 国产色视频一区二区三区 | 国精产品一品二品国精品69xx | 欧美日韩在线亚洲综合国产人 | 亚洲成a人片在线观看日本 | 亚洲国产精品无码一区二区三区 | 中文精品无码中文字幕无码专区 | 妺妺窝人体色www在线小说 | 亚洲日韩精品欧美一区二区 | 国语精品一区二区三区 | 老子影院午夜精品无码 | 亚洲国产成人av在线观看 | 久久久av男人的天堂 | 3d动漫精品啪啪一区二区中 | 粗大的内捧猛烈进出视频 | 免费无码午夜福利片69 | 日日摸日日碰夜夜爽av | 人妻有码中文字幕在线 | 美女扒开屁股让男人桶 | 呦交小u女精品视频 | 亚洲日本在线电影 | 国产97在线 | 亚洲 | 久久亚洲国产成人精品性色 | 亚洲国产一区二区三区在线观看 | 两性色午夜视频免费播放 | 亚洲熟女一区二区三区 | 国产精品人妻一区二区三区四 | 麻豆成人精品国产免费 | 国精产品一品二品国精品69xx | 人人妻人人澡人人爽欧美精品 | 又色又爽又黄的美女裸体网站 | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久久久亚洲精品中文字幕 | 无码人妻精品一区二区三区不卡 | 麻豆人妻少妇精品无码专区 | 妺妺窝人体色www婷婷 | 一本久久a久久精品亚洲 | 成人女人看片免费视频放人 | 亚洲毛片av日韩av无码 | 天下第一社区视频www日本 | 伊人久久大香线蕉av一区二区 | 亚洲の无码国产の无码影院 | 水蜜桃色314在线观看 | 亚洲精品鲁一鲁一区二区三区 | 日产精品99久久久久久 | 亚洲成av人片在线观看无码不卡 | 国产区女主播在线观看 | 四虎影视成人永久免费观看视频 | 国产xxx69麻豆国语对白 | 无码av免费一区二区三区试看 | 久青草影院在线观看国产 | 成人动漫在线观看 | 又紧又大又爽精品一区二区 | 久久99久久99精品中文字幕 | 麻花豆传媒剧国产免费mv在线 | 永久黄网站色视频免费直播 | 国产人妻人伦精品1国产丝袜 | 55夜色66夜色国产精品视频 | 精品熟女少妇av免费观看 | 色婷婷综合激情综在线播放 | 亚洲精品中文字幕久久久久 | 一本色道婷婷久久欧美 | 好爽又高潮了毛片免费下载 | 色婷婷久久一区二区三区麻豆 | 日本免费一区二区三区最新 | 亚洲 另类 在线 欧美 制服 | 国产精品美女久久久网av | 色婷婷香蕉在线一区二区 | 我要看www免费看插插视频 | 国精产品一品二品国精品69xx | 欧美日韩亚洲国产精品 | 国模大胆一区二区三区 | 色综合久久久无码网中文 | 高清国产亚洲精品自在久久 | 动漫av网站免费观看 | 激情爆乳一区二区三区 | 国产农村乱对白刺激视频 | 亚洲熟妇色xxxxx欧美老妇y | 午夜成人1000部免费视频 | 精品一二三区久久aaa片 | 久久亚洲a片com人成 | 中文字幕无码乱人伦 | 久久综合九色综合欧美狠狠 | 在线成人www免费观看视频 | 99久久婷婷国产综合精品青草免费 | 76少妇精品导航 | 亚洲色欲久久久综合网东京热 | 女高中生第一次破苞av | 天天摸天天碰天天添 | 亚洲日本va中文字幕 | 亚洲无人区一区二区三区 | 久久久www成人免费毛片 | 中文字幕无码免费久久99 | 国产在线aaa片一区二区99 | 亚洲精品久久久久avwww潮水 | 男女下面进入的视频免费午夜 | 亚洲国产成人a精品不卡在线 | 人人澡人人妻人人爽人人蜜桃 | 国产精品久久久久久亚洲影视内衣 | 奇米影视888欧美在线观看 | 日本精品少妇一区二区三区 | 国产乱人无码伦av在线a | 一个人免费观看的www视频 | 成年美女黄网站色大免费全看 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 日本一区二区更新不卡 | 色婷婷综合中文久久一本 | 131美女爱做视频 | 日本一卡二卡不卡视频查询 | 少妇无码av无码专区在线观看 | 国产成人精品优优av | 亚洲经典千人经典日产 | 成人无码精品一区二区三区 | 人人妻人人藻人人爽欧美一区 | 国产凸凹视频一区二区 | 国产莉萝无码av在线播放 | 国产免费无码一区二区视频 | 国产成人一区二区三区别 | 欧美喷潮久久久xxxxx | 初尝人妻少妇中文字幕 | 中文字幕av无码一区二区三区电影 | 国产人成高清在线视频99最全资源 | 熟妇女人妻丰满少妇中文字幕 | a在线观看免费网站大全 | 亚洲熟妇色xxxxx欧美老妇 | 国产午夜无码视频在线观看 | 国产亚av手机在线观看 | 熟妇人妻中文av无码 | 国产莉萝无码av在线播放 | 精品成在人线av无码免费看 | 99精品无人区乱码1区2区3区 | 人人妻人人澡人人爽欧美一区九九 | 精品午夜福利在线观看 | 精品 日韩 国产 欧美 视频 | 娇妻被黑人粗大高潮白浆 | 麻豆国产丝袜白领秘书在线观看 | 性欧美熟妇videofreesex | 色欲久久久天天天综合网精品 | 鲁鲁鲁爽爽爽在线视频观看 | 国产黄在线观看免费观看不卡 | 一本久久a久久精品vr综合 | 成人无码视频在线观看网站 | 国产一区二区不卡老阿姨 | 又紧又大又爽精品一区二区 | 男女作爱免费网站 | 亚洲精品美女久久久久久久 | 亚洲熟妇色xxxxx欧美老妇y | 午夜免费福利小电影 | 亚洲国产精品久久久天堂 | 人人爽人人澡人人人妻 | 国产精品久久久久7777 | 色综合久久中文娱乐网 | 全黄性性激高免费视频 | 午夜理论片yy44880影院 | 亚洲色无码一区二区三区 | 51国偷自产一区二区三区 | 日本肉体xxxx裸交 | 丰满人妻精品国产99aⅴ | 亚洲精品久久久久avwww潮水 | 亚洲国产欧美日韩精品一区二区三区 | 国产午夜福利100集发布 | 国产农村妇女高潮大叫 | 亚洲日韩一区二区三区 | 蜜桃av抽搐高潮一区二区 | 综合人妻久久一区二区精品 | 亚洲国精产品一二二线 | 天天拍夜夜添久久精品 | 97精品人妻一区二区三区香蕉 | 久久久国产一区二区三区 | 巨爆乳无码视频在线观看 | 377p欧洲日本亚洲大胆 | 少妇无码av无码专区在线观看 | 男女下面进入的视频免费午夜 | 无码国内精品人妻少妇 | 国产口爆吞精在线视频 | 国产综合色产在线精品 | 18黄暴禁片在线观看 | 性欧美疯狂xxxxbbbb | 99视频精品全部免费免费观看 | 国产凸凹视频一区二区 | 在线欧美精品一区二区三区 | 人人妻人人澡人人爽欧美精品 | 国产色xx群视频射精 | 亚洲伊人久久精品影院 | 性做久久久久久久免费看 | 国产成人无码一二三区视频 | 亚洲午夜福利在线观看 | 日韩亚洲欧美中文高清在线 | 欧美精品一区二区精品久久 | 国产精品怡红院永久免费 | 国产情侣作爱视频免费观看 | 国产精品无码一区二区桃花视频 | 麻豆蜜桃av蜜臀av色欲av | 亚洲日韩av一区二区三区四区 | 国内精品人妻无码久久久影院蜜桃 | 婷婷六月久久综合丁香 | 亚洲一区二区三区国产精华液 | 日韩视频 中文字幕 视频一区 | 少妇性俱乐部纵欲狂欢电影 | 无遮无挡爽爽免费视频 | 日韩在线不卡免费视频一区 | 女人被男人躁得好爽免费视频 | 日韩少妇白浆无码系列 | 欧美老妇交乱视频在线观看 | аⅴ资源天堂资源库在线 | 丰满岳乱妇在线观看中字无码 | 久久精品人人做人人综合 | 精品欧洲av无码一区二区三区 | 国产av一区二区三区最新精品 | 131美女爱做视频 | 帮老师解开蕾丝奶罩吸乳网站 | 精品夜夜澡人妻无码av蜜桃 | 免费视频欧美无人区码 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 男人的天堂2018无码 | 国产xxx69麻豆国语对白 | 日韩精品久久久肉伦网站 | 欧美日本精品一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 日韩精品无码免费一区二区三区 | 国产精品无码一区二区桃花视频 | 精品国产成人一区二区三区 | 18无码粉嫩小泬无套在线观看 | 亚洲成av人影院在线观看 | 精品无码国产自产拍在线观看蜜 | 国产精品久久久一区二区三区 | 欧美老妇交乱视频在线观看 | 精品国产一区二区三区四区在线看 | 亚洲国产精品美女久久久久 | 国产精品怡红院永久免费 | 久久无码专区国产精品s | 激情五月综合色婷婷一区二区 | 亚洲中文字幕无码一久久区 | 天天综合网天天综合色 | 亚洲一区二区三区播放 | 正在播放东北夫妻内射 | 特黄特色大片免费播放器图片 | 日韩欧美中文字幕在线三区 | 亚洲欧洲日本综合aⅴ在线 | 中国大陆精品视频xxxx | 久久精品女人天堂av免费观看 | 99麻豆久久久国产精品免费 | 亲嘴扒胸摸屁股激烈网站 | 亚洲国产一区二区三区在线观看 | 国产综合色产在线精品 | 国产乱人伦偷精品视频 | 国产亚洲tv在线观看 | 内射后入在线观看一区 | 亚洲成av人影院在线观看 | 又粗又大又硬毛片免费看 | 日韩无套无码精品 | 99久久婷婷国产综合精品青草免费 | 国产人妻人伦精品1国产丝袜 | 色妞www精品免费视频 | 日本一区二区三区免费高清 | 久久久久av无码免费网 | 亚洲伊人久久精品影院 | 色欲久久久天天天综合网精品 | 帮老师解开蕾丝奶罩吸乳网站 | 国产精品久久久久久久9999 | 强开小婷嫩苞又嫩又紧视频 | 国产性生大片免费观看性 | 国产亚洲精品久久久久久国模美 | 露脸叫床粗话东北少妇 | 亚洲日韩中文字幕在线播放 | 2020久久超碰国产精品最新 | 三级4级全黄60分钟 | 欧美放荡的少妇 | 玩弄少妇高潮ⅹxxxyw | 精品亚洲成av人在线观看 | 人妻中文无码久热丝袜 | 人人爽人人爽人人片av亚洲 | 欧美国产日产一区二区 | 俺去俺来也www色官网 | 成人一区二区免费视频 | 大地资源中文第3页 | 日本欧美一区二区三区乱码 | 亚洲狠狠色丁香婷婷综合 | 久久精品国产日本波多野结衣 | 久久午夜无码鲁丝片午夜精品 | 久久久精品人妻久久影视 | 特黄特色大片免费播放器图片 | 国产精品久久精品三级 | 波多野结衣aⅴ在线 | 午夜精品一区二区三区的区别 | 亚洲男女内射在线播放 | 水蜜桃亚洲一二三四在线 | 国产精品美女久久久 | 欧美怡红院免费全部视频 | 婷婷丁香六月激情综合啪 | 久久久久99精品国产片 | 国产成人无码午夜视频在线观看 | 精品国产一区av天美传媒 | 两性色午夜视频免费播放 | 丰满少妇女裸体bbw | 大色综合色综合网站 | 亚洲色无码一区二区三区 | 中文字幕日产无线码一区 | 欧美激情一区二区三区成人 | 久久久久久久女国产乱让韩 | 性欧美大战久久久久久久 | 久久国产精品偷任你爽任你 | 国内精品人妻无码久久久影院 | 思思久久99热只有频精品66 | 人人妻人人藻人人爽欧美一区 | 亚洲精品一区二区三区四区五区 | 人人妻人人澡人人爽欧美精品 | 欧美人妻一区二区三区 | 久久人妻内射无码一区三区 | 欧美freesex黑人又粗又大 | 久久综合激激的五月天 | www成人国产高清内射 | 亚洲色偷偷男人的天堂 | 无码国模国产在线观看 | 日韩人妻无码中文字幕视频 | 国产免费无码一区二区视频 | 日本熟妇大屁股人妻 | 午夜肉伦伦影院 | 99在线 | 亚洲 | 天天躁夜夜躁狠狠是什么心态 | 最近的中文字幕在线看视频 | 国产精品.xx视频.xxtv | 麻豆人妻少妇精品无码专区 | 国产内射爽爽大片视频社区在线 | 日本xxxx色视频在线观看免费 | 99riav国产精品视频 | 欧美丰满老熟妇xxxxx性 | 大肉大捧一进一出视频出来呀 | 麻豆av传媒蜜桃天美传媒 | 国产麻豆精品一区二区三区v视界 | 欧美日韩一区二区综合 | 亚洲精品综合五月久久小说 | 久久国产精品二国产精品 | 又大又硬又黄的免费视频 | 国产真实乱对白精彩久久 | 天天做天天爱天天爽综合网 | 国产午夜福利亚洲第一 | 一本久道久久综合婷婷五月 | 极品尤物被啪到呻吟喷水 | 亚洲熟悉妇女xxx妇女av | 国产内射老熟女aaaa | 国内老熟妇对白xxxxhd | 国产精品国产自线拍免费软件 | 2019午夜福利不卡片在线 | 精品一区二区三区波多野结衣 | 精品一区二区三区波多野结衣 | 国产真人无遮挡作爱免费视频 | 麻豆果冻传媒2021精品传媒一区下载 | 无码人妻少妇伦在线电影 | 欧美成人家庭影院 | 国产在线精品一区二区高清不卡 | 久久国产精品精品国产色婷婷 | 亚洲精品欧美二区三区中文字幕 | 国产偷抇久久精品a片69 | 蜜桃视频插满18在线观看 | 日韩成人一区二区三区在线观看 | 高潮毛片无遮挡高清免费 | 天天燥日日燥 | 免费视频欧美无人区码 | 国产无套粉嫩白浆在线 | 成人三级无码视频在线观看 | 国产午夜无码视频在线观看 | 国产精品人人爽人人做我的可爱 | 久久99精品久久久久婷婷 | 国产黄在线观看免费观看不卡 | 国产成人一区二区三区别 | 国产精品久久久久久亚洲毛片 | 日本一卡2卡3卡四卡精品网站 | 中文字幕无码日韩欧毛 | 色狠狠av一区二区三区 | 双乳奶水饱满少妇呻吟 | 久久综合给合久久狠狠狠97色 | 亚洲人亚洲人成电影网站色 | 免费乱码人妻系列无码专区 | 99久久99久久免费精品蜜桃 | 日韩精品一区二区av在线 | 丰满人妻被黑人猛烈进入 | 欧美日韩亚洲国产精品 | 亚洲一区二区三区四区 | 97久久国产亚洲精品超碰热 | 免费人成网站视频在线观看 | 欧美阿v高清资源不卡在线播放 | 国产熟女一区二区三区四区五区 | 色 综合 欧美 亚洲 国产 | 久久zyz资源站无码中文动漫 | 久久综合九色综合97网 | 久久久中文字幕日本无吗 | 强开小婷嫩苞又嫩又紧视频 | 成人免费视频一区二区 | 亚洲综合另类小说色区 | 高清不卡一区二区三区 | 欧美乱妇无乱码大黄a片 | 国产无套粉嫩白浆在线 | 日日碰狠狠躁久久躁蜜桃 | av无码电影一区二区三区 | 午夜精品一区二区三区在线观看 | 久久精品国产亚洲精品 | 成 人 网 站国产免费观看 | 俺去俺来也www色官网 | 精品无码av一区二区三区 | 77777熟女视频在线观看 а天堂中文在线官网 | 美女黄网站人色视频免费国产 | 国产艳妇av在线观看果冻传媒 | 任你躁国产自任一区二区三区 | 麻豆md0077饥渴少妇 | 午夜性刺激在线视频免费 | 欧美性生交xxxxx久久久 | 亚洲人成影院在线无码按摩店 | 5858s亚洲色大成网站www | 少妇人妻大乳在线视频 | 国产又粗又硬又大爽黄老大爷视 | 丰满人妻翻云覆雨呻吟视频 | 国产精品高潮呻吟av久久4虎 | 极品嫩模高潮叫床 | 少妇被粗大的猛进出69影院 | 5858s亚洲色大成网站www | 日韩欧美成人免费观看 | 午夜时刻免费入口 | 在线a亚洲视频播放在线观看 | 人妻少妇精品无码专区二区 | 青青草原综合久久大伊人精品 | 国产精品久久久久9999小说 | 亚洲无人区一区二区三区 | 欧美亚洲日韩国产人成在线播放 | 免费无码一区二区三区蜜桃大 | 又黄又爽又色的视频 | 国产精品高潮呻吟av久久4虎 | 自拍偷自拍亚洲精品被多人伦好爽 | 国内精品人妻无码久久久影院 | 婷婷五月综合激情中文字幕 | 亚洲中文无码av永久不收费 | 国产av无码专区亚洲a∨毛片 | 在线观看欧美一区二区三区 | 免费无码一区二区三区蜜桃大 | 久久久久se色偷偷亚洲精品av | 小泽玛莉亚一区二区视频在线 | 麻豆av传媒蜜桃天美传媒 | 日本熟妇人妻xxxxx人hd | 亚洲精品一区二区三区婷婷月 | 少妇人妻偷人精品无码视频 | 国产艳妇av在线观看果冻传媒 | 中文字幕日产无线码一区 | 欧美国产日韩亚洲中文 | 宝宝好涨水快流出来免费视频 | 在线视频网站www色 | 天天摸天天碰天天添 | 午夜成人1000部免费视频 | 午夜肉伦伦影院 | 久久精品国产日本波多野结衣 | 亚洲国产av精品一区二区蜜芽 | 性生交大片免费看女人按摩摩 | 日本欧美一区二区三区乱码 | 午夜成人1000部免费视频 | 午夜无码区在线观看 | 六月丁香婷婷色狠狠久久 | 欧美zoozzooz性欧美 | 在线播放亚洲第一字幕 | 国产综合色产在线精品 | 偷窥村妇洗澡毛毛多 | 亚洲欧美中文字幕5发布 | 黑人大群体交免费视频 | 国产精品无套呻吟在线 | 国产精品久久久久久亚洲毛片 | 久久综合网欧美色妞网 | 久久久久久a亚洲欧洲av冫 | 18无码粉嫩小泬无套在线观看 | 久久久久久国产精品无码下载 | 国产肉丝袜在线观看 | 99er热精品视频 | 一本大道伊人av久久综合 | 亚洲欧美综合区丁香五月小说 | 日韩精品无码一区二区中文字幕 | 国产尤物精品视频 | 色 综合 欧美 亚洲 国产 | 人人妻人人澡人人爽人人精品 | 老司机亚洲精品影院 | 国产人妻精品午夜福利免费 | 日本又色又爽又黄的a片18禁 | 国产明星裸体无码xxxx视频 | 久热国产vs视频在线观看 | 欧美日韩色另类综合 | 国产精品爱久久久久久久 | 国产午夜视频在线观看 | 99久久精品国产一区二区蜜芽 | 狠狠cao日日穞夜夜穞av | 国产9 9在线 | 中文 | 午夜精品一区二区三区在线观看 | 一本色道久久综合狠狠躁 | 东京热无码av男人的天堂 | 亚洲国产精品一区二区第一页 | 俺去俺来也在线www色官网 | 成人欧美一区二区三区 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产成人精品优优av | 精品国产乱码久久久久乱码 | 欧美性生交xxxxx久久久 | 亚洲综合伊人久久大杳蕉 | 中文字幕无码热在线视频 | 国产精品久久久午夜夜伦鲁鲁 | 国产成人一区二区三区在线观看 | 日韩精品一区二区av在线 | 正在播放老肥熟妇露脸 | 最新国产乱人伦偷精品免费网站 | √天堂中文官网8在线 | 国产精品成人av在线观看 | 97色伦图片97综合影院 | 日韩亚洲欧美中文高清在线 | 无码一区二区三区在线观看 | 婷婷五月综合激情中文字幕 | 免费无码av一区二区 | 欧美人与物videos另类 | 中文久久乱码一区二区 | 亚洲 另类 在线 欧美 制服 | 日日麻批免费40分钟无码 | 波多野结衣高清一区二区三区 | 少妇性l交大片 | 激情亚洲一区国产精品 | 亚洲人成网站色7799 | 久久亚洲精品成人无码 | 水蜜桃色314在线观看 | 亚洲爆乳精品无码一区二区三区 | 十八禁视频网站在线观看 | 无码国内精品人妻少妇 | 欧美成人午夜精品久久久 | 国产成人亚洲综合无码 | 免费无码午夜福利片69 | 特级做a爰片毛片免费69 | 国产特级毛片aaaaaa高潮流水 | 国产后入清纯学生妹 | 国产猛烈高潮尖叫视频免费 | 欧美日韩人成综合在线播放 | 欧洲极品少妇 | 色欲综合久久中文字幕网 | 成人欧美一区二区三区 | 国产精品鲁鲁鲁 | 中文字幕无线码免费人妻 | 国产亚洲美女精品久久久2020 | 国产精品永久免费视频 | 毛片内射-百度 | 国产偷自视频区视频 | 久久久久久久女国产乱让韩 | 亚洲一区二区三区偷拍女厕 | 精品无人区无码乱码毛片国产 | 国产免费无码一区二区视频 | 久久国产精品_国产精品 | 久久天天躁狠狠躁夜夜免费观看 | 精品国产一区二区三区四区 | 高潮毛片无遮挡高清免费视频 | 久久精品视频在线看15 | 国产无套粉嫩白浆在线 | 狠狠综合久久久久综合网 | 午夜免费福利小电影 | 色婷婷综合激情综在线播放 | 少妇性荡欲午夜性开放视频剧场 | 亚洲 另类 在线 欧美 制服 | 性欧美熟妇videofreesex | 狂野欧美性猛xxxx乱大交 | 国产午夜福利亚洲第一 | 99久久久无码国产精品免费 | 色综合久久久无码中文字幕 | 人人爽人人澡人人人妻 | 成人av无码一区二区三区 | 久久精品国产99久久6动漫 | 在线观看欧美一区二区三区 | 色综合视频一区二区三区 | 少妇人妻大乳在线视频 | 自拍偷自拍亚洲精品10p | 丝袜美腿亚洲一区二区 | 狠狠综合久久久久综合网 | 亚洲精品综合五月久久小说 | 成人免费视频一区二区 | 亚洲成a人片在线观看日本 | 51国偷自产一区二区三区 | 人人爽人人爽人人片av亚洲 | 久久精品国产亚洲精品 | 狠狠躁日日躁夜夜躁2020 | 日韩人妻少妇一区二区三区 | 高清不卡一区二区三区 | 精品一区二区三区无码免费视频 | √天堂资源地址中文在线 | 人妻尝试又大又粗久久 | 极品尤物被啪到呻吟喷水 | 精品人人妻人人澡人人爽人人 | 在线а√天堂中文官网 | 亚洲精品一区二区三区在线观看 | 久久综合给久久狠狠97色 | 最近免费中文字幕中文高清百度 | 性欧美videos高清精品 | 沈阳熟女露脸对白视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产内射爽爽大片视频社区在线 | 日韩精品a片一区二区三区妖精 | 亚洲阿v天堂在线 | 男女作爱免费网站 | 无码人妻少妇伦在线电影 | 国产激情综合五月久久 | 日韩亚洲欧美精品综合 | 日本精品人妻无码77777 天堂一区人妻无码 | 中文字幕无码视频专区 | 麻豆成人精品国产免费 | 熟妇人妻无码xxx视频 | 久久无码专区国产精品s | 人妻夜夜爽天天爽三区 | 一本久道久久综合狠狠爱 | 激情国产av做激情国产爱 | 无码人妻黑人中文字幕 | 夜夜躁日日躁狠狠久久av | 内射白嫩少妇超碰 | 国产精品18久久久久久麻辣 | 人人妻人人藻人人爽欧美一区 | 99久久久无码国产aaa精品 | 国产亚洲精品久久久久久 | 亚洲精品一区二区三区在线 | 亚洲精品久久久久中文第一幕 | 亚洲欧美精品aaaaaa片 | 中文精品久久久久人妻不卡 | 99re在线播放 | 国产精品怡红院永久免费 | 99久久久无码国产精品免费 | 欧美色就是色 | 久久人人爽人人爽人人片av高清 | 麻豆果冻传媒2021精品传媒一区下载 | 小泽玛莉亚一区二区视频在线 | 精品国产精品久久一区免费式 | 性色欲情网站iwww九文堂 | 国产精品无码成人午夜电影 | 日本精品人妻无码77777 天堂一区人妻无码 | 性欧美牲交xxxxx视频 | 欧美日韩在线亚洲综合国产人 | 亚洲成av人影院在线观看 | 无人区乱码一区二区三区 | 中文字幕av无码一区二区三区电影 | 福利一区二区三区视频在线观看 | 亚洲成a人片在线观看日本 | 俺去俺来也www色官网 | 小sao货水好多真紧h无码视频 | 一本色道婷婷久久欧美 | 日日噜噜噜噜夜夜爽亚洲精品 | 婷婷色婷婷开心五月四房播播 | 亚洲va中文字幕无码久久不卡 | 日日干夜夜干 | 中文字幕人妻无码一区二区三区 | 免费国产成人高清在线观看网站 | 97夜夜澡人人双人人人喊 | 久久人人爽人人爽人人片av高清 | 亚洲 欧美 激情 小说 另类 | 久久精品国产大片免费观看 | 亚洲中文字幕在线无码一区二区 | 欧美丰满老熟妇xxxxx性 | 欧美激情综合亚洲一二区 | 国产高清不卡无码视频 | 欧美真人作爱免费视频 | 亚洲七七久久桃花影院 | 少妇高潮喷潮久久久影院 | 无人区乱码一区二区三区 | 中文字幕乱码亚洲无线三区 | 天天躁日日躁狠狠躁免费麻豆 | 欧美怡红院免费全部视频 | 亚洲精品国产精品乱码视色 | 久久久久av无码免费网 | 欧美性生交活xxxxxdddd | 国产麻豆精品一区二区三区v视界 | 免费国产黄网站在线观看 | 一本精品99久久精品77 | 国产亚洲精品久久久久久大师 | 国产亚洲精品久久久久久大师 | 国产亚洲精品久久久闺蜜 | 亚洲a无码综合a国产av中文 | 色窝窝无码一区二区三区色欲 | 少妇激情av一区二区 | 欧美日本免费一区二区三区 | 精品人妻人人做人人爽夜夜爽 | 久久精品国产日本波多野结衣 | 极品尤物被啪到呻吟喷水 | 97精品国产97久久久久久免费 | 亚洲爆乳精品无码一区二区三区 | 国产精品毛多多水多 | 国产精品亚洲综合色区韩国 | 无码吃奶揉捏奶头高潮视频 | 少妇无码吹潮 | 欧美人与禽猛交狂配 | 中文字幕av日韩精品一区二区 | 久久久中文字幕日本无吗 | 国产内射老熟女aaaa | 国产两女互慰高潮视频在线观看 | 99精品国产综合久久久久五月天 | 捆绑白丝粉色jk震动捧喷白浆 | 色欲av亚洲一区无码少妇 | 欧美日韩视频无码一区二区三 | 曰韩少妇内射免费播放 | 特黄特色大片免费播放器图片 | 国产精品毛片一区二区 | 7777奇米四色成人眼影 | 亚洲成av人影院在线观看 | 老子影院午夜精品无码 | 欧美老熟妇乱xxxxx | 少妇性俱乐部纵欲狂欢电影 | 乱人伦人妻中文字幕无码 | 色婷婷综合中文久久一本 | a国产一区二区免费入口 | 婷婷丁香六月激情综合啪 | 免费乱码人妻系列无码专区 | 国产三级久久久精品麻豆三级 | 天堂久久天堂av色综合 | 97色伦图片97综合影院 | 无码国模国产在线观看 | 亚洲日本一区二区三区在线 | 狠狠色色综合网站 | 国产精品igao视频网 | 人人澡人人透人人爽 | 欧美第一黄网免费网站 | 无码人妻精品一区二区三区不卡 | 日日摸日日碰夜夜爽av | 国产国语老龄妇女a片 | 国内精品久久毛片一区二区 | 樱花草在线播放免费中文 | 内射欧美老妇wbb | www国产精品内射老师 | 在线欧美精品一区二区三区 | 国产97色在线 | 免 | 久久99精品久久久久婷婷 | 一本色道久久综合亚洲精品不卡 | 亚洲а∨天堂久久精品2021 | 无码乱肉视频免费大全合集 | 日韩亚洲欧美中文高清在线 | 亚洲色偷偷男人的天堂 | 红桃av一区二区三区在线无码av | 98国产精品综合一区二区三区 | 亚洲国产精品一区二区美利坚 | 久久99精品久久久久久动态图 | 欧美人与禽zoz0性伦交 | 亚洲一区二区三区在线观看网站 | 亚洲国产一区二区三区在线观看 | 色欲人妻aaaaaaa无码 | 国产欧美精品一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 日韩欧美中文字幕在线三区 | 久久zyz资源站无码中文动漫 | 欧美激情综合亚洲一二区 | 99久久久国产精品无码免费 | 377p欧洲日本亚洲大胆 | 欧美第一黄网免费网站 | 亚洲人成无码网www | 亚洲精品国产精品乱码不卡 | 大肉大捧一进一出视频出来呀 | 性色av无码免费一区二区三区 | 中文字幕日产无线码一区 | 亚洲综合精品香蕉久久网 | 日日天日日夜日日摸 | 黑人玩弄人妻中文在线 | 久久99精品国产.久久久久 | 女人和拘做爰正片视频 | 亚洲精品欧美二区三区中文字幕 | 精品人人妻人人澡人人爽人人 | 国色天香社区在线视频 | 国产欧美亚洲精品a | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲午夜久久久影院 | 丁香啪啪综合成人亚洲 | 性生交大片免费看l | 四十如虎的丰满熟妇啪啪 | 中国女人内谢69xxxxxa片 | 波多野42部无码喷潮在线 | 久久久久成人精品免费播放动漫 | 国产真实乱对白精彩久久 | 少妇无码av无码专区在线观看 | 欧美丰满少妇xxxx性 | 精品国产一区二区三区av 性色 | 亚洲狠狠色丁香婷婷综合 | 领导边摸边吃奶边做爽在线观看 | 日韩人妻无码一区二区三区久久99 | 免费看男女做好爽好硬视频 | 精品国产aⅴ无码一区二区 | 日韩精品成人一区二区三区 | 无码人妻精品一区二区三区不卡 | 无码一区二区三区在线观看 | 7777奇米四色成人眼影 | 小sao货水好多真紧h无码视频 | 性做久久久久久久免费看 | 少妇无套内谢久久久久 | 台湾无码一区二区 | 老司机亚洲精品影院无码 | 97人妻精品一区二区三区 | 亚洲国产精品久久久天堂 | 宝宝好涨水快流出来免费视频 | 最近中文2019字幕第二页 | 国产成人一区二区三区在线观看 | 欧美丰满老熟妇xxxxx性 | 久久精品中文闷骚内射 | 色偷偷人人澡人人爽人人模 | 东京热无码av男人的天堂 | 人人澡人人透人人爽 | 午夜精品一区二区三区在线观看 | 青草青草久热国产精品 | 日本欧美一区二区三区乱码 | 无码帝国www无码专区色综合 | 国产精品美女久久久久av爽李琼 | 日本免费一区二区三区最新 | 国精产品一区二区三区 | 装睡被陌生人摸出水好爽 | 亚洲精品久久久久avwww潮水 | 又大又硬又黄的免费视频 | 丰满岳乱妇在线观看中字无码 | 久久久久成人精品免费播放动漫 | 午夜不卡av免费 一本久久a久久精品vr综合 | 人人妻人人澡人人爽欧美一区九九 | 丰满少妇高潮惨叫视频 | 18精品久久久无码午夜福利 | 久久国产自偷自偷免费一区调 | 少妇性l交大片欧洲热妇乱xxx | 国产色xx群视频射精 | 精品国产麻豆免费人成网站 | 在线成人www免费观看视频 | 精品国产一区二区三区av 性色 | 老熟妇乱子伦牲交视频 | 中国女人内谢69xxxxxa片 | 欧美xxxx黑人又粗又长 | 初尝人妻少妇中文字幕 | 日本va欧美va欧美va精品 | 欧美人与禽猛交狂配 | 国产内射老熟女aaaa | 噜噜噜亚洲色成人网站 | 狂野欧美性猛交免费视频 | 丁香花在线影院观看在线播放 | 天天躁日日躁狠狠躁免费麻豆 | 国产美女极度色诱视频www | 久久久精品人妻久久影视 | 在线 国产 欧美 亚洲 天堂 | 国产无遮挡又黄又爽又色 | 成人无码视频在线观看网站 | 日韩精品乱码av一区二区 | 久久午夜无码鲁丝片 | 精品久久久久久亚洲精品 | 又色又爽又黄的美女裸体网站 | 99久久精品日本一区二区免费 | 丰满人妻翻云覆雨呻吟视频 | 一个人看的www免费视频在线观看 | 午夜免费福利小电影 | 国产乱人伦av在线无码 | 波多野结衣乳巨码无在线观看 | 免费看少妇作爱视频 | 18无码粉嫩小泬无套在线观看 | 国精品人妻无码一区二区三区蜜柚 | 久久天天躁狠狠躁夜夜免费观看 | 人妻少妇精品无码专区二区 | 欧美亚洲国产一区二区三区 | 亚洲中文字幕乱码av波多ji | 亚洲中文字幕无码一久久区 | 中文字幕日产无线码一区 | 亚洲日韩一区二区 | 国产av一区二区精品久久凹凸 | 久久久国产一区二区三区 | 一个人看的视频www在线 | 成在人线av无码免观看麻豆 | 国产成人无码av一区二区 | 精品日本一区二区三区在线观看 | 正在播放老肥熟妇露脸 | 性欧美大战久久久久久久 | 丁香啪啪综合成人亚洲 | 又大又紧又粉嫩18p少妇 | 人人妻人人澡人人爽欧美一区九九 | 久久精品无码一区二区三区 | 精品人妻中文字幕有码在线 | 国产精品高潮呻吟av久久4虎 | 欧美日韩综合一区二区三区 | aa片在线观看视频在线播放 | 日韩精品无码一区二区中文字幕 | 国产人妻精品一区二区三区不卡 | 丰满人妻翻云覆雨呻吟视频 | 亚洲精品久久久久久一区二区 | 红桃av一区二区三区在线无码av | 国产又爽又猛又粗的视频a片 | 少妇人妻偷人精品无码视频 | 国产人成高清在线视频99最全资源 | 国产精品久久久久久无码 | 亚洲成av人影院在线观看 | 亚洲国产精品久久人人爱 | 熟女俱乐部五十路六十路av | 国产网红无码精品视频 | 动漫av网站免费观看 | 久久精品女人天堂av免费观看 | v一区无码内射国产 | 国产在线一区二区三区四区五区 | 久久成人a毛片免费观看网站 | 亚洲日本va午夜在线电影 | 又紧又大又爽精品一区二区 | 精品午夜福利在线观看 | 高潮毛片无遮挡高清免费视频 | 少妇无码av无码专区在线观看 | 香港三级日本三级妇三级 | 特黄特色大片免费播放器图片 | 亚洲无人区一区二区三区 | 久久久精品国产sm最大网站 | 在线 国产 欧美 亚洲 天堂 | 久久精品国产一区二区三区 | 正在播放东北夫妻内射 | 奇米影视888欧美在线观看 | 97精品国产97久久久久久免费 | 一本久道久久综合狠狠爱 | 99久久亚洲精品无码毛片 | 亚洲成a人片在线观看日本 | 欧美人妻一区二区三区 | 国产亚洲精品精品国产亚洲综合 | 欧美精品免费观看二区 | 98国产精品综合一区二区三区 | 婷婷五月综合激情中文字幕 | 在线亚洲高清揄拍自拍一品区 | 又湿又紧又大又爽a视频国产 | 国产人妻精品午夜福利免费 | 久久精品一区二区三区四区 | 欧美精品一区二区精品久久 | 午夜丰满少妇性开放视频 | 99精品无人区乱码1区2区3区 | 久久精品成人欧美大片 | 欧美三级a做爰在线观看 | 日韩人妻无码一区二区三区久久99 | 国产精品igao视频网 | a在线观看免费网站大全 | 亚洲国产精品成人久久蜜臀 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲熟妇色xxxxx欧美老妇 | 欧美老人巨大xxxx做受 | 久久综合狠狠综合久久综合88 | 亚洲区小说区激情区图片区 | 老司机亚洲精品影院无码 | 国产精品久久国产三级国 | 亚洲精品国产精品乱码视色 | 精品国产青草久久久久福利 | 大肉大捧一进一出视频出来呀 | 无码国产激情在线观看 | 国产人妖乱国产精品人妖 | 伊在人天堂亚洲香蕉精品区 | 丝袜人妻一区二区三区 | 正在播放东北夫妻内射 | 色综合久久久无码中文字幕 | 一本一道久久综合久久 | 中文字幕乱码人妻二区三区 | 激情五月综合色婷婷一区二区 | а√资源新版在线天堂 | 风流少妇按摩来高潮 | 成人无码视频在线观看网站 | 国产激情无码一区二区app | 青青草原综合久久大伊人精品 | 国产 浪潮av性色四虎 | 国产成人av免费观看 | 国产精品亚洲а∨无码播放麻豆 | 国产成人精品无码播放 | 欧美阿v高清资源不卡在线播放 | 性生交大片免费看l | 久久亚洲a片com人成 | 波多野结衣av在线观看 | 清纯唯美经典一区二区 | 少妇高潮喷潮久久久影院 | 亚洲国产av精品一区二区蜜芽 | 2020久久超碰国产精品最新 | 日本护士xxxxhd少妇 | 亚洲精品一区二区三区在线观看 | 亚洲精品一区二区三区在线 | 香港三级日本三级妇三级 | 水蜜桃亚洲一二三四在线 | 永久免费观看国产裸体美女 | 国产激情无码一区二区app | 久久国产精品二国产精品 | 无码人妻出轨黑人中文字幕 | 77777熟女视频在线观看 а天堂中文在线官网 | 国产精品久免费的黄网站 | 精品国产精品久久一区免费式 | 亚洲欧洲日本综合aⅴ在线 | 精品偷拍一区二区三区在线看 | 在线欧美精品一区二区三区 | 内射老妇bbwx0c0ck | 欧美野外疯狂做受xxxx高潮 | 久久人人爽人人爽人人片ⅴ | 暴力强奷在线播放无码 | 久久久精品成人免费观看 | 亚洲熟妇色xxxxx欧美老妇 | 日韩亚洲欧美中文高清在线 | 天天摸天天碰天天添 | 欧美三级不卡在线观看 | 东京热无码av男人的天堂 | 国产亚洲欧美在线专区 | 在线观看免费人成视频 | 无套内谢的新婚少妇国语播放 | 亚洲成a人片在线观看无码3d | 男人的天堂2018无码 | 精品成人av一区二区三区 | 18禁黄网站男男禁片免费观看 | 国产日产欧产精品精品app | √8天堂资源地址中文在线 | 国产精品无码mv在线观看 | 十八禁视频网站在线观看 | 四十如虎的丰满熟妇啪啪 | 久久久久久a亚洲欧洲av冫 | 成人试看120秒体验区 | 2019nv天堂香蕉在线观看 | 欧美熟妇另类久久久久久不卡 | 成人免费视频视频在线观看 免费 | 成人试看120秒体验区 | 在线精品亚洲一区二区 | 亚洲综合精品香蕉久久网 | 高潮毛片无遮挡高清免费 | 久热国产vs视频在线观看 | 亚洲中文字幕在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 久久久精品欧美一区二区免费 | 欧美日韩精品 | 99精品国产综合久久久久五月天 | 国产午夜亚洲精品不卡 | 99精品久久毛片a片 | 少妇人妻av毛片在线看 | 中文字幕日产无线码一区 | 伊在人天堂亚洲香蕉精品区 | 性生交大片免费看女人按摩摩 | 97久久精品无码一区二区 | 日本护士毛茸茸高潮 | 日韩av无码一区二区三区 | 人人澡人人妻人人爽人人蜜桃 | 国产成人亚洲综合无码 | a在线观看免费网站大全 | 一本加勒比波多野结衣 | 日日噜噜噜噜夜夜爽亚洲精品 | 成人女人看片免费视频放人 | 人人妻人人澡人人爽欧美精品 | 色噜噜亚洲男人的天堂 | 亚洲娇小与黑人巨大交 | 狠狠躁日日躁夜夜躁2020 | 久久精品国产日本波多野结衣 | 国产精品内射视频免费 | 亚洲综合无码久久精品综合 | 麻豆人妻少妇精品无码专区 | 亚洲国产av美女网站 | 国产精品无码一区二区三区不卡 | 色诱久久久久综合网ywww | 日日摸天天摸爽爽狠狠97 | 成人免费视频在线观看 | 中文字幕无码日韩欧毛 | 国内揄拍国内精品人妻 | 日本爽爽爽爽爽爽在线观看免 | 久久国产36精品色熟妇 | 精品夜夜澡人妻无码av蜜桃 | 精品无码av一区二区三区 | 一区二区传媒有限公司 | 亚洲中文字幕无码中字 | 亚洲 a v无 码免 费 成 人 a v | 欧美性黑人极品hd | 乌克兰少妇性做爰 | 色婷婷久久一区二区三区麻豆 | 乱人伦人妻中文字幕无码久久网 | 日本精品少妇一区二区三区 | 人人妻人人澡人人爽欧美精品 | 精品偷自拍另类在线观看 | 亚洲一区二区三区无码久久 | 少妇性l交大片欧洲热妇乱xxx | 欧美性生交活xxxxxdddd | 免费观看激色视频网站 | 67194成是人免费无码 | 丰满护士巨好爽好大乳 | 精品国产一区二区三区四区 | 成人欧美一区二区三区 | 一个人看的视频www在线 | 欧美激情综合亚洲一二区 | 女高中生第一次破苞av | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲一区av无码专区在线观看 | 又紧又大又爽精品一区二区 | 俺去俺来也在线www色官网 | 亚洲国产成人a精品不卡在线 | 亚洲中文字幕在线无码一区二区 | 免费观看的无遮挡av | 老熟妇仑乱视频一区二区 | 国产免费观看黄av片 | 国产莉萝无码av在线播放 | 伊人久久大香线蕉av一区二区 | 亚洲综合无码一区二区三区 | 男女超爽视频免费播放 | 日韩视频 中文字幕 视频一区 | 久久久久久久人妻无码中文字幕爆 | 国产成人无码a区在线观看视频app | 又色又爽又黄的美女裸体网站 | 久久99精品国产麻豆蜜芽 | 97夜夜澡人人爽人人喊中国片 | 亚洲色大成网站www国产 | 亚洲国产日韩a在线播放 | 夜精品a片一区二区三区无码白浆 | 婷婷五月综合激情中文字幕 | 黑森林福利视频导航 | 男女作爱免费网站 | 少妇人妻av毛片在线看 | 东京热男人av天堂 | 在线观看免费人成视频 | 国产精品内射视频免费 | 国产成人无码专区 | 女人被男人爽到呻吟的视频 | 欧美日韩综合一区二区三区 | 亚洲精品一区二区三区四区五区 | 色一情一乱一伦一区二区三欧美 | 国产两女互慰高潮视频在线观看 | 无人区乱码一区二区三区 | 樱花草在线社区www | 欧洲熟妇精品视频 | 对白脏话肉麻粗话av | 精品熟女少妇av免费观看 | 在线亚洲高清揄拍自拍一品区 | 国产无套粉嫩白浆在线 | 欧美日韩久久久精品a片 | 色综合久久网 | 无码人妻少妇伦在线电影 | 亚洲综合伊人久久大杳蕉 | 成年美女黄网站色大免费视频 | 曰韩少妇内射免费播放 | 少妇性l交大片欧洲热妇乱xxx | 国产福利视频一区二区 | 玩弄中年熟妇正在播放 | 精品少妇爆乳无码av无码专区 | 东京无码熟妇人妻av在线网址 | 久久亚洲国产成人精品性色 | 两性色午夜视频免费播放 | 四虎国产精品免费久久 | 天堂久久天堂av色综合 | 亚洲精品久久久久avwww潮水 | 领导边摸边吃奶边做爽在线观看 | 少妇高潮一区二区三区99 | 国产麻豆精品一区二区三区v视界 | 日本一卡2卡3卡四卡精品网站 | 国产国语老龄妇女a片 | 99精品久久毛片a片 | 国产在线aaa片一区二区99 | 性色欲网站人妻丰满中文久久不卡 | 国产欧美精品一区二区三区 | 小sao货水好多真紧h无码视频 | 亚洲欧美精品伊人久久 | 国产无遮挡又黄又爽免费视频 | 亚洲热妇无码av在线播放 | 久久久久亚洲精品男人的天堂 | 国产日产欧产精品精品app | 亚洲日韩精品欧美一区二区 | 婷婷色婷婷开心五月四房播播 | 久9re热视频这里只有精品 | 欧美人与禽zoz0性伦交 | 四十如虎的丰满熟妇啪啪 | 亚洲综合色区中文字幕 | 67194成是人免费无码 | 中文无码精品a∨在线观看不卡 | 亚洲va欧美va天堂v国产综合 | 亚洲日韩一区二区三区 | 精品成人av一区二区三区 | 亚洲第一无码av无码专区 | 中文字幕无码免费久久9一区9 | 午夜福利一区二区三区在线观看 | 国精产品一区二区三区 | 在线欧美精品一区二区三区 | 国产成人无码a区在线观看视频app | 国产成人一区二区三区别 | 18精品久久久无码午夜福利 | 装睡被陌生人摸出水好爽 | 中文字幕无码乱人伦 | 澳门永久av免费网站 | 婷婷六月久久综合丁香 | 亚洲综合无码一区二区三区 | 图片区 小说区 区 亚洲五月 | 日日天日日夜日日摸 | 亚洲性无码av中文字幕 | 亚洲日本一区二区三区在线 | 99re在线播放 | 窝窝午夜理论片影院 | 天天摸天天透天天添 | 又大又黄又粗又爽的免费视频 | 亚洲一区二区三区在线观看网站 | 亚洲男女内射在线播放 | 日本肉体xxxx裸交 | 99久久无码一区人妻 | 六月丁香婷婷色狠狠久久 | 亚洲精品一区二区三区婷婷月 | 亚洲色成人中文字幕网站 | 日本va欧美va欧美va精品 | 水蜜桃色314在线观看 | 国精品人妻无码一区二区三区蜜柚 | 国产色xx群视频射精 | 欧洲熟妇色 欧美 | 丰满人妻精品国产99aⅴ | 亚洲日韩av片在线观看 | 国产精品第一国产精品 | 日韩欧美群交p片內射中文 | 成在人线av无码免观看麻豆 | 国产成人人人97超碰超爽8 | 亚洲综合另类小说色区 | 国产区女主播在线观看 | 欧洲vodafone精品性 | 免费网站看v片在线18禁无码 | 国内少妇偷人精品视频 | 婷婷六月久久综合丁香 | 国产无遮挡又黄又爽又色 | 精品亚洲韩国一区二区三区 | 亚洲高清偷拍一区二区三区 | 国产在线无码精品电影网 | 嫩b人妻精品一区二区三区 | 乱码午夜-极国产极内射 | 帮老师解开蕾丝奶罩吸乳网站 | 无人区乱码一区二区三区 | 国产午夜视频在线观看 | 亚洲精品久久久久avwww潮水 | 国产成人精品无码播放 | 国产精品久久精品三级 | 天天拍夜夜添久久精品大 | 黄网在线观看免费网站 | 国产精品va在线播放 | 久久亚洲精品成人无码 | 玩弄中年熟妇正在播放 | 国产精品人人爽人人做我的可爱 | 荫蒂被男人添的好舒服爽免费视频 | 精品久久8x国产免费观看 | 日本大香伊一区二区三区 | 欧美 亚洲 国产 另类 | 色老头在线一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 天天燥日日燥 | 18无码粉嫩小泬无套在线观看 | 丁香花在线影院观看在线播放 | 18无码粉嫩小泬无套在线观看 | 欧洲vodafone精品性 | 国产亚洲美女精品久久久2020 | 久久精品国产日本波多野结衣 | 无码帝国www无码专区色综合 | 日韩亚洲欧美中文高清在线 | 精品国产一区二区三区av 性色 | 国产熟女一区二区三区四区五区 | 国产真实伦对白全集 | 曰韩少妇内射免费播放 | 日本va欧美va欧美va精品 | 国产成人综合在线女婷五月99播放 | 国产免费久久久久久无码 | 玩弄人妻少妇500系列视频 | 亚洲精品综合五月久久小说 | 曰本女人与公拘交酡免费视频 | 色诱久久久久综合网ywww | 人人澡人摸人人添 | 亚洲男女内射在线播放 | 亚洲 欧美 激情 小说 另类 | 亚洲 欧美 激情 小说 另类 | 国产精品无码一区二区三区不卡 | 人妻少妇被猛烈进入中文字幕 | 久久久久成人精品免费播放动漫 | 性做久久久久久久久 | 国产小呦泬泬99精品 | 综合激情五月综合激情五月激情1 | 亚洲精品鲁一鲁一区二区三区 | 未满小14洗澡无码视频网站 | 少妇一晚三次一区二区三区 | 99久久人妻精品免费二区 | 精品 日韩 国产 欧美 视频 | 亚洲熟熟妇xxxx | 人人澡人摸人人添 | 久久婷婷五月综合色国产香蕉 | 激情五月综合色婷婷一区二区 | 欧美xxxxx精品 | 樱花草在线播放免费中文 | 自拍偷自拍亚洲精品10p | 欧美黑人乱大交 | 国产国产精品人在线视 | 国产乱子伦视频在线播放 | 九九综合va免费看 | 国产亚洲精品久久久久久久久动漫 | 亚洲第一无码av无码专区 | 亚洲国产精品久久久天堂 | 免费乱码人妻系列无码专区 | 无码纯肉视频在线观看 | 欧美xxxx黑人又粗又长 | 国产亚洲精品久久久闺蜜 | 牲交欧美兽交欧美 | 国产99久久精品一区二区 | 国产成人av免费观看 | 亚拍精品一区二区三区探花 | 久久伊人色av天堂九九小黄鸭 | 日韩无码专区 | 久久久久久九九精品久 | 少妇被粗大的猛进出69影院 | 麻豆av传媒蜜桃天美传媒 | 九一九色国产 | 波多野42部无码喷潮在线 | 日本丰满护士爆乳xxxx | 亚洲无人区午夜福利码高清完整版 | 精品欧洲av无码一区二区三区 | 日产精品高潮呻吟av久久 | 一本大道久久东京热无码av | 欧美性生交xxxxx久久久 | 日韩精品无码一本二本三本色 | 欧美变态另类xxxx | 日本大乳高潮视频在线观看 | 精品乱子伦一区二区三区 | av香港经典三级级 在线 | 国产美女极度色诱视频www | 亚洲中文字幕va福利 | 国产一区二区三区影院 | 狠狠噜狠狠狠狠丁香五月 | 性生交片免费无码看人 | 一个人看的www免费视频在线观看 | 免费无码午夜福利片69 | 亚洲国产高清在线观看视频 | 永久免费观看美女裸体的网站 | 高潮毛片无遮挡高清免费 | 国产又粗又硬又大爽黄老大爷视 | 四虎国产精品免费久久 | 国产va免费精品观看 | 欧美第一黄网免费网站 | 久久久婷婷五月亚洲97号色 | 亚洲熟妇色xxxxx欧美老妇 | 久久久久久久女国产乱让韩 | 亚洲国产欧美日韩精品一区二区三区 | 免费人成在线观看网站 | 无码乱肉视频免费大全合集 | 中文无码成人免费视频在线观看 | 未满小14洗澡无码视频网站 | 久久久成人毛片无码 | 十八禁视频网站在线观看 | 免费乱码人妻系列无码专区 | 亚洲日韩一区二区三区 | 动漫av网站免费观看 | 国产偷抇久久精品a片69 | 亚洲色成人中文字幕网站 | 国产精品亚洲综合色区韩国 | 正在播放东北夫妻内射 | 欧美丰满老熟妇xxxxx性 | 亚洲爆乳大丰满无码专区 | 一本久久a久久精品亚洲 | 国产乱人偷精品人妻a片 | 欧美丰满熟妇xxxx性ppx人交 | 日本一卡二卡不卡视频查询 | 人人爽人人澡人人人妻 | 亚洲另类伦春色综合小说 | 偷窥村妇洗澡毛毛多 | 国产色视频一区二区三区 | 日本熟妇浓毛 | 大地资源中文第3页 | 天堂无码人妻精品一区二区三区 | 成人aaa片一区国产精品 | 久久久久久国产精品无码下载 | 日韩精品一区二区av在线 | 精品午夜福利在线观看 | 久久久久久久久888 | 久久久久久久久888 | 精品一区二区三区无码免费视频 | 亚洲乱码中文字幕在线 | 亚洲精品久久久久久一区二区 | 在线观看免费人成视频 | 99久久精品午夜一区二区 | 成人免费视频视频在线观看 免费 | 99视频精品全部免费免费观看 | 娇妻被黑人粗大高潮白浆 | 亚洲综合无码久久精品综合 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲а∨天堂久久精品2021 | 日本成熟视频免费视频 | 性欧美大战久久久久久久 | 激情五月综合色婷婷一区二区 | 中文字幕无码乱人伦 | 天堂а√在线地址中文在线 | 少妇被黑人到高潮喷出白浆 | 亚洲天堂2017无码 | 九一九色国产 | 成 人 网 站国产免费观看 | 国产色xx群视频射精 | 永久免费精品精品永久-夜色 |