成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > 通用MapReduce程序復(fù)制HBase表數(shù)據(jù)

通用MapReduce程序復(fù)制HBase表數(shù)據(jù)

熱門標(biāo)簽:內(nèi)蒙古營銷智能外呼系統(tǒng)哪個(gè)好 智能外呼系統(tǒng)官網(wǎng) 小裙科技電銷機(jī)器人怎樣 青白江400企業(yè)電話申請(qǐng) 呼和浩特外呼系統(tǒng)原理是什么 河南電話外呼系統(tǒng)招商 外呼線路資源屬于電信業(yè)務(wù)嗎 crm外呼系統(tǒng)聯(lián)系方式 長(zhǎng)沙電銷外呼防封卡是什么

編寫MR程序,讓其可以適合大部分的HBase表數(shù)據(jù)導(dǎo)入到HBase表數(shù)據(jù)。其中包括可以設(shè)置版本數(shù)、可以設(shè)置輸入表的列導(dǎo)入設(shè)置(選取其中某幾列)、可以設(shè)置輸出表的列導(dǎo)出設(shè)置(選取其中某幾列)。

原始表test1數(shù)據(jù)如下:

每個(gè)row key都有兩個(gè)版本的數(shù)據(jù),這里只顯示了row key為1的數(shù)據(jù)

 在hbase shell 中創(chuàng)建數(shù)據(jù)表:

create 'test2',{NAME => 'cf1',VERSIONS => 10}  // 保存無版本、無列導(dǎo)入設(shè)置、無列導(dǎo)出設(shè)置的數(shù)據(jù)
create 'test3',{NAME => 'cf1',VERSIONS => 10}  // 保存無版本、無列導(dǎo)入設(shè)置、有列導(dǎo)出設(shè)置的數(shù)據(jù)
create 'test4',{NAME => 'cf1',VERSIONS => 10}  // 保存無版本、有列導(dǎo)入設(shè)置、無列導(dǎo)出設(shè)置的數(shù)據(jù)
create 'test5',{NAME => 'cf1',VERSIONS => 10}  // 保存有版本、無列導(dǎo)入設(shè)置、無列導(dǎo)出設(shè)置的數(shù)據(jù)
create 'test6',{NAME => 'cf1',VERSIONS => 10}  // 保存有版本、無列導(dǎo)入設(shè)置、有列導(dǎo)出設(shè)置的數(shù)據(jù)
create 'test7',{NAME => 'cf1',VERSIONS => 10}  // 保存有版本、有列導(dǎo)入設(shè)置、無列導(dǎo)出設(shè)置的數(shù)據(jù)
create 'test8',{NAME => 'cf1',VERSIONS => 10}  // 保存有版本、有列導(dǎo)入設(shè)置、有列導(dǎo)出設(shè)置的數(shù)據(jù)

main函數(shù)入口:

package GeneralHBaseToHBase;
import org.apache.hadoop.util.ToolRunner;
public class DriverTest {
 public static void main(String[] args) throws Exception {
 // 無版本設(shè)置、無列導(dǎo)入設(shè)置,無列導(dǎo)出設(shè)置
 String[] myArgs1= new String[]{
 "test1", // 輸入表
 "test2", // 輸出表
 "0",  // 版本大小數(shù),如果值為0,則為默認(rèn)從輸入表導(dǎo)出最新的數(shù)據(jù)到輸出表
 "-1", // 列導(dǎo)入設(shè)置,如果為-1 ,則沒有設(shè)置列導(dǎo)入
 "-1" // 列導(dǎo)出設(shè)置,如果為-1,則沒有設(shè)置列導(dǎo)出
 }; 
 ToolRunner.run(HBaseDriver.getConfiguration(), 
 new HBaseDriver(),
 myArgs1);
 // 無版本設(shè)置、有列導(dǎo)入設(shè)置,無列導(dǎo)出設(shè)置
 String[] myArgs2= new String[]{
 "test1",
 "test3",
 "0",
 "cf1:c1,cf1:c2,cf1:c10,cf1:c11,cf1:c14",
 "-1"
 };
 ToolRunner.run(HBaseDriver.getConfiguration(), 
 new HBaseDriver(),
 myArgs2);
 // 無版本設(shè)置,無列導(dǎo)入設(shè)置,有列導(dǎo)出設(shè)置
 String[] myArgs3= new String[]{
 "test1",
 "test4",
 "0",
 "-1",
 "cf1:c1,cf1:c10,cf1:c14"
 };
 ToolRunner.run(HBaseDriver.getConfiguration(), 
 new HBaseDriver(),
 myArgs3);
 // 有版本設(shè)置,無列導(dǎo)入設(shè)置,無列導(dǎo)出設(shè)置
 String[] myArgs4= new String[]{
 "test1",
 "test5",
 "2",
 "-1",
 "-1"
 };
 ToolRunner.run(HBaseDriver.getConfiguration(), 
 new HBaseDriver(),
 myArgs4);
 // 有版本設(shè)置、有列導(dǎo)入設(shè)置,無列導(dǎo)出設(shè)置
 String[] myArgs5= new String[]{
 "test1",
 "test6",
 "2",
 "cf1:c1,cf1:c2,cf1:c10,cf1:c11,cf1:c14",
 "-1"
 };
 ToolRunner.run(HBaseDriver.getConfiguration(), 
 new HBaseDriver(),
 myArgs5);
 
 // 有版本設(shè)置、無列導(dǎo)入設(shè)置,有列導(dǎo)出設(shè)置
 String[] myArgs6= new String[]{
 "test1",
 "test7",
 "2",
 "-1",
 "cf1:c1,cf1:c10,cf1:c14"
 };
 ToolRunner.run(HBaseDriver.getConfiguration(), 
 new HBaseDriver(),
 myArgs6);
 // 有版本設(shè)置、有列導(dǎo)入設(shè)置,有列導(dǎo)出設(shè)置
 String[] myArgs7= new String[]{
 "test1",
 "test8",
 "2",
 "cf1:c1,cf1:c2,cf1:c10,cf1:c11,cf1:c14",
 "cf1:c1,cf1:c10,cf1:c14"
 };
 ToolRunner.run(HBaseDriver.getConfiguration(), 
 new HBaseDriver(),
 myArgs7);
 }
 
}

driver:

package GeneralHBaseToHBase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import util.JarUtil;
 
 
public class HBaseDriver extends Configured implements Tool{
 public static String FROMTABLE=""; //導(dǎo)入表
 public static String TOTABLE=""; //導(dǎo)出表
 public static String SETVERSION=""; //是否設(shè)置版本
 // args => {FromTable,ToTable,SetVersion,ColumnFromTable,ColumnToTable}
 @Override
 public int run(String[] args) throws Exception {
 if(args.length!=5){
 System.err.println("Usage:\n demo.job.HBaseDriver input> inputTable> "
  + "output> outputTable>"
  +" versions >"
  + " set columns from inputTable> like cf1:c1,cf1:c2,cf1:c10,cf1:c11,cf1:c14> or -1> "
  + "set columns from outputTable> like cf1:c1,cf1:c10,cf1:c14> or -1>");
 return -1;
 }
 Configuration conf = getConf();
 FROMTABLE = args[0];
 TOTABLE = args[1];
 SETVERSION = args[2];
 conf.set("SETVERSION", SETVERSION);
 if(!args[3].equals("-1")){
 conf.set("COLUMNFROMTABLE", args[3]);
 }
 if(!args[4].equals("-1")){
 conf.set("COLUMNTOTABLE", args[4]);
 }
 String jobName ="From table "+FROMTABLE+ " ,Import to "+ TOTABLE;
 Job job = Job.getInstance(conf, jobName);
 job.setJarByClass(HBaseDriver.class);
 Scan scan = new Scan();
 // 判斷是否需要設(shè)置版本
 if(SETVERSION != "0" || SETVERSION != "1"){
 scan.setMaxVersions(Integer.parseInt(SETVERSION));
 }
 // 設(shè)置HBase表輸入:表名、scan、Mapper類、mapper輸出鍵類型、mapper輸出值類型
 TableMapReduceUtil.initTableMapperJob(
 FROMTABLE, 
 scan, 
 HBaseToHBaseMapper.class, 
 ImmutableBytesWritable.class, 
 Put.class, 
 job);
 // 設(shè)置HBase表輸出:表名,reducer類
 TableMapReduceUtil.initTableReducerJob(TOTABLE, null, job);
 // 沒有 reducers, 直接寫入到 輸出文件
  job.setNumReduceTasks(0);
 
  return job.waitForCompletion(true) ? 0 : 1;
  
 }
 private static Configuration configuration;
 public static Configuration getConfiguration(){
 if(configuration==null){
 /**
 * TODO 了解如何直接從Windows提交代碼到Hadoop集群
 *  并修改其中的配置為實(shí)際配置
 */
 configuration = new Configuration();
 configuration.setBoolean("mapreduce.app-submission.cross-platform", true);// 配置使用跨平臺(tái)提交任務(wù)
 configuration.set("fs.defaultFS", "hdfs://master:8020");// 指定namenode
 configuration.set("mapreduce.framework.name", "yarn"); // 指定使用yarn框架
 configuration.set("yarn.resourcemanager.address", "master:8032"); // 指定resourcemanager
 configuration.set("yarn.resourcemanager.scheduler.address", "master:8030");// 指定資源分配器
 configuration.set("mapreduce.jobhistory.address", "master:10020");// 指定historyserver
 configuration.set("hbase.master", "master:16000");
 configuration.set("hbase.rootdir", "hdfs://master:8020/hbase");
 configuration.set("hbase.zookeeper.quorum", "slave1,slave2,slave3");
 configuration.set("hbase.zookeeper.property.clientPort", "2181");
 //TODO 需export->jar file ; 設(shè)置正確的jar包所在位置
 configuration.set("mapreduce.job.jar",JarUtil.jar(HBaseDriver.class));// 設(shè)置jar包路徑
 }
 
 return configuration;
 }
 
 
}

mapper:

package GeneralHBaseToHBase;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map.Entry;
import java.util.NavigableMap;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.util.Bytes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HBaseToHBaseMapper extends TableMapperImmutableBytesWritable, Put> {
 Logger log = LoggerFactory.getLogger(HBaseToHBaseMapper.class);
 private static int versionNum = 0;
 private static String[] columnFromTable = null;
 private static String[] columnToTable = null;
 private static String column1 = null;
 private static String column2 = null;
 @Override
 protected void setup(Context context)
 throws IOException, InterruptedException {
 Configuration conf = context.getConfiguration();
 versionNum = Integer.parseInt(conf.get("SETVERSION", "0"));
 column1 = conf.get("COLUMNFROMTABLE",null);
 if(!(column1 == null)){
 columnFromTable = column1.split(",");
 }
 column2 = conf.get("COLUMNTOTABLE",null); 
 if(!(column2 == null)){
 columnToTable = column2.split(",");
 }
 }
 @Override
 protected void map(ImmutableBytesWritable key, Result value,
 Context context)
 throws IOException, InterruptedException {
 context.write(key, resultToPut(key,value));
 } 
 /***
 * 把key,value轉(zhuǎn)換為Put
 * @param key
 * @param value
 * @return
 * @throws IOException
 */
 private Put resultToPut(ImmutableBytesWritable key, Result value) throws IOException {
 HashMapString, String> fTableMap = new HashMap>();
 HashMapString, String> tTableMap = new HashMap>();
 Put put = new Put(key.get());
 if(! (columnFromTable == null || columnFromTable.length == 0)){
 fTableMap = getFamilyAndColumn(columnFromTable);
 }
 if(! (columnToTable == null || columnToTable.length == 0)){
 tTableMap = getFamilyAndColumn(columnToTable);
 }
 if(versionNum==0){      
 if(fTableMap.size() == 0){   
 if(tTableMap.size() == 0){ 
  for (Cell kv : value.rawCells()) {
  put.add(kv); // 沒有設(shè)置版本,沒有設(shè)置列導(dǎo)入,沒有設(shè)置列導(dǎo)出
  }
  return put;
 } else{
  return getPut(put, value, tTableMap); // 無版本、無列導(dǎo)入、有列導(dǎo)出
 }
 } else {
 if(tTableMap.size() == 0){
  return getPut(put, value, fTableMap);// 無版本、有列導(dǎo)入、無列導(dǎo)出
 } else {
  return getPut(put, value, tTableMap);// 無版本、有列導(dǎo)入、有列導(dǎo)出
 }
 }
 } else{
 if(fTableMap.size() == 0){
 if(tTableMap.size() == 0){
  return getPut1(put, value); // 有版本,無列導(dǎo)入,無列導(dǎo)出
 }else{
  return getPut2(put, value, tTableMap); //有版本,無列導(dǎo)入,有列導(dǎo)出
 }
 }else{
 if(tTableMap.size() == 0){
  return getPut2(put,value,fTableMap);// 有版本,有列導(dǎo)入,無列導(dǎo)出
 }else{
  return getPut2(put,value,tTableMap); // 有版本,有列導(dǎo)入,有列導(dǎo)出
 }
 }
 }
 }
 /***
 * 無版本設(shè)置的情況下,對(duì)于有列導(dǎo)入或者列導(dǎo)出
 * @param put
 * @param value
 * @param tableMap
 * @return
 * @throws IOException
 */
 
 private Put getPut(Put put,Result value,HashMapString, String> tableMap) throws IOException{
 for(Cell kv : value.rawCells()){
 byte[] family = kv.getFamily();
 if(tableMap.containsKey(new String(family))){
 String columnStr = tableMap.get(new String(family));
 ArrayListString> columnBy = toByte(columnStr);
 if(columnBy.contains(new String(kv.getQualifier()))){
  put.add(kv); //沒有設(shè)置版本,沒有設(shè)置列導(dǎo)入,有設(shè)置列導(dǎo)出
 }
 }
 }
 return put;
 }
 /***
 * (有版本,無列導(dǎo)入,有列導(dǎo)出)或者(有版本,有列導(dǎo)入,無列導(dǎo)出)
 * @param put
 * @param value
 * @param tTableMap
 * @return
 */
 private Put getPut2(Put put,Result value,HashMapString, String> tableMap){
 NavigableMapbyte[], NavigableMapbyte[], NavigableMapLong, byte[]>>> map=value.getMap();
  for(byte[] family:map.keySet()){
   if(tableMap.containsKey(new String(family))){
   String columnStr = tableMap.get(new String(family));
   log.info("@@@@@@@@@@@"+new String(family)+" "+columnStr);
 ArrayListString> columnBy = toByte(columnStr);
   NavigableMapbyte[], NavigableMapLong, byte[]>> familyMap = map.get(family);//列簇作為key獲取其中的列相關(guān)數(shù)據(jù)
    for(byte[] column:familyMap.keySet()){        //根據(jù)列名循壞
     log.info("!!!!!!!!!!!"+new String(column));
     if(columnBy.contains(new String(column))){
     NavigableMapLong, byte[]> valuesMap = familyMap.get(column);
      for(EntryLong, byte[]> s:valuesMap.entrySet()){//獲取列對(duì)應(yīng)的不同版本數(shù)據(jù),默認(rèn)最新的一個(gè)
      System.out.println("***:"+new String(family)+" "+new String(column)+" "+s.getKey()+" "+new String(s.getValue()));
      put.addColumn(family, column, s.getKey(),s.getValue());
      }
     }
    }
   }
   
  }
 return put; 
 }
 /***
 * 有版本、無列導(dǎo)入、無列導(dǎo)出
 * @param put
 * @param value
 * @return
 */
 private Put getPut1(Put put,Result value){
 NavigableMapbyte[], NavigableMapbyte[], NavigableMapLong, byte[]>>> map=value.getMap();
  for(byte[] family:map.keySet()){ 
   NavigableMapbyte[], NavigableMapLong, byte[]>> familyMap = map.get(family);//列簇作為key獲取其中的列相關(guān)數(shù)據(jù)
   for(byte[] column:familyMap.keySet()){        //根據(jù)列名循壞
    NavigableMapLong, byte[]> valuesMap = familyMap.get(column);
    for(EntryLong, byte[]> s:valuesMap.entrySet()){    //獲取列對(duì)應(yīng)的不同版本數(shù)據(jù),默認(rèn)最新的一個(gè)
     put.addColumn(family, column, s.getKey(),s.getValue());
    }
   }
  }
  return put;
 }
 // str => {"cf1:c1","cf1:c2","cf1:c10","cf1:c11","cf1:c14"}
 /***
 * 得到列簇名與列名的k,v形式的map
 * @param str => {"cf1:c1","cf1:c2","cf1:c10","cf1:c11","cf1:c14"}
 * @return map => {"cf1" => "c1,c2,c10,c11,c14"}
 */
 private static HashMapString, String> getFamilyAndColumn(String[] str){
 HashMapString, String> map = new HashMap>();
 HashSetString> set = new HashSet>();
 for(String s : str){
 set.add(s.split(":")[0]);
 }
 Object[] ob = set.toArray();
 for(int i=0; iob.length;i++){
 String family = String.valueOf(ob[i]);
 String columns = "";
 for(int j=0;j  str.length;j++){
 if(family.equals(str[j].split(":")[0])){
  columns += str[j].split(":")[1]+",";
 }
 }
 map.put(family, columns.substring(0, columns.length()-1));
 }
 return map; 
 }
 
 private static ArrayListString> toByte(String s){
 ArrayListString> b = new ArrayList>();
 String[] sarr = s.split(",");
 for(int i=0;isarr.length;i++){
 b.add(sarr[i]);
 }
 return b;
 }
}

程序運(yùn)行完之后,在hbase shell中查看每個(gè)表,看是否數(shù)據(jù)導(dǎo)入正確:

test2:(無版本、無列導(dǎo)入設(shè)置、無列導(dǎo)出設(shè)置)

test3 (無版本、有列導(dǎo)入設(shè)置("cf1:c1,cf1:c2,cf1:c10,cf1:c11,cf1:c14")、無列導(dǎo)出設(shè)置)

test4(無版本、無列導(dǎo)入設(shè)置、有列導(dǎo)出設(shè)置("cf1:c1,cf1:c10,cf1:c14"))

test5(有版本、無列導(dǎo)入設(shè)置、無列導(dǎo)出設(shè)置)

test6(有版本、有列導(dǎo)入設(shè)置("cf1:c1,cf1:c2,cf1:c10,cf1:c11,cf1:c14")、無列導(dǎo)出設(shè)置)

test7(有版本、無列導(dǎo)入設(shè)置、有列導(dǎo)出設(shè)置("cf1:c1,cf1:c10,cf1:c14"))

test8(有版本、有列導(dǎo)入設(shè)置("cf1:c1,cf1:c2,cf1:c10,cf1:c11,cf1:c14")、有列導(dǎo)出設(shè)置("cf1:c1,cf1:c10,cf1:c14"))

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Javascript面試經(jīng)典套路reduce函數(shù)查重
  • MapReduce核心思想圖文詳解
  • shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析
  • Array數(shù)組對(duì)象中的forEach、map、filter及reduce詳析
  • 對(duì)tf.reduce_sum tensorflow維度上的操作詳解
  • js數(shù)組方法reduce經(jīng)典用法代碼分享
  • MongoDB中MapReduce的使用方法詳解
  • Java/Web調(diào)用Hadoop進(jìn)行MapReduce示例代碼
  • 詳解JS數(shù)組Reduce()方法詳解及高級(jí)技巧
  • js中的reduce()函數(shù)講解

標(biāo)簽:舟山 呼倫貝爾 菏澤 安順 白山 黃石 池州 楚雄

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《通用MapReduce程序復(fù)制HBase表數(shù)據(jù)》,本文關(guān)鍵詞  通用,MapReduce,程序,復(fù)制,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《通用MapReduce程序復(fù)制HBase表數(shù)據(jù)》相關(guān)的同類信息!
  • 本頁收集關(guān)于通用MapReduce程序復(fù)制HBase表數(shù)據(jù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品美女久久久免费| 国产视频一二三四区| 91精品国产高清久久久久久91| 18video性欧美19sex高清| 欧美性猛交xxxx免费看手交| 羞羞视频在线观看欧美| 一区二区三区 欧美| 亚洲欧洲日产国码无码久久99| 激情视频一区| 亚洲精品久久久久久动漫器材一区| 欧美日韩一区二区免费在线观看| 在线视频欧美亚洲| 国产在线麻豆精品观看| 岛国av中文字幕| 欧美日韩在线三区| 美女性感视频久久久| 国产永久免费高清在线观看视频| 国产一区二区三区网站| 欧洲av一区二区三区| 国产精品27p| 亚洲欧美日韩色| 理论片午午伦夜理片在线播放| 成人性教育视频在线观看| 久久综合久久综合久久综合| 天天综合色天天综合色hd| 亚洲性猛交xxxxwww| 免费a级人成a大片在线观看| 成年人网站在线观看免费| 亚洲欧美激情四射在线日| 黄色av小说在线观看| 99久久久无码国产精品性波多| 欧美日韩免费视频| 精品一区二区电影| 你懂的网站在线观看网址| 欧美中文字幕一区| 黑人巨大40cm重口| 成人性生生活性生交12| 国产精品自拍99| 美国一区二区| 日本大香伊一区二区三区| 欧美孕妇孕交xxⅹ孕妇交| 成人在线视频成人| 亚洲电影成人av99爱色| 国产精品chinese在线观看| 素人一区二区三区| 无码人妻一区二区三区在线视频| 狠狠躁夜夜躁av无码中文幕| 国产偷人妻精品一区| 久久一二三四| 亚洲性av网站| 亚洲欧洲色图综合| 在线亚洲精品福利网址导航| 精品一区二区三区免费观看| 欧美高清视频手机在在线| 91在线观看高清| 国精产品一品二品国精品69xx| 欧美日韩国产成人在线观看| 免费黄色网址在线观看| 国精产品一区一区三区免费视频| 欧美e片成人在线播放乱妇| 91久久精品无码一区二区| 国产大学生自拍视频| 天天综合网色中文字幕| 久久天天躁狠狠躁夜夜躁| 456成人影院在线观看| 18岁以下禁止观看的美女视频| 能直接看的av| 黄色在线视频网址| www.国产福利| 色一情一乱一乱一区91av| 国产一区二区av| 亚洲特级片在线| 麻豆乱码国产一区二区三区| 蜜臀国产一区| 亚洲第一成年人网站| 亚洲午夜影视影院在线观看| 全国男人的天堂天堂网| 一级黄色录像毛片| 国语产色综合| 色综合色综合| 一区二区久久精品| 蜜桃欧美视频| 国产精品人人做人人爽人人添| 国产亚洲欧洲997久久综合| 91av视频在线播放| 激情校园亚洲图片| 亚洲欧洲成人精品av97| 日韩免费电影一区二区| 日韩av首页| 久久aaaa片一区二区| 久久久久久久久久综合| 亚洲一区二区综合| 亚洲中文字幕在线一区| 亚洲永久一区二区三区在线| 亚洲永久一区二区三区在线| 亚洲女厕所小便bbb| 成人毛片免费看| 国产日韩中文在线| 中国男女全黄大片| 中文字幕在线影院| 狠狠躁夜夜躁久久躁别揉| 亚洲精品v欧美精品v日韩精品| 久久久久久久久久久久久女国产乱| jizzjizzjizz亚洲| 天堂在线观看av| 国产一区你懂的| 中国国产一级毛片| 日日干夜夜骑| 99久久精品国产导航| 欧美激情aaaa| 老牛影视免费一区二区| 日韩精品一区二区三区视频播放| 国产日韩一区二区三区在线| 国产一区二区三区日韩| 99riav一区二区三区| 中文字幕 亚洲一区| 国产日韩欧美在线观看视频| 亚洲午夜久久久久久久久| 99re在线精品| 成年人国产精品| 国产精品欧美亚洲| 欧美三级在线免费观看| 一区二区三区www| 尤物99国产成人精品视频| 欧美性猛交xxxxbbbb| 日本1区2区3区中文字幕| 美女被内谢流白浆高视频| 亚洲精品视频一二三| 国产精品国产自产拍在线| 国产精品视频一区二区三区| 久久久久久九九九九| 最后生还者第二季在线观看| 超碰在线免费| 91网站免费观看| a级片免费在线观看| 成a人片在线观看| 国产在线一二三| 美女视频黄a视频全免费观看| 国产精品1luya在线播放| 精品视频在线一区二区在线| 欧美a一片xxxx片| 国语对白做受xxxxx在线中国| 欧美大片在线看免费观看| 国产二级一片内射视频播放| 91蜜桃在线观看| 免费黄色在线看| 日韩激情视频在线观看| 日韩av在线看| 国产91网红主播在线观看| 欧美精品尤物在线观看| 最新地址在线观看| 精品免费视频| 日本a一级在线免费播放| 亚洲免费二区| 亚洲精品**不卡在线播he| 波多野结衣的一区二区三区| 精品国产一区二区三区四区四| 尤物视频在线观看国产| 激情开心成人网| 老司机成人在线| www.成人网| 538任你躁在线精品免费| 日韩欧美不卡一区| 欧美成人黑人xx视频免费观看| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品资源站| 免费在线观看黄网站| 国产成人啪午夜精品网站男同| 日本sm残虐另类| 人人做人人澡人人爽欧美| 日韩高清a**址| 欧美日韩精品中文字幕一区二区| 一本久道高清无码视频| 色网址在线观看| 日日摸夜夜爽人人添| 26uuu国产一区二区三区| 影视先锋久久| 精品视频在线一区| 日韩欧美一区二区在线| 亚洲缚视频在线观看| 亚洲v.com| 成人影院免费观看| 久久久国产一区二区三区四区小说| 在线视频欧美亚洲| 国产一区二区免费在线观看| 99精品视频在线观看免费播放| 欧美成人专区| 久久免费视频6| 亚洲黄色免费观看| 国产v在线观看| 91久久久一线二线三线品牌| 国产一区二区三区国产精品| 精品无码一区二区三区电影桃花| 久久免费99精品久久久久久| 黄色av网站在线播放| aaa大片在线观看| 国产91精品精华液一区二区三区| 奇米精品一区二区三区| 公交车上扒开嫩j挺进去| 亚洲综合图片| 欧美专区亚洲专区| 在线观看爽视频| 日本激情一区二区三区| 日本在线观看视频| 永久免费av在线| 欧美人妖巨大在线| 日韩有码av| 天堂在线资源网| 秋霞在线观看av| 韩日一区二区| 欧美在线视频播放| 黄色国产精品一区二区三区| 国产呦小j女精品视频| 亚洲国产精品精华液2区45| 日日夜夜精品| 麻豆传媒在线完整视频| 91成人精品在线| 99热这里只有精品在线播放| 蜜臀一区二区三区精品免费视频| 国产精品久久久久久av公交车| 一个色综合av| 一本色道久久加勒比88综合| 日本91av在线播放| 精品久久久久一区二区| 91精品国产综合久久久久久豆腐| caoporn国产一区二区| 亚洲不卡视频在线| 久久精品72免费观看| 亚洲欧美日韩中文在线制服| 狠狠色噜噜狠狠狠狠黑人| 深夜成人在线| 正在播放日韩精品| 在线黄色网页| 亚洲精品天堂网| 久久综合久久鬼色| 国产精品合集一区二区| 欧美精品aaaa| 99re视频在线播放| 国产欧美精品日韩区二区麻豆天美| 高潮久久久久久久久久久久久久| 国产一级黄色电影| 91av资源网| 欧美性猛交99久久久久99| 婷婷丁香激情综合| 日韩少妇内射免费播放| 在线观看免费成人av| 欧美视频久久久| 看黄色录像一级片| 精品国产av无码| 欧洲大片精品免费永久看nba| 香蕉视频一区二区三区| 中文字幕在线三区| 午夜精品短视频| 亚洲精品小视频在线观看| 国内精品视频在线| 欧美激情在线观看视频| 91网站最新地址| 国产一区二区精品| 日韩欧美国产wwwww| 精品人妻无码中文字幕18禁| 2014亚洲天堂| 国产精品一区二区三区美女| 偷拍自拍在线看| 亚洲在线一区二区| 老司机福利在线观看| 亚洲成人中文在线| 欧美激情性xxxxx| 日本免费a视频| 免费黄色日本网站| 欧美蜜桃一区二区三区| 欧美日韩一区二区三区不卡| 久草网视频在线观看| 国产精品毛片无遮挡高清| 中文字幕一区二区免费| 日本黄视频网站| 日韩精品久久理论片| 免费看成人片| 色香欲www7777综合网| 中文字幕在线一区免费| 色偷偷福利视频| 日本一二三区在线| 东凛在线观看| 国产精品v亚洲精品v日韩精品| 一级黄色免费在线观看| 中文字幕av亚洲精品一部二部| 麻豆精品一区二区| 久久一二三四| 亚洲免费av高清| 欧美精品v日韩精品v韩国精品v| 中文字幕日本人妻久久久免费| 国产精品手机视频| 欧美人妻精品一区二区三区| 奇米影视四色在线| 久久久久久久久岛国免费| 欧美大胆的人体xxxx| 成年人二级毛片| 日夜干在线视频| 成人ww免费完整版在线观看| 亚洲福利电影网| 欧美性生交大片免费| 一卡二卡三卡日韩欧美| 日韩精品一区二区在线| 四虎成人影院网址| 亚洲高清毛片一区二区| 成人黄色在线| 蜜臀av一区二区三区有限公司| 国产精品suv一区二区69| 国产91丝袜在线播放九色| 国产乱真实合集| 欧美色图国产精品| 成人有码在线视频| 久做在线视频免费观看| 第一福利在线视频| 欧美熟妇激情一区二区三区| 国产精品视频专区| 国产伦精品一区二区三区视频网站| 在线观看免费黄视频| 精品亚洲成a人片在线观看| 中文在线免费观看| 国产91在线视频观看| 欧美久久久久| 国产成人三级一区二区在线观看一| 午夜精品久久久久久久星辰影院| 久久偷拍免费视频| 日韩欧美在线视频播放| 91麻豆精品91久久久久久清纯| 国产成人三级在线观看视频| 石原莉奈一区二区三区高清在线|