日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MapReduce的几个企业级经典面试案例

發(fā)布時間:2024/1/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapReduce的几个企业级经典面试案例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MapReduce的幾個企業(yè)級經(jīng)典面試案例

一、官方統(tǒng)計案例:

  • 要求:統(tǒng)計一下單詞出現(xiàn)的次數(shù)
  • 測試數(shù)據(jù):

    zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin
  • 編寫代碼:

    • mapper類

      /*** @author 17616*/ public class WordCountMapper extends Mapper<LongWritable, Text, Text, LongWritable> {@Overridepublic void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 首先獲取一行數(shù)據(jù)String line = value.toString ();// 將行內(nèi)的單詞進(jìn)行切分,使用一個數(shù)組進(jìn)行保存,切分?jǐn)?shù)據(jù)時根據(jù)源數(shù)據(jù)得知可以使用空格的方式切分。String[] arr = line.split (" ");for (String str : arr) {context.write (new Text (str), new LongWritable (1));}} }
    • reducer類

      /*** @author 17616*/ public class WordCountReducer extends Reducer<Text, LongWritable, Text, LongWritable> {@Overridepublic void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {// 定義變量記錄單詞出現(xiàn)的次數(shù)long sum = 0;for (LongWritable val : values) {// 記錄總次數(shù)sum += val.get ();}// 輸出數(shù)據(jù),key就是單詞,value就是在map階段這個單詞出現(xiàn)的總次數(shù)context.write (key, new LongWritable (sum));} }
    • Driver類

      /*** @author 17616* 官方案例,計算統(tǒng)計*/ public class WordCountDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {// 獲取當(dāng)前的默認(rèn)配置Configuration conf = new Configuration ();// 獲取代表當(dāng)前mr作業(yè)的job對象Job job = Job.getInstance (conf);// 指定一下當(dāng)前程序的入口類job.setJarByClass (WordCountDriver.class);//指定當(dāng)前Mapper、Reducer任務(wù)的類job.setMapperClass (WordCountMapper.class);job.setReducerClass (WordCountReducer.class);//設(shè)置Mapper的結(jié)果類型job.setMapOutputKeyClass (Text.class);job.setMapOutputValueClass (LongWritable.class);// 設(shè)置Reducer的結(jié)果類型job.setOutputKeyClass (Text.class);job.setOutputValueClass (LongWritable.class);//設(shè)置待分析的文件夾路徑(linux的路徑地址)FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/mapreduce"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/mapreduce"));if (!job.waitForCompletion (true)) {return;}} }
  • 運(yùn)行結(jié)果:

    zhangqin 20 zhangrui 20 zhangyong 20
  • 二、計算平均值:

    • 要求:計算一下數(shù)據(jù)的平均值

    • 測試數(shù)據(jù):

      tom 69 tom 84 tom 68 jary 89 jary 90 jary 81 jary 35 alex 23 alex 100 alex 230
    • 編寫代碼:

      • mapper類

        /*** @Author zhangyong* @Date 2020/4/3 23:43* @Version 1.0*/ public class AverageMapper extends Mapper<LongWritable, Text, Text, IntWritable> {@Overridepublic void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//獲取每行的數(shù)據(jù)內(nèi)容String line = value.toString ();//按照空格去切會獲取到多個數(shù)據(jù),所以用數(shù)組的方式存儲String[] data = line.split (" ");String name = data[0];//Integer做一個數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換。int score = Integer.parseInt (data[1]);//輸出數(shù)據(jù)context.write (new Text (name), new IntWritable (score));} }
      • reducer類

        /*** @Author zhangyong* @Date 2020/4/3 23:43* @Version 1.0*/ public class AverageReducer extends Reducer<Text, IntWritable, Text, IntWritable> {@Overridepublic void reduce(Text name, Iterable<IntWritable> scores, Context context) throws IOException, InterruptedException {int i = 0;int score = 0;for (IntWritable data : scores) {score = score + data.get ();i++;}int average = score / i;context.write (name, new IntWritable (average));} }
      • Driver類

        /*** @Author zhangyong* @Date 2020/4/3 23:41* @Version 1.0* 計算平均值*/ public class AverageDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);//驅(qū)動類,入口類job.setJarByClass (AverageDriver.class);//設(shè)置Mapper和Reducer的類job.setMapperClass (AverageMapper.class);job.setReducerClass (AverageReducer.class);//設(shè)置Mapper的結(jié)果類型job.setMapOutputKeyClass (Text.class);job.setMapOutputValueClass (IntWritable.class);//設(shè)置Reduce的結(jié)果類型job.setOutputKeyClass (Text.class);job.setOutputValueClass (IntWritable.class);//設(shè)置待分析的文件夾路徑(linux的路徑地址)FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/average"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/average"));//提交到j(luò)objob.waitForCompletion (true);} }
    • 運(yùn)行結(jié)果:

      alex 117 jary 73 tom 73

    三、求溫度最高值:

    • 要求:求出一下年限的時間的最高溫度
  • 測試數(shù)據(jù):

    2329999919500515070000 9909999919500515120022 9909999919500515180011 9509999919490324120111 6509999919490324180078 9909999919370515070001 9909999919370515120002 9909999919450515180001 6509999919450324120002 8509999919450324180078
  • 編寫代碼:

    • mapper類

      /*** @author 17616*/ public class HeightMapper extends Mapper<LongWritable, Text, Text, LongWritable> {@Overridepublic void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//獲取一段數(shù)據(jù)String line = value.toString ();//獲取年份String year = line.substring (8, 12);//獲取溫度(強(qiáng)制轉(zhuǎn)換一下)int t = Integer.parseInt (line.substring (18, 22));context.write (new Text (year),new LongWritable (t));} }
    • reducer類

      /*** @author 17616*/ public class HeightReducer extends Reducer<Text, LongWritable, Text, LongWritable> {@Overridepublic void reduce(Text year, Iterable<LongWritable> t, Context context) throws IOException, InterruptedException {long max = 0;for (LongWritable data : t) {if (max < data.get ()) {max = data.get ();}}context.write (year, new LongWritable (max));} }
    • Driver類

      /*** @author 17616* -求最大值*/ public class HeightDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {// 獲取當(dāng)前的默認(rèn)配置Configuration conf = new Configuration ();// 獲取代表當(dāng)前mr作業(yè)的job對象Job job = Job.getInstance (conf);// 指定一下當(dāng)前程序的入口類job.setJarByClass (HeightDriver.class);//指定當(dāng)前Mapper、Reducer任務(wù)的類job.setMapperClass (HeightMapper.class);job.setReducerClass (HeightReducer.class);//設(shè)置Mapper的結(jié)果類型job.setMapOutputKeyClass (Text.class);job.setMapOutputValueClass (LongWritable.class);// 設(shè)置Reducer的結(jié)果類型job.setOutputKeyClass (Text.class);job.setOutputValueClass (LongWritable.class);//設(shè)置待分析的文件夾路徑(linux的路徑地址)FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/wendu/"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/wendu"));job.waitForCompletion (true);} }
  • 運(yùn)行結(jié)果:

    1937 2 1945 78 1949 111 1950 22
  • 四、數(shù)據(jù)去重:

    • 要求:去重一下ip地址
  • 測試數(shù)據(jù):

    192.168.234.21 192.168.234.22 192.168.234.21 192.168.234.21 192.168.234.23 192.168.234.21 192.168.234.21 192.168.234.21 192.168.234.25 192.168.234.21 192.168.234.21 192.168.234.26 192.168.234.21 192.168.234.27 192.168.234.21 192.168.234.27 192.168.234.21 192.168.234.29 192.168.234.21 192.168.234.26 192.168.234.21 192.168.234.25 192.168.234.25 192.168.234.25 192.168.234.21 192.168.234.22 192.168.234.21
  • 編寫代碼:

    • mapper類

      /*** @Author zhangyong* @Date 2020/4/7 19:53* @Version 1.0*/ public class DisMapper extends Mapper<LongWritable,Text,Text,NullWritable> {@Overridepublic void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {/*** 其中value只是一個變量,此處被當(dāng)做key進(jìn)行輸出*/context.write (value,NullWritable.get ());} }
    • reducer類

      /*** @Author zhangyong* @Date 2020/4/7 21:21* @Version 1.0*/ public class DisReducer extends Reducer<Text, NullWritable, Text, NullWritable> {@Overridepublic void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {context.write (key, NullWritable.get ());}}
    • Driver類

      /*** @Author zhangyong* @Date 2020/4/7 21:32* @Version 1.0* 數(shù)據(jù)去重*/ public class DisDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);//設(shè)置Drive類job.setJarByClass (DisReducer.class);//設(shè)置Mapper、Reduce類job.setMapperClass (DisMapper.class);job.setReducerClass (DisReducer.class);//Mapper的輸出job.setMapOutputKeyClass (Text.class);job.setMapOutputValueClass (NullWritable.class);//地址FileInputFormat.setInputPaths (job,new Path ("hdfs://anshun115:9000/distinct"));FileOutputFormat.setOutputPath (job,new Path ("hdfs://anshun115:9000/result/distinct"));job.waitForCompletion (true);} }
  • 運(yùn)行結(jié)果:

    192.168.234.21 192.168.234.22 192.168.234.23 192.168.234.25 192.168.234.26 192.168.234.27 192.168.234.29
  • 五、流量統(tǒng)計:

    • 要求:統(tǒng)計一下手機(jī)號碼使用的流量數(shù)
  • 測試數(shù)據(jù):

    13901000123 zs bj 343 13202111011 ww sh 456 13901000123 zs bj 1024 13207551234 ls sz 758
  • 編寫代碼:

    • Bean類

      /*** @Author zhangyong* @Date 2020/4/10 8:01* @Version 1.0*/ public class FlowBean implements Writable {private String phone;private String name;private String addr;private long flow;/*** 序列化** @param dataOutput* @throws IOException*/@Overridepublic void write(DataOutput dataOutput) throws IOException {dataOutput.writeUTF (phone);dataOutput.writeUTF (name);dataOutput.writeUTF (addr);dataOutput.writeLong (flow);}/*** 反序列化** @param dataInput* @throws IOException*/@Overridepublic void readFields(DataInput dataInput) throws IOException {this.phone = dataInput.readUTF ();this.name = dataInput.readUTF ();this.addr = dataInput.readUTF ();this.flow = dataInput.readLong ();}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}public long getFlow() {return flow;}public void setFlow(long flow) {this.flow = flow;}@Overridepublic String toString() {return "FlowBean{" +"phone='" + phone + '\'' +", name='" + name + '\'' +", addr='" + addr + '\'' +", flow=" + flow +'}';} }
    • mapper類

      /*** @Author zhangyong* @Date 2020/4/10 8:10* @Version 1.0*/ public class FlowMapper extends Mapper<LongWritable, Text, Text, FlowBean> {@Overridepublic void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//獲取行String line = value.toString ();/*** [13901000123,zk,bj,343]* phone = 13901000123;* name = zk;* addr = bj;* flow = 343;*/String[] info = line.split (" ");FlowBean flowBean = new FlowBean ();flowBean.setPhone (info[0]);flowBean.setName (info[1]);flowBean.setAddr (info[2]);flowBean.setFlow (Integer.parseInt (info[3]));context.write (new Text (flowBean.getName ()), flowBean);} }
    • reducer類

      /*** @Author zhangyong* @Date 2020/4/10 8:23* @Version 1.0*/ public class FlowReducer extends Reducer<Text, FlowBean, FlowBean, NullWritable> {@Overridepublic void reduce(Text key, Iterable<FlowBean> values, Context context) throws IOException, InterruptedException {FlowBean result = new FlowBean ();for (FlowBean value : values) {result.setPhone (value.getPhone ());result.setName (value.getName ());result.setAddr (value.getAddr ());result.setFlow (result.getFlow () + value.getFlow ());}context.write (result, NullWritable.get ());} }
    • Driver類

      /*** @Author zhangyong* @Date 2020/4/10 8:28* @Version 1.0* 流量統(tǒng)計*/ public class FlowDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);// 加載主類job.setJarByClass (FlowDriver.class);//加載mapper、reduce類job.setMapperClass (FlowMapper.class);job.setReducerClass (FlowReducer.class);//設(shè)置map的的key、valuejob.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(FlowBean.class);//設(shè)置輸出的的key、valuejob.setOutputKeyClass(FlowBean.class);job.setOutputValueClass (NullWritable.class);//設(shè)置路徑(傳輸、結(jié)果)FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/flow"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/flow"));job.waitForCompletion (true);} }
  • 運(yùn)行結(jié)果:

    FlowBean{phone='13207551234', name='ls', addr='sz', flow=758} FlowBean{phone='13202111011', name='ww', addr='sh', flow=456} FlowBean{phone='13901000123', name='zs', addr='bj', flow=1367}
  • 六、電影的排行榜:

    • 要求:按照降序排列一下電影的熱度
  • 測試數(shù)據(jù):

    中國機(jī)長 72 機(jī)械師2 83 奇異博士 87 流浪地球 79 復(fù)仇者聯(lián)盟4:終局之戰(zhàn) 94 驚奇隊長 68 蜘蛛俠:英雄遠(yuǎn)征 80 長城 56 奪路而逃 69 神奇動物在哪里 57 驢得水 59 我不是潘金蓮 55 速度與激情:特別行動 77 哪吒之魔童降世 96 捉迷藏 78 上海堡壘 9 葉問4 75 勇士之門 35 羅曼蒂克消亡史 67 阿麗塔:戰(zhàn)斗天使 89
  • 編寫代碼:

    • Bean類

      /*** @Author zhangyong* @Date 2020/4/13 8:42* @Version 1.0*/ public class MovieBean implements WritableComparable<MovieBean> {private String name;private int hot;/*** 排序方法** @param o* @return*/@Overridepublic int compareTo(MovieBean o) {return o.hot - this.hot;}/*** 序列化** @param dataOutput* @throws IOException*/@Overridepublic void write(DataOutput dataOutput) throws IOException {dataOutput.writeUTF (name);dataOutput.writeInt (hot);}/*** 反序列化** @param dataInput* @throws IOException*/@Overridepublic void readFields(DataInput dataInput) throws IOException {this.name = dataInput.readUTF ();this.hot = dataInput.readInt ();}public void setName(String name) {this.name = name;}public int getHot() {return hot;}public void setHot(int hot) {this.hot = hot;}@Overridepublic String toString() {return "MovieBean{" +"name='" + name + '\'' +", hot=" + hot +'}';} }
    • mapper類

      /*** @Author zhangyong* @Date 2020/4/13 8:52* @Version 1.0*/ public class MovieMapper extends Mapper<LongWritable, Text, MovieBean, NullWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//獲取一行String line = value.toString ();//截取數(shù)據(jù)String[] split = line.split (" ");//封裝對象MovieBean movieBean = new MovieBean ();movieBean.setName (split[0]);movieBean.setHot (Integer.parseInt (split[1]));//輸出context.write (movieBean, NullWritable.get ());} }
    • reducer類

    • Driver類

      /*** @Author zhangyong* @Date 2020/4/13 9:19* @Version 1.0*/ public class MovieDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);job.setJarByClass (MovieDriver.class);job.setMapperClass (MovieMapper.class);//加載map輸出類型和value的輸出類型job.setMapOutputKeyClass (MovieBean.class);job.setMapOutputValueClass (NullWritable.class);FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/sort"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/sort"));job.waitForCompletion (true);} }
  • 運(yùn)行結(jié)果:

    MovieBean{name='哪吒之魔童降世', hot=96} MovieBean{name='復(fù)仇者聯(lián)盟4:終局之戰(zhàn)', hot=94} MovieBean{name='阿麗塔:戰(zhàn)斗天使', hot=89} MovieBean{name='奇異博士', hot=87} MovieBean{name='機(jī)械師2', hot=83} MovieBean{name='蜘蛛俠:英雄遠(yuǎn)征', hot=80} MovieBean{name='流浪地球', hot=79} MovieBean{name='捉迷藏', hot=78} MovieBean{name='速度與激情:特別行動', hot=77} MovieBean{name='葉問4', hot=75} MovieBean{name='中國機(jī)長', hot=72} MovieBean{name='奪路而逃', hot=69} MovieBean{name='驚奇隊長', hot=68} MovieBean{name='羅曼蒂克消亡史', hot=67} MovieBean{name='驢得水', hot=59} MovieBean{name='神奇動物在哪里', hot=57} MovieBean{name='長城', hot=56} MovieBean{name='我不是潘金蓮', hot=55} MovieBean{name='勇士之門', hot=35} MovieBean{name='上海堡壘', hot=9}
  • 七、多個文件統(tǒng)計成績:

    • 要求:根據(jù)三張表統(tǒng)計每個同學(xué)的各課成績的總和
  • 測試數(shù)據(jù):

    chinese.txt

    1 alex 89 2 alex 73 3 alex 67 1 romeo 49 2 romeo 83 3 romeo 27 1 lee 77 2 lee 66 3 lee 89

    english.txt

    1 alex 55 2 alex 69 3 alex 75 1 romeo 44 2 romeo 64 3 romeo 86 1 lee 76 2 lee 84 3 lee 93

    math.txt

    1 alex 85 2 alex 59 3 alex 95 1 romeo 74 2 romeo 67 3 romeo 96 1 lee 45 2 lee 76 3 lee 67
  • 編寫代碼:

    • Bean類

      /*** @Author zhangyong* @Date 2020/4/10 10:00* @Version 1.0*/ public class ScoreBean implements Writable {private String name;private int chinese;private int math;private int english;@Overridepublic void write(DataOutput dataOutput) throws IOException {dataOutput.writeUTF(name);dataOutput.writeInt(chinese);dataOutput.writeInt(math);dataOutput.writeInt(english);}@Overridepublic void readFields(DataInput dataInput) throws IOException {this.name = dataInput.readUTF();this.chinese = dataInput.readInt();this.math = dataInput.readInt();this.english = dataInput.readInt();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getChinese() {return chinese;}public void setChinese(int chinese) {this.chinese = chinese;}public int getMath() {return math;}public void setMath(int math) {this.math = math;}public int getEnglish() {return english;}public void setEnglish(int english) {this.english = english;}@Overridepublic String toString() {return "StuScore{" +"name='" + name + '\'' +", chinese=" + chinese +", math=" + math +", english=" + english +'}';} }
    • mapper類

      /*** @Author zhangyong* @Date 2020/4/10 10:03* @Version 1.0*/ public class ScoreMapper extends Mapper<LongWritable, Text, Text, ScoreBean> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 獲取一行數(shù)據(jù)String line = value.toString();String[] data = line.split(" ");ScoreBean ss = new ScoreBean();ss.setName(data[1]);/*** 注意,此處導(dǎo)包的時候不要導(dǎo)錯,應(yīng)該導(dǎo)入的是org.apache.hadoop.mapreduce.lib.input.FileSplit;* 通過獲取當(dāng)前map階段的MapTask處理的切片信息來獲取文件名。*/FileSplit split = (FileSplit) context.getInputSplit();if (split.getPath().getName().equals("chinese.txt")) {ss.setChinese(Integer.parseInt(data[2]));} else if (split.getPath().getName().equals("math.txt")) {ss.setMath(Integer.parseInt(data[2]));} else if (split.getPath().getName().equals("english.txt")) {ss.setEnglish(Integer.parseInt(data[2]));}context.write(new Text(ss.getName()), ss);} }
    • reducer類

      /*** @Author zhangyong* @Date 2020/4/10 10:05* @Version 1.0*/ public class ScoreReducer extends Reducer<Text, ScoreBean, Text, ScoreBean> {@Overrideprotected void reduce(Text key, Iterable<ScoreBean> values, Context context) throws IOException, InterruptedException {ScoreBean resultScore = new ScoreBean();// 此處key.toSting中只有name一個值,因為在map階段的輸出key只有nameresultScore.setName(key.toString());for (ScoreBean value : values) {// result.setFlow(result.getFlow() + value.getFlow());// 語文成績分?jǐn)?shù)resultScore.setChinese(resultScore.getChinese() + value.getChinese());// 數(shù)學(xué)成績分resultScore.setMath(resultScore.getMath() + value.getMath());// 英語成績分resultScore.setEnglish(resultScore.getEnglish() + value.getEnglish());}context.write(key, resultScore);} }
    • Driver類

      /*** @Author zhangyong* @Date 2020/4/10 10:10* @Version 1.0* 統(tǒng)計成績*/ public class ScoreDriver {public static void main(String[] args) throws Exception {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);//加載Drive類job.setJarByClass (ScoreDriver.class);//加載Mapper、Reducer類job.setMapperClass (ScoreMapper.class);job.setReducerClass (ScoreReducer.class);//加載map輸出類型和value的輸出類型job.setMapOutputKeyClass (Text.class);job.setMapOutputValueClass (ScoreBean.class);job.setOutputKeyClass (Text.class);job.setOutputValueClass (ScoreBean.class);FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/score"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/score"));job.waitForCompletion (true);} }
  • 運(yùn)行結(jié)果:

    alex StuScore{name='alex', chinese=229, math=239, english=199} lee StuScore{name='lee', chinese=232, math=188, english=253} romeo StuScore{name='romeo', chinese=159, math=237, english=194}
  • 八、Job鏈處理數(shù)據(jù):

    • 要求:統(tǒng)計每個同學(xué)的總分
  • 測試數(shù)據(jù):

    1|zhang 100 2|wang 200 3|zhang 150 4|lisi 190 5|wang 50 6|zhang 80 7|lisi 50
  • 編寫代碼:

    • Bean類

      /*** @Author zhangyong* @Date 2020/4/14 15:06* @Version 1.0*/ public class CountBean implements WritableComparable<CountBean> {private String name;private int count;@Overridepublic int compareTo(CountBean o) {return o.count - this.count;}/*** 序列化** @param dataOutput* @throws IOException*/@Overridepublic void write(DataOutput dataOutput) throws IOException {dataOutput.writeUTF (name);dataOutput.writeInt (count);}/*** 反序列化** @param dataInput* @throws IOException*/@Overridepublic void readFields(DataInput dataInput) throws IOException {this.name = dataInput.readUTF ();this.count = dataInput.readInt ();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}@Overridepublic String toString() {return "CountBean{" +"name='" + name + '\'' +", count=" + count +'}';} }
    • mapper類

      OneCountMapper類

      /*** @Author zhangyong* @Date 2020/4/14 8:54* @Version 1.0*/ public class OneCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString ();/*** 通過 | 進(jìn)行切分時會得到一個數(shù)組,數(shù)組中的0號下標(biāo)為序號,1號下標(biāo)中有name和profit的數(shù)據(jù)。* 再通過切分1號下標(biāo)中的數(shù)據(jù)時可以獲取到name和profit的數(shù)據(jù)。*/String name = line.split ("\\|")[1].split (" ")[0];int count = Integer.parseInt (line.split ("\\|")[1].split (" ")[1]);context.write (new Text (name),new IntWritable (count));} }

      TwoCountMapper類

      /*** @Author zhangyong* @Date 2020/4/14 15:27* @Version 1.0*/ public class TwoCountMapper extends Mapper<LongWritable, Text, CountBean, NullWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString ();/*** 因為第二個Mapper任務(wù)要讀取的數(shù)據(jù)內(nèi)容是第一個MR任務(wù)的結(jié)果文件,通常MR任務(wù)的結(jié)果文件是以TAB的方式來展示數(shù)據(jù)的。* 所以當(dāng)?shù)诙€Mapper任務(wù)要執(zhí)行切分時,所使用的分隔符應(yīng)該是\t——制表符。*/String name = line.split ("\t")[0];int count = Integer.parseInt (line.split ("\t")[1]);CountBean bean = new CountBean ();bean.setName (name);bean.setCount (count);context.write (bean, NullWritable.get ());} }
    • reducer類

      /*** @Author zhangyong* @Date 2020/4/14 8:54* @Version 1.0*/ public class OneCountReducer extends Reducer<Text , IntWritable, Text, IntWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {//統(tǒng)計利潤int sum = 0;for (IntWritable value : values) {sum+=value.get ();}context.write (key,new IntWritable (sum));} }
    • Driver類

      /*** @Author zhangyong* @Date 2020/4/14 8:54* @Version 1.0* job鏈操作數(shù)據(jù)*/ public class CountDriver {public static void main(String[] args) throws Exception {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);job.setJarByClass (CountDriver.class);job.setMapperClass (OneCountMapper.class);job.setReducerClass (OneCountReducer.class);job.setMapOutputKeyClass (Text.class);job.setMapOutputValueClass (IntWritable.class);job.setOutputKeyClass (Text.class);job.setOutputValueClass (IntWritable.class);FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/count"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/count"));if (job.waitForCompletion (true)) {// 設(shè)置第二個Job任務(wù)Job job2 = Job.getInstance (conf);// 設(shè)置第二個Job任務(wù)的Mapperjob2.setMapperClass (TwoCountMapper.class);job2.setMapOutputKeyClass (CountBean.class);job2.setMapOutputValueClass (NullWritable.class);/*** 設(shè)置第二個Job任務(wù)是輸入輸出路徑。* 此處的輸入路徑是第一個job任務(wù)的輸出路徑* 注意設(shè)置路徑時,里面?zhèn)魅氲膉ob應(yīng)該是當(dāng)前的job任務(wù),如下所示,應(yīng)該是job2。* 如果寫成前面的job任務(wù)名稱,在運(yùn)行時則會爆出錯誤,提示路徑不存在。*/FileInputFormat.setInputPaths (job2, new Path ("hdfs://anshun115:9000/result/count"));FileOutputFormat.setOutputPath (job2, new Path ("hdfs://anshun115:9000/result/count2"));// 此處提交任務(wù)時,注意用的是job2。job2.waitForCompletion (true);}}}
  • 運(yùn)行結(jié)果:

    count.txt

    lisi 240 wang 250 zhang 330

    count2.txt

    CountBean{name='zhang', count=330} CountBean{name='wang', count=250} CountBean{name='lisi', count=240}
  • 九、簡單分區(qū)案例:

    • 要求:分區(qū)顯示手機(jī)使用流量的總和

    • 測試數(shù)據(jù):

      13901000123 zs bj 343 13202111011 ww sh 456 13901000123 zs bj 1024 13207551234 ls sz 758
    • 2. 編寫代碼:- Partitioner類```java/*** @Author zhangyong* @Date 2020/4/10 10:42* @Version 1.0*/public class AddPartitioner extends Partitioner<Text, PartFlowBean> {@Overridepublic int getPartition(Text text, PartFlowBean flowBean, intnumPartitioner) {String addr = flowBean.getAddr();if (addr.equals("bj")) {return 0;} else if (addr.equals("sh")) {return 1;} else {return 2;}}}
      • Bean類

        /*** @Author zhangyong* @Date 2020/4/10 10:01* @Version 1.0*/ public class PartFlowBean implements Writable {private String phone;private String name;private String addr;private long flow;/*** 序列化** @param dataOutput* @throws IOException*/@Overridepublic void write(DataOutput dataOutput) throws IOException {dataOutput.writeUTF (phone);dataOutput.writeUTF (name);dataOutput.writeUTF (addr);dataOutput.writeLong (flow);}/*** 反序列化** @param dataInput* @throws IOException*/@Overridepublic void readFields(DataInput dataInput) throws IOException {this.phone = dataInput.readUTF ();this.name = dataInput.readUTF ();this.addr = dataInput.readUTF ();this.flow = dataInput.readLong ();}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}public long getFlow() {return flow;}public void setFlow(long flow) {this.flow = flow;}@Overridepublic String toString() {return "FlowBean{" +"phone='" + phone + '\'' +", name='" + name + '\'' +", addr='" + addr + '\'' +", flow=" + flow +'}';} }
      • mapper類

        /*** @Author zhangyong* @Date 2020/4/10 10:51* @Version 1.0*/ public class PartFlowMapper extends Mapper<LongWritable, Text, Text, PartFlowBean> {@Overridepublic void map(LongWritable key, Text value, Context context) throwsIOException, InterruptedException {String line = value.toString ();/**[13901000123,zk,bj,343]phone = 13901000123;name = zk;addr = bj;flow = 343;*/String[] info = line.split (" ");PartFlowBean flowBean = new PartFlowBean ();flowBean.setPhone (info[0]);flowBean.setName (info[1]);flowBean.setAddr (info[2]);flowBean.setFlow (Integer.parseInt (info[3]));context.write (new Text (flowBean.getName ()), flowBean);} }
      • reducer類

        /*** @Author zhangyong* @Date 2020/4/10 10:23* @Version 1.0*/ public class PartFlowReducer extends Reducer<Text, PartFlowBean, PartFlowBean,NullWritable> {@Overridepublic void reduce(Text key, Iterable<PartFlowBean> values, Contextcontext) throws IOException, InterruptedException {PartFlowBean result = new PartFlowBean ();for (PartFlowBean value : values) {result.setPhone (value.getPhone ());result.setPhone (value.getPhone ());result.setName (value.getName ());result.setAddr (value.getAddr ());result.setFlow (result.getFlow () + value.getFlow ());}context.write (result, NullWritable.get ());} }
      • Driver類

        /*** @Author zhangyong* @Date 2020/4/11 11:17* @Version 1.0* 分區(qū)案例*/ public class PartFlowDriver {public static void main(String[] args) throws Exception {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);job.setJarByClass (PartFlowDriver.class);job.setMapperClass (PartFlowMapper.class);job.setReducerClass (PartFlowReducer.class);/*** 下面的兩個類如果不寫的話,那么就不會生效。*/// 設(shè)置分區(qū)類job.setPartitionerClass (AddPartitioner.class);// 設(shè)置分區(qū)數(shù)量job.setNumReduceTasks (3);job.setMapOutputKeyClass (Text.class);job.setMapOutputValueClass (PartFlowBean.class);job.setOutputKeyClass (PartFlowBean.class);job.setOutputValueClass (NullWritable.class);FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/partition"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/partition"));job.waitForCompletion (true);} }
  • 運(yùn)行結(jié)果:

    part-r-00000

    FlowBean{phone='13901000123', name='zs', addr='bj', flow=1367}

    part-r-00001

    FlowBean{phone='13202111011', name='ww', addr='sh', flow=456}

    part-r-00002

    FlowBean{phone='13207551234', name='ls', addr='sz', flow=758}
  • 十、分區(qū)并全排序:

    • 要求:把一下數(shù)據(jù)按照兩位數(shù)、三位數(shù)、四位數(shù)以上進(jìn)行分區(qū),并且按照大小排序
  • 測試數(shù)據(jù):

    82 239 231 23 22 213 123 232 124 213 3434 232 4546 565 123 231 231 2334 231 1123 5656 657 12313 4324 213 123 2 232 32 343 123 4535 12321 3442 453 1233 342 453 1231 322 452 232 343 455 3123 3434 3242
  • 編寫代碼:

    • Partitioner類

      /*** @Author zhangyong* @Date 2020/4/14 9:39* @Version 1.0* 全排序* 將上述文件內(nèi)容按照數(shù)字位數(shù)分別寫入三個文件,如下* 0-99的寫入到文件1* 100-999寫入到文件2* 1000-其他數(shù)據(jù)寫入到文件3*/ public class AutoPartitioner extends Partitioner<IntWritable, IntWritable> {@Overridepublic int getPartition(IntWritable key, IntWritable value, int numPartitions) {String num = String.valueOf (key.get ());if (num.matches ("[0-9][0-9]") || num.matches ("[0-9]")) {return 0;} else if (num.matches ("[0-9][0-9][0-9]")) {return 1;} else {return 2;}} }
    • mapper類

      /*** @Author zhangyong* @Date 2020/4/14 9:44* @Version 1.0*/ public class NumSortMapper extends Mapper<LongWritable, Text, IntWritable, IntWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString ();String[] data = line.split (" ");for (String num : data) {context.write (new IntWritable (Integer.parseInt (num)), new IntWritable (1));}} }
    • reducer類

      /*** @Author zhangyong* @Date 2020/4/14 9:39* @Version 1.0*/ public class NumSortReducer extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable> {@Overrideprotected void reduce(IntWritable key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int result = 0;for (IntWritable count : values) {result = result + count.get ();}context.write (key, new IntWritable (result));} }
    • Driver類

      /*** @Author zhangyong* @Date 2020/4/14 9:39* @Version 1.0**/ public class NumSortDriver {public static void main(String[] args) throws Exception {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);job.setJarByClass (NumSortDriver.class);job.setMapperClass (NumSortMapper.class);job.setMapOutputKeyClass (IntWritable.class);job.setMapOutputValueClass (IntWritable.class);/*** 由于結(jié)果文件系統(tǒng)是3個,所以需要在此指定Reduce的分區(qū)類和任務(wù)數(shù)。*/job.setPartitionerClass (AutoPartitioner.class);job.setNumReduceTasks (3);job.setReducerClass (NumSortReducer.class);job.setOutputKeyClass (IntWritable.class);job.setOutputValueClass (IntWritable.class);FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/numcount/"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/numcount"));job.waitForCompletion (true);} }
  • 運(yùn)行結(jié)果:

    part-r-00000

    2 1 22 1 23 1 32 1 82 1

    part-r-00001

    123 4 124 1 213 3 231 4 232 4 239 1 322 1 342 1 343 2 452 1 453 2 455 1 565 1 657 1

    part-r-00002

    1123 1 1231 1 1233 1 2334 1 3123 1 3242 1 3434 2 3442 1 4324 1 4535 1 4546 1 5656 1 12313 1 12321 1
  • 十一、Combine提高運(yùn)行效率:

    • 要求:使用Combine類統(tǒng)計一下單詞出現(xiàn)的次數(shù)

    • 測試數(shù)據(jù):

      zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin zhangyong zhangrui zhangqin
    • 編寫代碼:

      • mapper類

        /*** @Author zhangyong* @Date 2020/4/15 7:30* @Version 1.0*/ public class WcMapper extends Mapper<LongWritable, Text, Text, IntWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString ();String[] words = line.split (" ");for (String word : words) {context.write (new Text (word), new IntWritable (1));}} }
      • Combine類

        /*** @Author zhangyong* @Date 2020/4/15 7:34* @Version 1.0*/ public class WcCombine extends Reducer<Text,IntWritable,Text,IntWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int count=0;for (IntWritable value : values) {count+=value.get ();}context.write (key,new IntWritable (count));} }
      • reducer類

        /*** @Author zhangyong* @Date 2020/4/15 7:34* @Version 1.0*/ public class WcReducer extends Reducer<Text,IntWritable,Text,IntWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int count = 0;for (IntWritable value : values) {count+=value.get ();System.err.println(key + ":" + value);}context.write (key,new IntWritable (count));} }
      • Driver類

        /*** @Author zhangyong* @Date 2020/4/15 7:42* @Version 1.0*/ public class WcDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration ();Job job = Job.getInstance (conf);job.setJarByClass (WcDriver.class);job.setMapperClass (WcMapper.class);job.setReducerClass (WcReducer.class);job.setMapOutputKeyClass (Text.class);job.setMapOutputValueClass (IntWritable.class);/*** 設(shè)置combine組件類,如果不設(shè)定,默認(rèn)是不執(zhí)行combine過程的。* 設(shè)置combine的目的是為了讓合并工作提前發(fā)生一次,在MapTask階段時合并一次,使Reduce階段的工作負(fù)載。* 需要注意的是combine僅僅是做合并的工作,減少工作負(fù)載,并不能影響最終的文件結(jié)果。*/job.setCombinerClass(WcCombine.class);job.setOutputKeyClass (Text.class);job.setOutputValueClass (IntWritable.class);FileInputFormat.setInputPaths (job, new Path ("hdfs://anshun115:9000/mapreduce"));FileOutputFormat.setOutputPath (job, new Path ("hdfs://anshun115:9000/result/wccombine"));job.waitForCompletion (true);} }
    • 運(yùn)行結(jié)果:

      zhangqin 20 zhangrui 20 zhangyong 20

    十二、推薦認(rèn)識好友:

    • 要求:找出一下朋友的潛在朋友(一度二度朋友關(guān)系鏈)
  • 測試數(shù)據(jù):

    tom rose tom jim tom smith tom lucy rose tom rose lucy rose smith jim tom jim lucy jim smith smith jim smith tom smith rose
  • 編寫代碼:

    • 第一個mapper類

      /*** @Author 張勇* @Site www.gz708090.com* @Version 1.0* @Date 2020-04-17 12:08*/ public class OneFriendMapper extends Mapper<LongWritable, Text, Text, Text> {/*** 輸入的key和value是根據(jù)文件內(nèi)容來確定。* 輸出的key和value是因為在業(yè)務(wù)邏輯中設(shè)定的輸出是name-friend好友關(guān)系。*/@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 獲取每行的數(shù)據(jù)String line = value.toString();// 獲取姓名String name = line.split(" ")[0];// 獲取好友String friend = line.split(" ")[1];context.write(new Text(name), new Text(friend));} }
    • 第一個reducer類

      /*** @Author 張勇* @Site www.gz708090.com* @Version 1.0* @Date 2020-04-17 12:28*/ public class OneFriendReducer extends Reducer<Text, Text, Text, IntWritable> {/*** 輸入key和value要和mapper的輸出保持一致。* Text和IntWritable:* 如果是好友-1,如果不是好友就用-2。*/@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {ArrayList<String> friendList = new ArrayList<>();//處理好友關(guān)系for (Text value : values) {friendList.add(value.toString());if (key.toString().compareTo(value.toString()) < 0) {context.write(new Text(key + "-" + value), new IntWritable(1));} else {context.write(new Text(value + "-" + key), new IntWritable(1));}}// 處理可能相識的好友。for (int i = 0; i < friendList.size(); i++) {for (int j = 0; j < friendList.size(); j++) {String friend1 = friendList.get(i);String friend2 = friendList.get(j);if (friend1.compareTo(friend2) < 0) {context.write(new Text(friend1 + "-" + friend2), new IntWritable(2));}}}} }
    • 第二個mapper類

      /*** @Author 張勇* @Site www.gz708090.com* @Version 1.0* @Date 2020-04-17 12:32*/ public class TwoFriendMapper extends Mapper<LongWritable, Text, Text, IntWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 獲取一行數(shù)據(jù)String line = value.toString();// 獲取朋友關(guān)系的信息String friendInfo = line.split("\t")[0];// 獲取朋友關(guān)系的深度int deep = Integer.parseInt(line.split("\t")[1]);context.write(new Text(friendInfo), new IntWritable(deep));} }
    • 第二個reducer類

      /*** @Author 張勇* @Site www.gz708090.com* @Version 1.0* @Date 2020-04-17 12:34*/ public class TwoFriendReducer extends Reducer<Text, IntWritable, Text, NullWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {Boolean flag = true;/*** 設(shè)定好友關(guān)系為true的時候進(jìn)行輸出* 因為題目要求是輸出可能相識的好友。所以為true的代碼應(yīng)該是2* 也就是好友關(guān)系為1的時候設(shè)置變量為false*/for (IntWritable value : values) {if (value.get() == 1) {flag = false;}}if (flag) {context.write(key, NullWritable.get());}} }
    • Driver類

      /*** @Author 張勇* @Site www.gz708090.com* @Version 1.0* @Date 2020-04-17 12:36*/ public class FriendDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration();//設(shè)置第一輪MapReduce的相應(yīng)處理類與輸入輸出Job job1 = Job.getInstance(conf);job1.setJarByClass(FriendDriver.class);job1.setMapperClass(OneFriendMapper.class);job1.setReducerClass(OneFriendReducer.class);job1.setMapOutputKeyClass(Text.class);job1.setMapOutputValueClass(Text.class);job1.setOutputKeyClass(Text.class);job1.setOutputValueClass(IntWritable.class);//設(shè)置路徑(傳輸、結(jié)果)FileInputFormat.setInputPaths(job1, new Path("hdfs://anshun115:9000/friend"));FileOutputFormat.setOutputPath(job1, new Path("hdfs://anshun115:9000/result/friend"));//如果第一輪MapReduce完成再做這里的代碼if (job1.waitForCompletion(true)) {Job job2 = Job.getInstance(conf);// 設(shè)置第二個Job任務(wù)的Mapperjob2.setMapperClass(TwoFriendMapper.class);job2.setMapOutputKeyClass(Text.class);job2.setMapOutputValueClass(IntWritable.class);// 設(shè)置第二個Job任務(wù)的Reducerjob2.setReducerClass(TwoFriendReducer.class);job2.setOutputKeyClass(Text.class);job2.setOutputValueClass(NullWritable.class);/*** 設(shè)置第二個Job任務(wù)是輸入輸出路徑。* 此處的輸入路徑是第一個job任務(wù)的輸出路徑* 注意設(shè)置路徑時,里面?zhèn)魅氲膉ob應(yīng)該是當(dāng)前的job任務(wù),如下所示,應(yīng)該是job2。* 如果寫成前面的job任務(wù)名稱,在運(yùn)行時則會爆出錯誤,提示路徑不存在。*/FileInputFormat.setInputPaths(job2, new Path("hdfs://anshun115:9000/result/friend"));FileOutputFormat.setOutputPath(job2, new Path("hdfs://anshun115:9000/result/friend2"));// 此處提交任務(wù)時,注意用的是job2。job2.waitForCompletion(true);}} }
  • 運(yùn)行結(jié)果:

    friend

    jim-smith 1 jim-lucy 1 jim-tom 1 smith-tom 2 lucy-smith 2 lucy-tom 2 rose-smith 1 lucy-rose 1 rose-tom 1 smith-tom 2 lucy-smith 2 lucy-tom 2 rose-smith 1 smith-tom 1 jim-smith 1 rose-tom 2 jim-rose 2 jim-tom 2 lucy-tom 1 smith-tom 1 jim-tom 1 rose-tom 1 lucy-smith 2 lucy-rose 2 jim-lucy 2 jim-smith 2 jim-rose 2 rose-smith 2

    friend2

    jim-rose lucy-smith
  • 總結(jié)

    以上是生活随笔為你收集整理的MapReduce的几个企业级经典面试案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    狠狠躁夜夜a产精品视频 | 一区国产精品 | 高清视频一区 | 成人cosplay福利网站 | 国产男女免费完整视频 | 亚洲精品系列 | 黄色成人av | 中文字幕一区在线 | 人人爽人人乐 | 不卡的av中文字幕 | 开心色激情网 | 中文字幕一区二区三区四区 | 日韩在线视频观看 | 99这里只有精品视频 | 在线观看的黄色 | 99在线高清视频在线播放 | 精品国产一区二区三区四区在线观看 | 免费无遮挡动漫网站 | 久爱综合 | 99精品欧美一区二区蜜桃免费 | 亚洲天堂在线观看完整版 | 亚洲资源在线观看 | 麻豆免费视频 | 四虎国产精品成人免费4hu | 欧美色插| 最近日本字幕mv免费观看在线 | 国产99视频在线观看 | 在线视频观看国产 | 精品免费一区二区三区 | 97日日碰人人模人人澡分享吧 | 国产专区精品视频 | 四虎最新入口 | 97视频免费在线 | 成人一级视频在线观看 | 亚洲91在线 | 日本大片免费观看在线 | 亚洲韩国一区二区三区 | 天堂av在线网站 | 中文字幕一区二区三区四区久久 | 夜夜躁日日躁狠狠久久av | av免费观看高清 | 波多野结衣亚洲一区二区 | 日本黄色特级片 | 色www免费视频 | 亚洲另类人人澡 | 久久久久国产精品免费网站 | 久久五月天色综合 | 久久久久久久久久久久久影院 | 亚洲午夜久久久久久久久久久 | 美女在线观看网站 | 亚洲另类视频在线观看 | 国产精品va视频 | 日本高清久久久 | 国产美女免费观看 | 久久超| 久久国产精品免费看 | 色多多视频在线观看 | 国产伦精品一区二区三区在线 | 国产999精品久久久久久 | 91精品综合在线观看 | 五月天久久| 久久精品久久久久电影 | 国产黄色精品视频 | 亚洲精品乱码久久久久久按摩 | av高清一区二区三区 | 成人毛片在线观看 | 亚洲国产精品久久久久 | 免费黄色网止 | 日本中文字幕影院 | 黄色三级久久 | 久久久国产精品麻豆 | 精品国产乱码久久久久久久 | 人人爽人人爽 | 欧美 日韩 久久 | 久久久穴 | 久久视了| 狠狠色丁香久久婷婷综合_中 | 9999精品免费视频 | 三级黄色三级 | 亚洲欧洲中文日韩久久av乱码 | 国产成人一区二区三区影院在线 | 伊人亚洲精品 | 亚洲jizzjizz日本少妇 | 国产女v资源在线观看 | 日日爱网站 | 欧美日在线观看 | 日韩av黄 | 午夜精品久久久久久久99水蜜桃 | 亚洲另类久久 | 在线成人小视频 | 免费观看mv大片高清 | 808电影| 国产拍揄自揄精品视频麻豆 | 五月天色综合 | 亚洲国产高清在线观看视频 | 国产黄色片网站 | 四虎在线永久免费观看 | 黄色片毛片 | 日韩av高清 | 草草草影院 | 亚洲aⅴ在线观看 | 国产又粗又猛又黄视频 | 欧美一级特黄aaaaaa大片在线观看 | 人人射人人射 | 玖操| 91一区在线观看 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 在线观看视频你懂 | 国产免费又黄又爽 | 欧美性天天 | 国产日韩欧美视频在线观看 | 欧美久久久久久久久久久久 | 久久伊人操 | 在线草| 日韩欧美高清在线观看 | 六月色丁 | 欧美一级性生活视频 | 色天天天 | 久久综合精品国产一区二区三区 | av成人动漫在线观看 | 日韩免费在线看 | 三级av网| 免费看黄在线网站 | 久久日韩精品 | 狠狠色丁香久久婷婷综 | 人人要人人澡人人爽人人dvd | 国产成人三级在线观看 | 制服丝袜天堂 | 国产夫妻自拍av | 天天躁日日躁狠狠躁av中文 | aaa亚洲精品一二三区 | 999毛片 | 中文字幕资源在线 | 久久视频精品在线观看 | 国产精品视频久久久 | 国产伦理久久精品久久久久_ | 中文字幕视频在线播放 | 欧美国产视频在线 | 91成人在线看| www激情网| 久久天天躁夜夜躁狠狠躁2022 | 狠狠操狠狠干2017 | 99免费精品 | 最新av网址在线 | 特级西西444www大精品视频免费看 | 97超碰人人网| av一级免费 | 国产精品九九九 | 91香蕉嫩草 | 不卡中文字幕在线 | 2021国产视频 | 韩日av在线| 日本久久久久久久久久久 | 美女网站黄在线观看 | 麻豆传媒电影在线观看 | 亚洲电影免费 | 国产福利一区二区三区视频 | 2021国产精品 | 天天综合色网 | 992tv在线成人免费观看 | 激情av在线播放 | 激情欧美一区二区三区 | 久久影院精品 | 久久久黄色免费网站 | 成人免费观看完整版电影 | 美女网站在线播放 | 久久精品艹 | 免费成人在线电影 | 日韩色一区二区三区 | 91av视频在线免费观看 | 91亚洲国产 | av中文在线 | 999视频在线播放 | av福利网址导航 | 黄色aa久久 | 色婷婷成人网 | 热久久视久久精品18亚洲精品 | 狠狠88综合久久久久综合网 | 久久国内免费视频 | 日韩激情视频在线 | 九九久久久久99精品 | 亚洲成人精品在线观看 | 三级av在线播放 | 97在线视 | 黄污网站在线 | 日本精品一区二区 | 亚洲精品黄色 | 国产自在线观看 | 中文字幕日本特黄aa毛片 | 久久成人国产精品 | 久久精品亚洲国产 | 久久av黄色| 夜夜躁狠狠燥 | 五月婷婷av在线 | 中国一区二区视频 | 成人资源在线 | 久草在线视频首页 | 日韩精选在线观看 | 91麻豆精品国产91久久久使用方法 | 欧美精品一区二区三区一线天视频 | 日韩欧美在线观看一区二区 | 91在线91 | 日韩精品国产一区 | 免费亚洲片 | 国内久久久久久 | 中文字幕在线观看完整版 | 国产精品色视频 | 456免费视频 | 97超碰精品 | 蜜桃视频在线观看一区 | 丁香花五月 | 日韩视频中文 | av丝袜天堂 | 久久1电影院 | 中文字幕中文字幕在线中文字幕三区 | 国产91精品看黄网站 | 国产视频一区在线播放 | 91精品久久久久久综合乱菊 | 国产一区二区久久久 | 欧美男同网站 | 国产精成人品免费观看 | 日韩三级成人 | 亚洲资源网 | 亚洲爱av | 国产麻豆精品在线观看 | 成人h动漫精品一区二 | 久久久久综合视频 | 天天草天天干天天 | 日韩精品中文字幕有码 | 中文字幕色网站 | av免费网站在线观看 | 日韩激情第一页 | 国产香蕉视频 | 欧美日在线 | 91av手机在线观看 | 日日爽夜夜爽 | 在线观看中文字幕第一页 | 日韩激情片在线观看 | 色综合天天视频在线观看 | 韩日精品中文字幕 | 日本精品视频在线播放 | 久久久久国产精品午夜一区 | 国产一级做a爱片久久毛片a | 国产精品正在播放 | 超碰在线人人爱 | 国产精品色 | 久艹视频在线免费观看 | 91大神免费视频 | 国产精品三级视频 | 欧美夫妻生活视频 | 少妇激情久久 | 久久99精品国产99久久6尤 | 丁香综合激情 | 97**国产露脸精品国产 | 免费视频 三区 | a级免费观看 | 日韩av电影网站在线观看 | 免费成人结看片 | 在线免费亚洲 | 在线观看精品一区 | 成人av一区二区三区 | 成人理论电影 | 日本一区二区不卡高清 | 久久激情五月激情 | 久久精品视频网址 | 国产精品久久久久久久久久久免费 | 91av手机在线观看 | 久久精品一区二区三区中文字幕 | 一区二区 不卡 | 人人爽爽人人 | 免费看色的网站 | 久久久久女教师免费一区 | 国产精品99久久久久 | 九色91在线 | 日韩a在线| 青青久草在线 | 久久五月天综合 | 国产精品免费久久久久 | 亚洲黄色app | 91成人在线视频 | 色婷婷av一区二 | 国产高清成人 | 欧美日韩亚洲在线观看 | 九九免费观看全部免费视频 | 天天干夜夜擦 | 97超碰人| 久久免费一 | 色综合综合 | 在线视频 日韩 | 国产91精品一区二区绿帽 | 在线免费黄色av | 99久久精品无免国产免费 | 亚洲美女免费精品视频在线观看 | 日韩午夜一级片 | 精品视频在线看 | 97免费 | 免费看三级 | www.亚洲黄色 | 97精品在线观看 | 日韩a在线| 欧美午夜精品久久久久 | 亚洲成人高清在线 | 人人爱天天操 | 国产精品激情偷乱一区二区∴ | 中文在线字幕免费观看 | 韩国av一区 | 亚洲爱爱视频 | 欧美色图亚洲图片 | 99r在线| 一级性视频 | 欧美另类色图 | 久久视频中文字幕 | 亚洲精品在线观看网站 | 国产成人av一区二区三区在线观看 | 永久中文字幕 | 美女免费视频一区 | 色播99 | 国产剧情一区二区 | 久久色视频| 国产精品国产三级国产aⅴ9色 | 免费在线色视频 | 中文字幕精品一区久久久久 | 国产精品久久久久久久久久久不卡 | www91在线 | 日韩动态视频 | 99久久综合狠狠综合久久 | 免费av网站在线看 | 成年人视频在线免费观看 | 精品久久久久久亚洲综合网站 | 日韩中文在线电影 | 五月亚洲综合 | 免费看精品久久片 | 国产成人精品久久亚洲高清不卡 | 黄色亚洲精品 | 狠狠激情中文字幕 | 国产高清福利在线 | 久久久久国产精品午夜一区 | 久艹在线观看视频 | 美女网站视频久久 | av在线播放快速免费阴 | 色夜视频| 午夜精品久久久久久 | 日韩精品免费在线观看 | 久草五月 | 日韩在线免费电影 | 久久婷婷一区二区三区 | av中文字幕网 | 天堂va在线高清一区 | 在线视频你懂得 | 在线之家免费在线观看电影 | 免费观看一级成人毛片 | 国产精品永久免费视频 | 日韩精品免费 | 精品国产色 | 又黄又爽又色无遮挡免费 | 国产精品免费久久久久影院仙踪林 | 免费v片| www.777奇米 | 又大又硬又黄又爽视频在线观看 | 免费成人看片 | 99 精品 在线 | 中文国产成人精品久久一 | 一级免费黄视频 | 在线视频 一区二区 | 亚洲精品 在线视频 | 国产精品嫩草影院9 | 一区二区不卡视频在线观看 | 国内99视频 | 国产一区电影在线观看 | 99精品成人 | 99久久er热在这里只有精品15 | 91视频在线自拍 | 免费在线视频一区二区 | 色综合天天视频在线观看 | 欧美日韩中文在线视频 | 久久久久久国产精品999 | 午夜久久久久久久久 | 日本中文字幕影院 | 中文字幕一区二区三区乱码在线 | 亚洲永久精品视频 | 亚洲国内精品 | 国产精品久久久一区二区三区网站 | 69精品人人人人 | 国产精品免费一区二区 | 日韩欧美在线中文字幕 | 婷婷丁香花 | 亚洲va欧洲va国产va不卡 | 中文字幕国产在线 | 色香蕉在线| 九九九九热精品免费视频点播观看 | 五月天综合在线 | 激情五月婷婷综合 | 高潮久久久久久久久 | 日韩特黄一级欧美毛片特黄 | 超碰在线公开免费 | 日韩免费看的电影 | 久久免费视屏 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 波多野结衣在线观看一区二区三区 | 中国一级片在线观看 | 狠狠色噜噜狠狠狠狠 | 免费视频在线观看网站 | 亚洲一级特黄 | 亚洲一区二区视频 | 免费看片网页 | 精品一区二区在线免费观看 | 亚洲精品午夜久久久久久久 | 亚洲国产午夜 | 成人h电影在线观看 | 最新影院 | 免费网站观看www在线观看 | 91看国产| 97成人精品视频在线观看 | 97成人精品区在线播放 | 五月天中文在线 | 亚洲精品福利在线 | 中文字幕日韩伦理 | 中文字幕在线看 | 丝袜美腿亚洲 | 中文字幕在线观看免费观看 | 亚洲欧美国内爽妇网 | 精品美女国产在线 | 久久久久久99精品 | 99久久超碰中文字幕伊人 | 天天干夜夜想 | 91视频午夜| 国产97av| 天天想夜夜操 | 精品成人免费 | 456免费视频 | 日本中文字幕在线 | 成人av免费电影 | 热99在线视频| 成人免费大片黄在线播放 | 日韩高清在线一区二区三区 | 四虎国产精品免费观看视频优播 | 久久精品国产免费看久久精品 | 久久视频这里有久久精品视频11 | 精品国产一区二区三区久久影院 | 亚洲综合视频在线播放 | 日本中文字幕网 | 在线观看免费av片 | 丁香婷婷激情网 | 91久久一区二区 | 九九热免费观看 | 国产破处在线播放 | 国内精品久久久久久中文字幕 | 网站免费黄| 久久久久久久久久久久久久电影 | 日日碰狠狠添天天爽超碰97久久 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 国产经典 欧美精品 | 免费观看成年人视频 | 在线观看视频免费大全 | 伊人电影天堂 | 伊人久久电影网 | 日韩一区二区免费播放 | 女人18毛片a级毛片一区二区 | 国产在线2020 | 91看片在线免费观看 | 成年人免费在线观看网站 | 国产五月色婷婷六月丁香视频 | 狠狠色丁香婷婷综合视频 | 99视频在线免费播放 | 337p欧美 | 欧美日韩国产页 | www.国产视频 | 久久免费在线 | 免费中文字幕在线观看 | 69精品视频在线观看 | 欧美a级一区二区 | 国产精品成人av在线 | 亚洲精品动漫久久久久 | 最新av网址在线观看 | 成人亚洲免费 | 国产一区二区免费在线观看 | 丁香花在线视频观看免费 | 97色在线视频 | 色婷婷久久久综合中文字幕 | 麻豆91精品 | 亚洲成a人片在线观看网站口工 | 国产精品乱码一区二三区 | 国产日产精品一区二区三区四区的观看方式 | 欧美美女激情18p | 免费在线观看亚洲视频 | 一级黄色免费网站 | 在线免费黄色毛片 | 91麻豆精品国产自产在线游戏 | 91麻豆福利 | 免费男女羞羞的视频网站中文字幕 | 亚洲丝袜中文 | 久久国语露脸国产精品电影 | 国产精品久久久久久久久久免费看 | 五月天久久婷 | 日本三级久久久 | 日韩av片无码一区二区不卡电影 | 日韩欧美视频在线播放 | 久久久国产精品电影 | 久久精品视频在线观看免费 | 久久国产精品色婷婷 | av天天干 | 91精品区| 日韩欧美精品一区二区三区经典 | 四虎成人免费观看 | 久久久精品国产一区二区三区 | 91九色视频导航 | 毛片1000部免费看 | 婷婷久久一区二区三区 | 精品国产一区二区三区在线 | 日韩欧美高清免费 | 国产成人精品一区二区三区福利 | 中文字幕在线观看91 | 亚洲天堂网视频在线观看 | 天天干天天天天 | 亚洲精品玖玖玖av在线看 | 97超碰人人澡人人爱 | 欧美一区二区日韩一区二区 | 国产精品2018| 免费观看全黄做爰大片国产 | 成人在线免费看视频 | av不卡免费在线观看 | 亚洲精品在线免费播放 | 西西人体4444www高清视频 | 97在线免费视频 | 伊人网综合在线观看 | 国产一区免费看 | 日本高清中文字幕有码在线 | 久久视频国产精品免费视频在线 | 欧美日产在线观看 | 香蕉视频在线免费 | 亚洲国产电影在线观看 | 波多野结衣资源 | 国产精品 视频 | 欧美日韩国产在线精品 | 91自拍视频在线 | 久久免费精品 | 国产精品 视频 | 欧美日韩大片在线观看 | 国产黄色精品视频 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 99精品系列 | 伊人久久在线观看 | 91精品国产一区 | 不卡的av在线播放 | 伊人春色电影网 | 久久久久福利视频 | 波多野结衣网址 | av在线网站免费观看 | 国产精品www | 成人久久精品 | 九九99靖品 | 在线观看视频一区二区三区 | 一区二区三区在线看 | 国产成人久久av977小说 | 亚洲最大成人免费网站 | 亚洲91精品在线观看 | 久久激情久久 | 日韩综合第一页 | 综合在线亚洲 | 99婷婷狠狠成为人免费视频 | 99久久精品免费看国产四区 | 日日弄天天弄美女bbbb | 欧美性久久久久久 | 亚洲精品在线国产 | 97理论片| 国产美女网 | 日韩欧美国产激情在线播放 | 欧美一级免费黄色片 | 黄色影院在线免费观看 | 九九免费在线观看视频 | 黄色av免费看 | 久久视频国产精品免费视频在线 | 国产福利一区二区在线 | 色婷婷啪啪免费在线电影观看 | 天天操夜夜做 | 国产在线视频一区二区三区 | 91精品免费在线观看 | 国产精品久久久久久久久久久久 | 中文字幕日本在线 | 看av免费 | 日韩欧美黄色网址 | 久久午夜电影 | 国产a视频免费观看 | 日日爱网址 | 午夜性盈盈 | 亚洲天堂网站 | 视频在线91 | 国产一区二区三区高清播放 | 激情网五月 | 亚洲精品国产精品乱码在线观看 | 午夜精品一区二区三区四区 | 激情一区二区三区欧美 | 欧美人体xx | 国产精品久久久久久久久久久久午夜 | 亚洲国产精彩中文乱码av | 欧美狠狠操 | 特级西西人体444是什么意思 | 99久久婷婷国产精品综合 | 天天摸天天操天天舔 | 午夜精品久久久久久久爽 | 在线观看亚洲精品视频 | 国产成年人av | 天天摸日日摸人人看 | 91在线蜜桃臀 | 色网址99 | 最近日本字幕mv免费观看在线 | 久久久91精品国产一区二区三区 | 中文在线a天堂 | 中文在线资源 | 日本精油按摩3 | 五月网婷婷 | 久久刺激视频 | 天堂视频中文在线 | 久久精品在线视频 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 69久久久久久久 | 91福利影院在线观看 | 91成人在线观看高潮 | 超碰在线公开免费 | 亚洲一级片在线看 | 在线电影av | 美女在线免费观看视频 | 亚洲免费在线 | 亚洲精品理论片 | 五月天精品视频 | av在线精品| 成人影音在线 | 免费在线观看不卡av | 久久污视频| 丁香六月婷婷综合 | 三级av中文字幕 | 成人午夜av电影 | 亚洲自拍av在线 | 亚洲视频 在线观看 | 色噜噜在线观看 | 日韩在线高清免费视频 | 色噜噜在线观看 | www.久热| 国产精品网在线观看 | 亚洲人成网站精品片在线观看 | 国产成人一二片 | 色a4yy| 91色亚洲| 在线视频电影 | 国产精品一区免费观看 | 国产a国产a国产a | 97在线免费| 中文字幕免费高清在线 | 极品中文字幕 | 成人精品一区二区三区中文字幕 | 探花视频免费观看高清视频 | 精品久久久一区二区 | 在线亚洲高清视频 | 国产一区高清在线 | 亚洲精品字幕在线 | 天天伊人狠狠 | 国产剧情一区二区在线观看 | 久久精品国产第一区二区三区 | free. 性欧美.com | 色视频网站在线观看一=区 a视频免费在线观看 | 日本在线精品视频 | 国产精品毛片完整版 | 免费看一级 | 在线成人免费av | 日日夜夜人人天天 | 亚洲成人黄色在线 | 国产一级电影 | 狠狠狠狠狠狠 | 欧美在线视频免费 | 玖草在线观看 | 日韩av一区二区在线 | a级国产片 | 久久久久久久久久网 | 一级特黄aaa大片在线观看 | 中文字幕在线观看视频一区二区三区 | 在线视频1卡二卡三卡 | 日韩视频一区二区在线观看 | 美女精品在线 | www免费视频com━ | av在线观 | 日日操天天爽 | 国产高清亚洲 | 欧美日韩在线精品一区二区 | 国产精品一区二区免费看 | 九九九热精品免费视频观看网站 | 国产一区二区久久久久 | 免费看的黄色录像 | 中国一级特黄毛片大片久久 | 亚洲手机天堂 | 在线观看免费黄视频 | 久久国产麻豆 | 日韩动态视频 | 欧美一级艳片视频免费观看 | 91视频专区 | 狠狠色香婷婷久久亚洲精品 | 天天干天天插伊人网 | 免费观看黄| 97超在线 | 夜色成人av | 韩国av免费在线观看 | 玖玖色在线观看 | 日本中文字幕久久 | 日日摸日日碰 | 久久人人爽人人片 | 一区二区三区在线不卡 | 免费成人黄色片 | 午夜性生活 | 婷婷亚洲综合五月天小说 | 久久99九九99精品 | 中中文字幕av | 国产成人久久av免费高清密臂 | 99精品成人 | 日日干夜夜操视频 | 又黄又刺激视频 | 9999国产精品| 精品久久久久久久久久久久久久久久 | 久久国产a | 黄色软件在线观看免费 | 久久精品波多野结衣 | 国产精品videoxxxx | 国产视频精品久久 | 久久久网 | 麻豆94tv免费版 | 精品v亚洲v欧美v高清v | 天天干天天操天天干 | 精品99久久久久久 | 亚洲 在线 | 天天摸夜夜操 | 香蕉视频在线免费 | 天天综合在线观看 | 国产成人在线精品 | 亚洲永久精品在线 | 丁香国产视频 | 天天综合色天天综合 | 国产黄色一级片在线 | 免费在线观看国产精品 | 手机成人av | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 国产精品久久久久久五月尺 | 波多野结衣在线视频免费观看 | 欧美激情xxxx | 婷婷激情5月天 | 久久人91精品久久久久久不卡 | 国产一区二区在线看 | 国产精品不卡在线播放 | 天堂av网在线 | 久草在线一免费新视频 | 黄色毛片视频 | 免费福利在线 | www.xxx.性狂虐| 五月天中文字幕 | 国产精品二区在线 | 91片黄在线观看 | 色综合天天狠天天透天天伊人 | www.av在线.com| 九九在线视频免费观看 | 亚洲乱码一区 | 国产精品麻豆果冻传媒在线播放 | 丁香av | 99精品视频一区二区 | 国产视频日韩视频欧美视频 | 国产98色在线 | 日韩 | 日韩高清不卡一区二区三区 | 亚洲天堂精品视频 | 国产精品久久久久av免费 | 99精品国产免费久久 | 麻豆一精品传二传媒短视频 | 日韩中文字幕免费在线观看 | 国产69久久精品成人看 | 亚洲九九影院 | 韩日精品在线 | 麻豆91网站| 久艹在线播放 | 在线观看免费一区 | 国产精品女同一区二区三区久久夜 | 美女禁18| 97网在线观看 | 精品久久久一区二区 | 99九九99九九九视频精品 | 在线看片视频 | 中文字幕在线观看网 | 久久在线视频在线 | 久久99最新地址 | 亚洲精品在线观看免费 | 在线精品视频在线观看高清 | 欧美性色黄 | 97操碰| 国产精品综合久久久 | 日韩影片在线观看 | 操操色 | av资源免费观看 | 国产福利一区在线观看 | 亚洲精品视频免费在线 | 成人黄色电影在线播放 | 波多野结衣视频一区 | 久久大片| 日韩在线免费高清视频 | 超碰人人国产 | 欧美一级爽 | a视频在线看 | 国产精品av免费观看 | 久久久精品电影 | 亚洲综合欧美精品电影 | 不卡的av在线 | 啪啪免费观看网站 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 亚洲在线视频观看 | 99精品视频在线 | 亚洲天堂网在线观看视频 | 婷婷色网站 | 久草免费福利在线观看 | 丁香五婷 | 免费av网址在线观看 | 日韩欧美一区二区不卡 | 91亚洲精品久久久久图片蜜桃 | 手机看片 | 91在线视频观看免费 | 青草视频网 | 中文字幕在线观看资源 | 在线观看韩日电影免费 | 久久亚洲电影 | 亚洲天堂网站视频 | 午夜视频免费在线观看 | 久久y | 深爱婷婷 | 免费视频三区 | 91精品国产自产在线观看永久 | 国产二区av | 91精品一区二区三区蜜臀 | 免费成人黄色 | 欧美日韩国产欧美 | 91麻豆免费看| 日韩伦理片一区二区三区 | 国产精品免费视频久久久 | 久久久久女教师免费一区 | 国产亚洲精品久久久久久久久久 | 亚洲综合在线发布 | 日韩簧片在线观看 | 午夜视频在线观看一区二区 | 亚洲成人影音 | 日韩欧美高清免费 | 日韩欧美aaa | 亚洲人成人天堂h久久 | 日本久久视频 | 国产三级视频在线 | 91av原创 | 国产91在线观| 99久久99久国产黄毛片 | 国内精品视频一区二区三区八戒 | 国产98色在线 | 日韩 | 日韩在线免费看 | 免费看成年人 | 日韩视频在线不卡 | 久久久久成 | 久草com| 91大片成人网 | 亚洲专区路线二 | 天天色天天射天天综合网 | 婷婷精品在线 | 国产传媒一区在线 | 亚洲精品乱码久久久久久写真 | 成人精品福利 | 婷婷伊人网| 国产亚洲精品久久19p | 久久国产精品电影 | 国产精品久久久久永久免费 | 欧美成人按摩 | 欧美久久久久久久久 | 99热这里有精品 | 成人免费在线视频 | 麻豆 videos | 日韩在线一级 | 三级黄色网址 | 国产在线观看a | 99热这里只有精品免费 | 黄色三级网站 | 在线不卡视频 | 国产美腿白丝袜足在线av | 国产精品久久久久av福利动漫 | 亚洲最新av在线网址 | 国产分类视频 | 日韩免费观看高清 | 亚洲精品视频在线观看免费视频 | 97天天综合网 | 在线探花 | 久久草草热国产精品直播 | 亚洲经典精品 | 成人国产精品久久久久久亚洲 | 99久久久久久久 | 成人黄色在线 | 成人网中文字幕 | 免费亚洲精品视频 | 岛国一区在线 | 五月天六月婷婷 | 久插视频 | 美女视频黄色免费 | 婷婷亚洲五月 | 欧美大片www| 亚洲欧美在线视频免费 | 一区二区精品在线 | 正在播放一区 | 日韩av中文在线观看 | 亚洲国产欧美在线人成大黄瓜 | 午夜免费在线观看 | 国产成人一区二区三区久久精品 | 欧美成亚洲 | 国产一区在线播放 | 国产黄免费 | 免费在线观看a v | 免费在线一区二区 | 最近中文字幕免费大全 | 天天操天天操天天操天天 | 中文字幕一区二 | 国产精品videossex国产高清 | 高清av免费看 | 亚洲另类交| 精品美女久久久久 | 色综合久久88色综合天天 | 久久久免费网站 | 午夜精品麻豆 | 日韩美精品视频 | 九九热在线精品视频 | 日韩91av | 精品人妖videos欧美人妖 | 国产精品久久久久av福利动漫 | 久久看免费视频 | 欧美男同网站 | 亚洲在线激情 | 国产黄色片网站 | 久艹在线观看视频 | 最新中文字幕视频 | 亚洲国产精品久久久久 | 精品在线一区二区三区 | 西西人体www444 | 精品视频资源站 | 国产日韩欧美在线影视 | 中文字幕影片免费在线观看 | 一区二区三区四区在线 | 五月激情六月丁香 | 国产高清视频在线观看 | 狠狠做深爱婷婷综合一区 | 免费黄色在线网址 | 日日夜夜天天 | 中文字幕亚洲国产 | 久久午夜电影网 | 日日日日日| 成人网看片 | 日韩在线电影一区二区 | 久久avav| 国产色在线| 欧美在线不卡一区 | 欧美成人在线网站 | 国产精品国产亚洲精品看不卡15 | 欧美在线视频第一页 | 天天综合网国产 | 亚洲综合成人专区片 | 天天色天天色天天色 | 98精品国产自产在线观看 | 欧美精品在线一区二区 | 香蕉视频国产在线观看 | 激情伊人五月天久久综合 | 久久久久黄色 | 亚洲免费精品视频 | 久久九九网站 | 西西4444www大胆艺术 | 91片黄在线观看动漫 | 免费看片网址 | 97国产在线视频 | 有码中文字幕在线观看 | 一本色道久久综合亚洲二区三区 | 国产人成在线观看 | 日本爱爱片 | 亚洲女同ⅹxx女同tv | 色综合天天色综合 | 久久视频在线观看免费 | 最近日本中文字幕 | 欧美日韩免费视频 | 玖玖在线视频观看 | av电影免费在线播放 | 最新av免费在线观看 | 国产视频色| 超碰资源在线 | 黄色一级大片在线观看 | 中文在线字幕免费观 | 91丨九色丨首页 | 伊人久久电影网 | 久久久久久久99 | 久色免费视频 | 在线精品观看国产 | 亚洲精品在线观看网站 | www.夜色.com | 在线看片视频 | 国产精品1区2区3区在线观看 | 免费看的黄网站软件 | 亚洲涩综合 | 九色精品在线 | 99热在| 欧美,日韩|