3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

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

编程问答

主流大数据技术全体系参数与搭建与后台代码工程框架的编写(百分之70)

發布時間:2025/7/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主流大数据技术全体系参数与搭建与后台代码工程框架的编写(百分之70) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前查閱源碼啊,性能測試啊調優啊。。基本告一段落,項目也接近尾聲,那么整理下spark所有配置參數與優化策略,方便以后開發與配置:

Spark安裝配置與代碼框架

?

?spark-default.conf 配置

spark.executor.instance 參數,向Yarn申請創建的資源池實例數

?

spark.executor.cores 參數,每個container中所包含的core數量

?

spark.executor.memory 參數,每個資源池所具有的內存數

?

spark.dirver.memory 參數,driver端所占用的資源數

?

spark.storage.memoryFraction 參數,用于cache數據與計算數據集的內存使用比例

?

spark.kryoserializer.buffer.max 參數,序列化最大值,默認64M

?

spark.shuffle.consolidateFiles 參數,shuffle是否合并文件

?

spark.rdd.compress 參數,rdd是否進行壓縮

?

spark.sql.shuffle.partitions 參數,shuffle過程中所創建的partition個數

?

spark.reducer.maxSizeInFlight 參數,設置shuffle read task的buffer緩沖大小,它將決定每次數據從遠程的executors中拉取大小。這個拉取過程是由5個并行的request,從不同的executor中拉取過來,從而提升了fetch的效率。

?

spark.shuffle.io.retryWait 參數,每次拉取數據的等待間隔

?

spark.shuffle.manage?參數,使用hash,同時與參數spark.shuffle.consolidateFiles true并用。因為不需要對中間結果進行排序,同時合并中間文件的個數,從而減少打開文件的性能消耗,在spark2.0.2中不可直接配置hash,會報錯,其他優化參數包括:Sort Shuffle、Tungsten Sort,這里我們要根據數據量進行選擇,優缺點請參考本博客《Spark Shuffle詳細過程》

?

spark.executor.heartbeatInterval 參數,與driver的通訊間隔,使driver知道executor有木有掛

?

spark.driver.maxResultSize 參數,所有分區的序列化結果的總大小限制

?

spark.yarn.am.cores 參數,在yarn-client模式下,申請Yarn App Master所用的CPU核數

?

spark.master 參數,選用的模式

?

spark.task.maxFailures 參數,task失敗多少次后丟棄job(防止因為網絡IO等問題失敗,重新拉取)

?

spark.shuffle.file.buffer 參數,會增大Map任務的寫磁盤前的cache緩存

?

spark-env.sh 配置

export HADOOP_CONF_DIR 參數,配置hadoop所在配置文件路徑

export HADOOP_HOME 參數,配置hadoop Client的所在路徑

export JAVA_HOME 參數,配置JAVA的環境變量地址

export SPARK_YARN_APP_NAME 參數,配置application的名稱

export SPARK_LOG_DIR 參數,配置Spark log的輸出路徑

export SPARK_PID_DIR 參數,配置spark的Pid輸出路徑

?

?將hive-site.xml文件放入spark的conf下 修改spark thrift port,使其與hive的thrift的port分離開來,同時配置mysql的數據源,因為hive的meta信息存在mysql中,以及配置meta指定的hdfs路徑:

<property>
  <name>hive.server2.thrift.port</name>
  <value>10000</value>
  <description>Port number of HiveServer2 Thrift interface.
  Can be overridden by setting $HIVE_SERVER2_THRIFT_PORT</description>
</property>

?

<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
</property>

?

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

?

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>root</value>
  <description>username to use against metastore database</description>
</property>

?

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>root</value>
  <description>password to use against metastore database</description>
</property>

?

Spark動態資源分配測試:

spark.dynamicAllocation.cachedExecutorIdleTimeout 360000000 如果executor中有數據則不移除

spark.dynamicAllocation.executorIdleTimeout 60s executor空閑時間達到規定值,則將該executor移除

spark.dynamicAllocation.initialExecutors 3 如果所有的executor都移除了,重新請求時啟動的初始executor數

spark.dynamicAllocation.maxExecutors 30 能夠啟動的最大executor數目

spark.dynamicAllocation.minExecutors 1 能夠啟動的最小executor數目

spark.dynamicAllocation.schedulerBacklogTimeout 1s task等待運行時間超過該值后開始啟動executor

spark.dynamicAllocation.enabled True 開啟動態參數配置

spark.dynamicAllocation.sustainedSchedulerBacklogTimeout 1s 啟動executor的時間間隔

?

啟動腳本:

/usr/local/spark-1.6.1/sbin/start-thriftserver.sh \

--conf spark.shuffle.service.enabled=true \

--conf spark.dynamicAllocation.enabled=true \

--conf spark.dynamicAllocation.minExecutors=2 \

--conf spark.dynamicAllocation.maxExecutors=30 \

--conf spark.dynamicAllocation.sustainedSchedulerBacklogTimeout = 5s \

--conf spark.dynamicAllocation.schedulerBacklogTimeout=1s \

--conf spark.dynamicAllocation.initialExecutors=2 \

--conf spark.dynamicAllocation.executorIdleTimeout=60s \

--conf spark.dynamicAllocation.cachedExecutorIdleTimeout=360000000s \

--conf spark.driver.memory=50g

?

代碼框架:

首先,我們引入需要依賴的包括hadoop、spark、hbase等jar包,pom.xml配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>sparkApp</groupId><artifactId>sparkApp</artifactId><version>1.0-SNAPSHOT</version><inceptionYear>2008</inceptionYear><properties><scala.version>2.10.0</scala.version><spring.version>4.0.2.RELEASE</spring.version><hadoop.version>2.6.0</hadoop.version><jedis.version>2.8.1</jedis.version></properties><repositories><repository><id>scala-tools.org</id><name>Scala-Tools Maven2 Repository</name><url>http://scala-tools.org/repo-releases</url></repository></repositories><pluginRepositories><pluginRepository><id>scala-tools.org</id><name>Scala-Tools Maven2 Repository</name><url>http://scala-tools.org/repo-releases</url></pluginRepository></pluginRepositories><dependencies><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>${scala.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.4</version><scope>test</scope></dependency><!-- SPARK START --><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.10</artifactId><version>1.6.1</version></dependency><!--<dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming-kafka_2.10</artifactId><version>1.6.1</version></dependency>--><dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.10</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-mllib_2.10</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.10</artifactId><version>1.6.1</version></dependency><!-- SPARK END --><!-- HADOOP START --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>${hadoop.version}</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion><exclusion><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop.version}</version></dependency><!-- HADOOP END --><!-- hbase START --><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>1.0.2</version></dependency><dependency><groupId>org.apache.htrace</groupId><artifactId>htrace-core</artifactId><version>3.1.0-incubating</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>1.0.2</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-common</artifactId><version>1.0.2</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-protocol</artifactId><version>1.0.2</version></dependency><!-- hbase END --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>11.0.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.12</version></dependency><!-- REDIS START --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>${jedis.version}</version></dependency><!-- REDIS END --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version></dependency><!--<dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-api-jdo</artifactId><version>3.2.6</version></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-core</artifactId><version>3.2.1</version></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-rdbms</artifactId><version>3.2.9</version></dependency>--><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>5.0.0.Alpha1</version></dependency><!-- <dependency><groupId>org.apache.hive</groupId><artifactId>hive-service</artifactId><version>1.2.1</version></dependency>--><dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>2.1.0</version></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-service</artifactId><version>1.2.1</version></dependency></dependencies><build> <!-- <sourceDirectory>src/main/scala</sourceDirectory><testSourceDirectory>src/test/scala</testSourceDirectory>--><plugins><plugin><groupId>org.scala-tools</groupId><artifactId>maven-scala-plugin</artifactId><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions><configuration><scalaVersion>${scala.version}</scalaVersion><args><arg>-target:jvm-1.5</arg></args></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-eclipse-plugin</artifactId><configuration><downloadSources>true</downloadSources><buildcommands><buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand></buildcommands><additionalProjectnatures><projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature></additionalProjectnatures><classpathContainers><classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer><classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer></classpathContainers></configuration></plugin></plugins></build><reporting><plugins><plugin><groupId>org.scala-tools</groupId><artifactId>maven-scala-plugin</artifactId><configuration><scalaVersion>${scala.version}</scalaVersion></configuration></plugin></plugins></reporting> </project>

然后將集群中hive-site.xml、hdfs-site.xml、hbase-site.xml引入項目中。

編寫HBase公共方法(部分代碼):

1 package hbase 2 3 import java.util.{Calendar, Date} 4 5 import org.apache.hadoop.hbase.HBaseConfiguration 6 import org.apache.hadoop.hbase.client.{Result, Scan} 7 import org.apache.hadoop.hbase.filter._ 8 import org.apache.hadoop.hbase.io.ImmutableBytesWritable 9 import org.apache.hadoop.hbase.mapreduce.TableInputFormat 10 import org.apache.hadoop.hbase.protobuf.ProtobufUtil 11 import org.apache.hadoop.hbase.util.{Base64, Bytes} 12 import org.apache.spark.{Logging, SparkContext} 13 import org.apache.spark.rdd.RDD 14 import org.slf4j.{Logger, LoggerFactory} 15 16 /** 17 * Created by ysy on 2016/11/6. 18 */ 19 object HBaseTableHelper extends Serializable { 20 21 val logger: Logger = LoggerFactory.getLogger(HBaseTableHelper.getClass) 22 23 //根據timestramp過濾加載Hbase數據 24 def tableInitByTime(sc : SparkContext,tablename:String,columns :String,fromdate: Date,todate:Date):RDD[(ImmutableBytesWritable,Result)] = { 25 val configuration = HBaseConfiguration.create() 26 configuration.set(TableInputFormat.INPUT_TABLE, tablename) 27 28 val scan = new Scan 29 scan.setTimeRange(fromdate.getTime,todate.getTime) 30 val column = columns.split(",") 31 for(columnName <- column){ 32 scan.addColumn("f1".getBytes, columnName.getBytes) 33 } 34 configuration.set(TableInputFormat.SCAN, convertScanToString(scan)) 35 val hbaseRDD = sc.newAPIHadoopRDD(configuration, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result]) 36 logger.info("-------count-------" + hbaseRDD.count() + "------------------") 37 hbaseRDD 38 } 39 40 def convertScanToString(scan : Scan) = { 41 val proto = ProtobufUtil.toScan(scan) 42 Base64.encodeBytes(proto.toByteArray) 43 } 44 45 //根據時間條件filter數據 46 def tableInitByFilter(sc : SparkContext,tablename : String,columns : String,time : String) : RDD[(ImmutableBytesWritable,Result)] = { 47 val configuration = HBaseConfiguration.create() 48 configuration.set(TableInputFormat.INPUT_TABLE,tablename) 49 val filter: Filter = new RowFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new SubstringComparator(time)) 50 val scan = new Scan 51 scan.setFilter(filter) 52 val column = columns.split(",") 53 for(columnName <- column){ 54 scan.addColumn("f1".getBytes, columnName.getBytes) 55 } 56 val hbaseRDD = sc.newAPIHadoopRDD(configuration, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result]) 57 logger.info("-------count-------" + hbaseRDD.count() + "------------------") 58 hbaseRDD 59 } 60 61 def HBaseTableInit(): Unit ={ 62 63 } 64 65 def hbaseToHiveTable(): Unit ={ 66 67 } 68 69 //前N天的時間戳獲取 70 def getPassDays(beforeDay : Int): Date ={ 71 val calendar = Calendar.getInstance() 72 var year = calendar.get(Calendar.YEAR) 73 var dayOfYear = calendar.get(Calendar.DAY_OF_YEAR) 74 var j = 0 75 for(i <- 0 to beforeDay){ 76 calendar.set(Calendar.DAY_OF_YEAR, dayOfYear - j); 77 if (calendar.get(Calendar.YEAR) < year) { 78 //跨年了 79 j = 1; 80 //更新 標記年 81 year = year + 1; 82 //重置日歷 83 calendar.set(year,Calendar.DECEMBER,31); 84 //重新獲取dayOfYear 85 dayOfYear = calendar.get(Calendar.DAY_OF_YEAR); 86 }else{ 87 j = j + 1 88 } 89 } 90 calendar.getTime() 91 } 92 93 //根據startRow與endRow進行過濾 94 def scanHbaseByStartAndEndRow(sc : SparkContext,startRow : String,stopRow : String,tableName : String) : RDD[(ImmutableBytesWritable,Result)] ={ 95 val configuration = HBaseConfiguration.create() 96 val scan = new Scan() 97 scan.setCacheBlocks(false) 98 scan.setStartRow(Bytes.toBytes(startRow)) 99 scan.setStopRow(Bytes.toBytes(stopRow)) 100 val filterList = new FilterList() 101 filterList.addFilter(new KeyOnlyFilter()) 102 filterList.addFilter(new InclusiveStopFilter(Bytes.toBytes(stopRow))) 103 scan.setFilter(filterList) 104 configuration.set(TableInputFormat.INPUT_TABLE,tableName) 105 configuration.set(TableInputFormat.SCAN, convertScanToString(scan)) 106 val hbaseRDD = sc.newAPIHadoopRDD(configuration, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result]) 107 logger.info("-------ScanHbaseCount-------" + hbaseRDD.count() + "------------------") 108 hbaseRDD 109 } 110 111 }

?編寫hive公共方法(部分代碼):

1 package hive 2 3 import org.apache.spark.{Logging, SparkContext} 4 import org.apache.spark.rdd.RDD 5 import org.apache.spark.sql.Row 6 import org.apache.spark.sql.hive.HiveContext 7 import org.apache.spark.sql.types.{StringType, StructField, StructType} 8 9 /** 10 * Created by uatcaiwy on 2016/11/6. 11 */ 12 object HiveTableHelper extends Logging { 13 14 def hiveTableInit(sc:SparkContext): HiveContext ={ 15 val sqlContext = new HiveContext(sc) 16 sqlContext 17 } 18 19 def writePartitionTable(HCtx:HiveContext,inputRdd:RDD[Row],tabName:String,colNames:String):Unit ={ 20 val schema = StructType( 21 colNames.split(" ").map(fieldName => StructField(fieldName,StringType,true)) 22 ) 23 val table = colNames.replace(" dt","").split(" ").map(name => name + " String").toList.toString().replace("List(","").replace(")","") 24 val df = HCtx.createDataFrame(inputRdd,schema) 25 df.show(20) 26 logInfo("----------------------------------begin write table-----------------------------------") 27 val temptb = "temp" + tabName 28 HCtx.sql("drop table if exists " + tabName) 29 df.registerTempTable(temptb) 30 HCtx.sql("CREATE EXTERNAL TABLE if not exists " + tabName +" ("+ table+ ") PARTITIONED BY (`dt` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileIn      putFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'") 31 HCtx.sql("set hive.exec.dynamic.partition.mode = nonstrict") 32 HCtx.sql("insert overwrite table " + tabName + " partition(`dt`)" + " select * from " + temptb) 33 } 34 }

讀取hdfs文件,有時我們需要根據文件的編碼來讀取,否則會亂碼,并改變編碼公共方法:

1 package importSplitFiletoHive 2 3 import org.apache.hadoop.io.{LongWritable, Text} 4 import org.apache.hadoop.mapred.TextInputFormat 5 import org.apache.spark.SparkContext 6 import org.apache.spark.rdd.RDD 7 8 /** 9 * Created by ysy on 2016/12/7. 10 */ 11 object changeEncode { 12 13 def changeFileEncoding(sc:SparkContext,path:String,encode : String):RDD[String]={ 14 sc.hadoopFile(path,classOf[TextInputFormat],classOf[LongWritable],classOf[Text],1) 15 .map(p => new String(p._2.getBytes,0,p._2.getLength,encode)) 16 }

?spark進行xml解析(部分代碼):

1 import hive.HiveTableHelper 2 import org.apache.spark.Logging 3 import org.apache.spark.rdd.RDD 4 import org.apache.spark.sql.Row 5 import org.apache.spark.sql.hive.HiveContext 6 import org.apache.spark.sql.types.{StringType, StructField, StructType} 7 import org.slf4j.LoggerFactory 8 9 import scala.xml._ 10 11 object xmlParse extends Logging{ 12 val schemaString = "column1,column2...." 13 def getPBOC_V1_F1(HCtx:HiveContext,rdd:RDD[String],outputTablename:String):Unit = { 14 val tbrdd = rdd.filter(_.split("\t").length == 9) 15 .filter(_.split("\t")(8) != "RESULTS") 16 .map(data => { 17 val sp = data.split("\t") 18 val dt = sp(5).substring(0, 10).replaceAll("-", "") 19 ((sp(0), sp(1), sp(2), sp(3), sp(4), sp(5), sp(6), "RN"), sp(8), dt) 20 }).filter(_._2 != "") 21 .filter(_._2.split("<").length > 2) 22 .filter(data => !(data._2.indexOf("SingleQueryResultMessage0009") == -1 || data._2.indexOf("ReportMessage") == -1)) 23 .map(data => { 24 val xml = if (XML.loadString(data._2) != null) XML.loadString(data._2) else null 25 logDebug("%%%%%%%%%%%%%%%%%%finding xml-1:" + xml + "%%%%%%%%%%%%%%%%%%") 26 val column1 = if ((xml \ "PBOC" \ "TYPE") != null) (xml \ "PBOC" \ "TYPE").text else "null" 27 val column2 = if ((xml \ "HEAD" \ "VER") != null) (xml \ "HEAD" \ "VER").text else "null" 28 val column3 = if ((xml \ "HEAD" \ "SRC") != null) (xml \ "HEAD" \ "SRC").text else "null" 29 val column4 = if ((xml \ "HEAD" \ "DES") != null) (xml \ "HEAD" \ "DES").text else "null" 30 .... 31 (data._1,column1,column2,column3...) 32 }) 33  ROW(....) 34 HiveTableHelper.writePartitionTable(HCtx, tbrdd, outputTablename, schemaString)

Redis編碼公共方法(部分代碼):

1 package redis 2 3 import org.slf4j.{Logger, LoggerFactory} 4 import redis.clients.jedis.{Jedis, JedisPool, JedisPoolConfig} 5 6 import scala.collection.mutable.ArrayBuffer 7 import scala.util.Random 8 9 /** 10 * Created by ysy on 2016/11/21. 11 */ 12 object RedisClient extends Serializable{ 13 val logger: Logger = LoggerFactory.getLogger(RedisClient.getClass) 14 @transient private var jedisPool : JedisPool = null 15 private var jedisPoolList = new ArrayBuffer[JedisPool] 16 private val poolSize = 0 17 makePool 18 19 def makePool() ={ 20 val pc = new PropConfig("redis.properties"); 21 if(jedisPool == null){ 22 val poolConfig : JedisPoolConfig = new JedisPoolConfig 23 poolConfig.setMaxIdle(pc.getProperty("redis.pool.maxActive").toInt) 24 poolConfig.setMaxTotal(pc.getProperty("redis.pool.maxActive").toInt) 25 poolConfig.setMaxWaitMillis(pc.getProperty("redis.pool.maxWait").toInt) 26 poolConfig.setTestOnBorrow(pc.getProperty("redis.pool.testOnBorrow").toBoolean) 27 poolConfig.setTestOnReturn(pc.getProperty("redis.pool.testOnReturn").toBoolean) 28 val hosts = pc.getProperty("redis.pool.servers").split(",") 29 .map(data => data.split(":")) 30 for(host <- hosts){ 31 jedisPool = new JedisPool(poolConfig,host(0),host(1).toInt,pc.getProperty("redis.server.timeout").toInt) 32 jedisPoolList += jedisPool 33 } 34 } 35 36 } 37 38 39 def getForString(key : String) : String = { 40 var value = "" 41 if(key != null && !key.isEmpty()){ 42 val jedis = getJedis 43 value = jedis.get(key) 44 } 45 value 46 } 47 48 def setForString(key : String,value : String) ={ 49 if(key != null && !key.isEmpty){ 50 var jedis = getJedis 51 jedis.set(key,value) 52 }else{ 53 54 } 55 } 56 57 def zexsist(key : String) : Boolean ={ 58 var flag = false 59 if(key != null && !key.isEmpty){ 60 val jedis = getJedis 61 62 val resultNum = jedis.zcard(key) 63 if("0".equals(resultNum.toLong)){ 64 flag = true 65 } 66 } 67 flag 68 } 69 70 def getJedis() : Jedis ={ 71 var ramNub = 0 72 if(poolSize == 1){ 73 ramNub = 0 74 }else{ 75 val random = new Random 76 ramNub = Math.abs(random.nextInt % 1) 77 } 78 jedisPool = jedisPoolList(ramNub) 79 jedisPool.getResource 80 } 81 82 def returnJedisResource(redis : Jedis): Unit ={ 83 if(redis != null){ 84 redis.close() 85 } 86 } 87 88 def close: Unit = { 89 for(jedisPool <- jedisPoolList){ 90 jedisPool.close 91 } 92 if(jedisPool!=null && !jedisPool.isClosed()){ 93 jedisPool.close 94 }else{ 95 jedisPool=null 96 } 97 } 98 99 }

?詳細就不寫了,那么完整的工程框架搭建完畢:

隨后通過main方法創建sparkContext對象,開始數據分析與處理,在spark路徑的bin目錄下或者寫成腳本文件執行:

./spark-submit --conf spark.ui.port=5566 --name "sparkApp" --master yarn-client --num-executors 3 --executor-cores 2 --executor-memory 10g --class impl.spark /usr/local/spark1.6.1/sparkApp/sparkApp.jar

(注意:這里的配置參數會覆蓋spark-default.conf中配置的變量,重新聲明spark.ui.port的原因也是因為在同時啟動spark的thrfit的時候,提交submit會造成UI占用的問題,至此spark完結)

?

Hadoop安裝配置與MapReduce代碼框架

安裝:

yum install gcc?

yum install gcc-c++

yum install make

yum install autoconfautomake libtool cmake

yum install ncurses-devel

yum install openssl-devel

安裝protoc(需用root用戶)

?tar -xvf protobuf-2.5.0.tar.bz2?

cd protobuf-2.5.0?

?./configure --prefix=/opt/protoc/?

?make && make install

編譯hadoop

mvn clean package -Pdist,native -DskipTests -Dtar?

編譯完的hadoop在 /home/hadoop/ocdc/hadoop-2.6.0-src/hadoop-dist/target 路徑下

配置hosts文件

10.1.245.244 master

10.1.245.243 slave1

命令行輸入 hostname master

免密碼登錄:

執行命令生成密鑰: ssh-keygen -t rsa -P ""

進入文件夾cd? .ssh (進入文件夾后可以執行ls? -a 查看文件)

將生成的公鑰id_rsa.pub 內容追加到authorized_keys(執行命令:cat id_rsa.pub >> authorized_keys)

?

core-site.xml

<configuration>

?<!--指定hdfs的nameservice為ns1-->

<property>

? <name>fs.defaultFS</name>

? <value>hdfs://master</value>

?</property>

?<property>

? <name>io.file.buffer.size</name>

? <value>131072</value>

?</property>

<!--指定hadoop數據存放目錄-->

?<property>

? <name>hadoop.tmp.dir</name>

? <value>/home/hadoop/ocdc/hadoop-2.6.0/tmp</value>

? <description>Abasefor other temporary directories.</description>

?</property>

?<property>

? <name>hadoop.proxyuser.spark.hosts</name>

? <value>*</value>

?</property>

<property>

? <name>hadoop.proxyuser.spark.groups</name>

? <value>*</value>

?</property>

</configuration>

?

<!--指定zookeeper地址-->

?<property>

???<name>ha.zookeeper.quorum</name>

???<value>h4:2181,h5:2181,h6:2181</value>

?</property>

</configuration>

?

hdfs-site.xml

<configuration>

?<property>

? <name>dfs.namenode.secondary.http-address</name>

? <value>master:9001</value>

?</property>

?

? <property>

?? <name>dfs.namenode.name.dir</name>

?? <value>/home/hadoop/ocdc/hadoop-2.6.0/name</value>

?</property>

?

?<property>

? <name>dfs.datanode.data.dir</name>

? <value>/home/hadoop/ocdc/hadoop-2.6.0/data</value>

? </property>

?

?<property>

? <name>dfs.replication</name>

? <value>3</value>

?</property>

?

?<property>

? <name>dfs.webhdfs.enabled</name>

? <value>true</value>

?</property>

?

<property>

???<name>dfs.nameservices</name>

???<value>ns1</value>

</property>

?

<!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->

<property>

???<name>dfs.ha.namenodes.ns1</name>

???<value>nn1,nn2</value>

</property>

</configuration>

?

yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->

<!--?指定nodemanager啟動時加載server的方式為shuffle server -->

<property>

?? <name>yarn.nodemanager.aux-services</name>

?? <value>mapreduce_shuffle</value>

? </property>

? <property>

?? <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

?? <value>org.apache.hadoop.mapred.ShuffleHandler</value>

? </property>

? <property>

?? <name>yarn.resourcemanager.address</name>

?? <value>master:8032</value>

? </property>

? <property>

?? <name>yarn.resourcemanager.scheduler.address</name>

?? <value>master:8030</value>

? </property>

? <property>

?? <name>yarn.resourcemanager.resource-tracker.address</name>

?? <value>master:8035</value>

? </property>

? <property>

?? <name>yarn.resourcemanager.admin.address</name>

?? <value>master:8033</value>

? </property>

? <property>

?? <name>yarn.resourcemanager.webapp.address</name>

?? <value>master:8088</value>

? </property>

<property>

<name>yarn.nodemanager.resource.memory-mb</name>

<value>16384</value>

</property>

<!--?指定resourcemanager地址?-->

???<property>

???????<name>yarn.resourcemanager.hostname</name>

????????????<value>h3</value>

???</property>

</configuration>

?

mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

?? <value>yarn</value>

?</property>

?<property>

? <name>mapreduce.jobhistory.address</name>

? <value>master:10020</value>

?</property>

?<property>

? <name>mapreduce.jobhistory.webapp.address</name>

? <value>master:19888</value>

?</property>

<property>

??? <name>yarn.scheduler.maximum-allocation-mb</name>

??? <value>16384</value>

? </property>

</configuration>

?

關于MapReduce,1年多前大家都覺得很神秘,其實 就相當于在Map階段或者Reduce階段中,進行數據的處理,也可以在Map中讀取寫入hbase、redis都可以~其實就相當于在MapReduce中寫業務處理邏輯,代碼如下:

1 public static class Map extends MapReduceBase implments Mapper<LongWritable,Text,Text,IntWritable>{ 2 //設置常量1,用來形成<word,1>形式的輸出 3 private fianll static IntWritable one = new IntWritable(1) 4 private Text word = new Text(); 5 6 public void map(LongWritable key,Text value,OutputCollector<Text,output,Reporter reporter) throws IOException{ 7 //hadoop執行map函數時為是一行一行的讀取數據處理,有多少行,就會執行多少次map函數 8 String line = value.toString(); 9 //進行單詞的分割,可以多傳入進行分割的參數 10 StringTokenizer tokenizer = new StringTokenizer(line); 11 //遍歷單詞 12 while(tokenizer.hasMoreTokens()){ 13 //往Text中寫入<word,1> 14 word.set(tokenizer.nextToken()); 15 output.collect(word,one); 16 } 17 } 18 } 19 //需要注意的是,reduce將相同key值(這里是word)的value值收集起來,形成<word,list of 1>的形式,再將這些1累加 20 public static class Reduce extends MapReduceBase implements Reducer<Text IntWritable,Text,IntWritable>{ 21 public void reduce(Text key,Iterator<IntWritable> values,OutputCollector<Text,IntWritable> output,Reporter reporter) throws IOException{ 22 //初始word個數設置 23 int sum = 0; 24 while(values,hasNext()){ 25 //單詞個數相加 26 sum += value.next().get(); 27 } 28 output.collect(key,new IntWritbale(sum)); 29 } 30 }

?

HBASE安裝配置與hbase代碼框架

由于我使用的是外置的zookeeper,所以這里HBASE_MANAGES_ZK設置為,設置參數:

export JAVA_HOME=/usr/local/yangsy/jdk1.7.0_55

export HBASE_CLASSPATH=/usr/local/hbase-1.0.2/conf

export HBASE_MANAGES_ZK=false

?

hbase-site.xml

<configuration>

//設置將數據寫入hdfs的目錄
<property>
  <name>hbase.rootdir</name>
  <value>hdfs://master:9000/usr/local/hadoop-2.6.0/hbaseData</value>
</property>

//設置hbase的模式為集群模式
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>

//設置hbase的master端口地址

<property>
  <name>hbase.master</name>
  <value>hdfs://master:60000</value>
</property>

//HBase Master Web借鑒綁定的默認端口,默認為0.0.0.0

<property>
  <name>hbase.master.info.port</name>
  <value>60010</value>
</property>

//設置zookeeper的連接地址(必須為基數個)

<property>
  <name>hbase.zookeeper.property.clientPort</name>
  <value>2183</value>
</property>

//zookeeper的節點

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>master,slave1,slave2</value>
</property>

//zookeeper數據地址

<property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>/usr/local/zookeeper-3.4.6/data</value>
</property>

//zookeeper連接超時時間

<property>
  <name>zookeeper.session.timeout</name>

  <value>60000</value>
  </property>

</configuration>

這里要注意的是,如果選擇外置的zookeeper集群,則需要將zookeeper的zoo.cfg拷貝至HBase的conf下。在啟動HBase時,將會自動加載該配置文件。

regionServers中配置regionserver節點的地址

?

代碼結構:

1 package HbaseTest; 2 3 import akka.io.Tcp; 4 import org.apache.hadoop.conf.Configuration; 5 import org.apache.hadoop.hbase.*; 6 import org.apache.hadoop.hbase.client.*; 7 8 import java.util.ArrayList; 9 import java.util.List; 10 11 /** 12 * Created by root on 5/30/16. 13 */ 14 public class HbaseTest { 15 private Configuration conf; 16 public void init(){ 17 conf = HBaseConfiguration.create(); 18 } 19 20 public void createTable(){ 21 Connection conn = null; 22 try{ 23 conn = ConnectionFactory.createConnection(conf); 24 HBaseAdmin hadmin = (HBaseAdmin)conn.getAdmin(); 25 HTableDescriptor desc = new HTableDescriptor("TableName".valueOf("yangsy")); 26 27 desc.addFamily(new HColumnDescriptor("f1")); 28 if(hadmin.tableExists("yangsy")){ 29 System.out.println("table is exists!"); 30 System.exit(0); 31 }else{ 32 hadmin.createTable(desc); 33 System.out.println("create table success"); 34 } 35 }catch (Exception e){ 36 e.printStackTrace(); 37 }finally { 38 { 39 if(null != conn){ 40 try{ 41 conn.close(); 42 }catch(Exception e){ 43 e.printStackTrace(); 44 } 45 } 46 } 47 } 48 } 49 50 public void query(){ 51 Connection conn = null; 52 HTable table = null; 53 ResultScanner scan = null; 54 try{ 55 conn = ConnectionFactory.createConnection(conf); 56 table = (HTable)conn.getTable(TableName.valueOf("yangsy")); 57 58 scan = table.getScanner(new Scan()); 59 60 for(Result rs : scan){ 61 System.out.println("rowkey:" + new String(rs.getRow())); 62 63 for(Cell cell : rs.rawCells()){ 64 System.out.println("column:" + new String(CellUtil.cloneFamily(cell))); 65 66 System.out.println("columnQualifier:"+new String(CellUtil.cloneQualifier(cell))); 67 68 System.out.println("columnValue:" + new String(CellUtil.cloneValue(cell))); 69 70 System.out.println("----------------------------"); 71 } 72 } 73 }catch(Exception e){ 74 e.printStackTrace(); 75 }finally{ 76 try { 77 table.close(); 78 if(null != conn) { 79 conn.close(); 80 } 81 }catch (Exception e){ 82 e.printStackTrace(); 83 } 84 } 85 } 86 87 public void queryByRowKey(){ 88 Connection conn = null; 89 ResultScanner scann = null; 90 HTable table = null; 91 try { 92 conn = ConnectionFactory.createConnection(conf); 93 table = (HTable)conn.getTable(TableName.valueOf("yangsy")); 94 95 Result rs = table.get(new Get("1445320222118".getBytes())); 96 System.out.println("yangsy the value of rokey:1445320222118"); 97 for(Cell cell : rs.rawCells()){ 98 System.out.println("family" + new String(CellUtil.cloneFamily(cell))); 99 System.out.println("value:"+new String(CellUtil.cloneValue(cell))); 100 } 101 }catch (Exception e){ 102 e.printStackTrace(); 103 }finally{ 104 if(null != table){ 105 try{ 106 table.close(); 107 }catch (Exception e){ 108 e.printStackTrace(); 109 } 110 } 111 } 112 } 113 114 public void insertData(){ 115 Connection conn = null; 116 HTable hTable = null; 117 try{ 118 conn = ConnectionFactory.createConnection(conf); 119 hTable = (HTable)conn.getTable(TableName.valueOf("yangsy")); 120 121 Put put1 = new Put(String.valueOf("1445320222118").getBytes()); 122 123 put1.addColumn("f1".getBytes(),"Column_1".getBytes(),"123".getBytes()); 124 put1.addColumn("f1".getBytes(),"Column_2".getBytes(),"456".getBytes()); 125 put1.addColumn("f1".getBytes(),"Column_3".getBytes(),"789".getBytes()); 126 127 Put put2 = new Put(String.valueOf("1445320222119").getBytes()); 128 129 put2.addColumn("f1".getBytes(),"Column_1".getBytes(),"321".getBytes()); 130 put2.addColumn("f1".getBytes(),"Column_2".getBytes(),"654".getBytes()); 131 put2.addColumn("f1".getBytes(),"Column_3".getBytes(),"987".getBytes()); 132 133 List<Put> puts = new ArrayList<Put>(); 134 puts.add(put1); 135 puts.add(put2); 136 hTable.put(puts); 137 }catch(Exception e){ 138 e.printStackTrace(); 139 }finally{ 140 try { 141 if (null != hTable) { 142 hTable.close(); 143 } 144 }catch(Exception e){ 145 e.printStackTrace(); 146 } 147 } 148 } 149 150 public static void main(String args[]){ 151 HbaseTest test = new HbaseTest(); 152 test.init(); 153 test.createTable(); 154 test.insertData(); 155 test.query(); 156 } 157 158 159 }

?

?

Storm安裝配置與代碼框架

拓撲構造:
編寫topology實體類,在構造方法中加入配置參數,序列化等。通過CommandlLine獲取啟動時的workers與calc數量,最終調用StormSubmitter的submitTopologyWithProgressBar,傳入topo的名稱,配置項,以及TopologyBuilder實例。


數據接收Spout:

Storm從kafka中獲取數據,創建于BasicTopology,其中配置參數:

kafka.brokerZkStr Kafka使用的zookeeper服務器地址

kafka.brokerZkPath 保存offset的zookeeper服務器地址

kafka.offset.zkPort 保存offset的zookeeper端口 默認2181

kafka.offset.zkRoot 保存offset的zookeeper路徑 /kafka-offset

stateUpdateIntervalMs 把offset信息寫入zookeeper的間隔時間 30000

spout、bolt初始化時,構建對象stormBeanFactory,其后使用getBean方法從BeanFactory中獲取對象


Bolt數據處理:

自定義bolt繼承自extendsBaseRichBolt,實現它的prepare、declareOutputFileds方法。在prepare方法中,獲取StormBeanFactory的配置,加載業務實體類。

?

?

Storm配置參數:

?

dev.zookeeper.path : '/tmp/dev-storm-zookeeper' ? ??以dev.zookeeper.path配置的值作為本地目錄,以storm.zookeeper.port配置的值作為端口,啟動一個新的zookeeper服務
drpc.childopts: '-Xms768m' ?
drpc.invocations.port 3773
drpc.port : 3772
drpc.queue.size : 128
drpc.request.timeout.secs : 600
drpc.worker.threads : 64
java.library.path : ''
logviewer.appender.name : 'A1'
logviewer.childopts : '-Xms128m'
logviewr.port : 8000
metrics.reporter.register : 'org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsReporter'
nimbus.childopts : '-Xmx1024m -javaagent:/usr/hdp/current/storm-nimbus/contrib/storm-jmxetric/lib/jmxetric-1.0.4.jar=host=localhost,port=8649,wireformat31x-true...'
nimbus.cleanup.inbox.freq.secs : 600
nimbus.file.copy.exiration.secs : 600

storm.yaml

nimbus.host ?nimbus的配置地址

nimbus.inbox.jar.expiration.secs ??主要負責清理nimbus的inbox文件夾最后一次修改時間,默認3600秒

nimbus.monitor.freq.secs : 120
nimbus.reassign : true ?當發現task失敗時nimbus是否重新分配執行。默認為真,不建議修改
nimbus.supervisor.timeout.secs : 60
nimbus.task.launch.secs : 120
nimbus.task.timeout.secs : 30 ?心跳超時時間,超時后nimbus會認為task死掉并重分配給另一個地址
nimbus.thrift.max_buffer_size : 1048576
nimbus.thrift.port : 6627
nimbus.topology.validator : 'backtype.storm.nimbus.DefaultTopologyValidator'
storm.cluster.metrics.consumer.register : [{"class" : "org.apache.hadoop.metrics2.sink.storm.Strorm.StormTimeLineMetricsReporter"}]
storm.cluster.mode : 'distributed'
storm.local.dir : '/storage/disk1/hadoop/storm'
storm.local.mode.zmq : false
storm.log.dir : '/var/log/storm'
storm.messaging.netty.buffer_size : 5242880 ?為每次批量發送的Tuple 序列化之后的Task Message 消息的大小
storm.messaging.netty.client_worker_threads : 10 ?指定netty服務器工作線程數量?
storm.messaging.netty.max_retries : 60 ?指定最大重試次數
storm.messaging.netty.max_wait_ms : 2000 ?指定最大等待時間(毫秒)
storm.messaging.netty.min_wait_ms : 100?指定最小等待時間(毫秒)
storm.messaging.netty.server_worker_threads : 10?指定netty服務器工作線程數量
storm.messaging.transport : 'backtype.storm.messaging.netty.Context'?指定傳輸協議
storm.thrift.transport : 'backtype.storm.security.auth.SimpleTransportPlugin'
storm.zookeeper.connection.timeout : 15000
storm.zookeeper.port : 2181
storm.zookeeper.retry.interval : 1000
storm.zookeeper.retry.intervalceiling.millis : 30000
storm.zookeeper.retry.times : 5
storm.zookeeper.root : '/storm' ?ZooKeeper中Storm的根目錄位置
storm.zookeeper.servers : ['',''.....] ??zookeeper服務器列表
storm.zookeeper.session.timeout : 20000 ?客戶端連接ZooKeeper超時時間
supervisor.childopts : ? ?在storm-deploy項目中使用,用來配置supervisor守護進程的jvm選項
supervisor.heartbeat.frequency.secs : 5 ?supervisor心跳發送頻率(多久發送一次)
supervisor.monitor.frequency.secs : 3 ?supervisor檢查worker心跳的頻率
supervisor.slots.ports : [6700,6701,....] ??supervisor上能夠運行workers的端口列表.每個worker占用一個端口,且每個端口只運行一個worker.通過這項配置可以調整每臺機器上運行的worker數.(調整slot數/每機)
supervisor.worker.start.timeout.secs : 120
supervisor.worker.timeout.secs : 30 ?supervisor中的worker心跳超時時間,一旦超時supervisor會嘗試重啟worker進程.
task.heartbeat.frequency.secs : 3 ?task匯報狀態心跳時間間隔
task.refresh.poll.secs : 10 ?ask與其他tasks之間鏈接同步的頻率.(如果task被重分配,其他tasks向它發送消息需要刷新連接).一般來講,重分配發生時其他tasks會理解得到通知。該配置僅僅為了防止未通知的情況。
topology.acker.executors : null
topology.builtin.metrics.bucket.size.secs : 60
topology.debug : false
topology.disruptor.wait.strategy : 'com.lmax.disruptor.BlockingWaitStrategy'
topology.enable.message.timeouts : true
topology.error.throttle.interval.secs : 10
topology.executor.receive.buffer.size : 1024
topology.executor.send.buffer.size : 1024
topology.fall.back.on.java.serialization : true
topology.kryo.factory : 'backtype.storm.serialization.DefaultKryoFactory'
topology.max.error.report.per.interval : 5
topology.max.spout.pending : null ?一個spout task中處于pending狀態的最大的tuples數量.該配置應用于單個task,而不是整個spouts或topology.
topology.max.task.parallelism : null ?在一個topology中能夠允許的最大組件并行度.該項配置主要用在本地模式中測試線程數限制.
topology.message.timeout.secs : 30 ?topology中spout發送消息的最大處理超時時間.如果一條消息在該時間窗口內未被成功ack,Storm會告知spout這條消息失敗。而部分spout實現了失敗消息重播功能。
topology.metrics.aggregate.metric.evict.secs : 5
topology.metrics.aggregate.per.worker : true
topology.metrics.consumer.register :
topology.metrics.expand.map.type : true
topology.metrics.metric.name.separator : ','
topology.optimize : true
topology.skip.missing.kryo.registrations : false ?Storm是否應該跳過它不能識別的kryo序列化方案.如果設置為否task可能會裝載失敗或者在運行時拋出錯誤.
topology.sleep.spout.wait.strategy.time.ms : 1
topology.spoout.wait.strategy : 'backtype.storm.spout.SleeSpoutWaitStrategy'
topology.state.synchronization.timeout.secs : 60
topology.stats.sample.rate : 0.05
topology.tick.tuple.freq.secs : null
topology.transfer.buffer.size : 1024
topology.trident.batch.emit.interval.millis : 500
topology.tuple.serializer : 'backtype.storm.serialization.types.ListDelegateSerializer'
topology.worker.childopts : null
topology.worker.shared.thread.pool.size : 4
topology.workers : 40 ?執行該topology集群中應當啟動的進程數量.每個進程內部將以線程方式執行一定數目的tasks.topology的組件結合該參數和并行度提示來優化性能
transactional.zookeeper.port : null
transactional.zookeeper.root : '/transactional'
transactional.zookeeper.servers : null
ui.childopts : '-Xmx2048m'
ui.filter : null
ui.port : 8744 ?Storm UI的服務端口
worker.childopts :
worker.heartbeet.frequency.secs : 1
zmq.hwm : 0
zmq.linger.millis : 5000 ?當連接關閉時,鏈接嘗試重新發送消息到目標主機的持續時長.這是一個不常用的高級選項,基本上可以忽略.
zmq.threads : 1 ?每個worker進程內zeromq通訊用到的線程數

?

?

storm代碼框架總結

基類topology,BasicTopology.java

1 import java.io.UnsupportedEncodingException; 2 import java.math.BigDecimal; 3 import java.util.Date; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import org.apache.commons.cli.CommandLine; 9 import org.apache.commons.cli.CommandLineParser; 10 import org.apache.commons.cli.DefaultParser; 11 import org.apache.commons.cli.HelpFormatter; 12 import org.apache.commons.cli.Options; 13 import org.apache.commons.lang3.StringUtils; 14 import org.apache.storm.guava.base.Preconditions; 15 import org.edm.storm.topo.util.DelayKafkaSpout; 16 import org.edm.storm.topo.util.StormBeanFactory; 17 import org.joda.time.DateTime; 18 19 import storm.kafka.BrokerHosts; 20 import storm.kafka.KafkaSpout; 21 import storm.kafka.SpoutConfig; 22 import storm.kafka.ZkHosts; 23 import backtype.storm.Config; 24 import backtype.storm.LocalCluster; 25 import backtype.storm.StormSubmitter; 26 import backtype.storm.topology.TopologyBuilder; 27 import backtype.storm.tuple.Fields; 28 29 public abstract class BasicTopology { 30 31 public static final String HASH_TAG = "hashTag"; 32 33 public static final Fields HASH_FIELDS = new Fields(HASH_TAG); 34 35 protected Options options = new Options(); 36 37 protected StormBeanFactory stormBeanFactory; 38 39 protected Config config = new Config(); 40 41 protected String configFile; 42 43 public BasicTopology(){ 44 config.setFallBackOnJavaSerialization(false); 45 46 config.setSkipMissingKryoRegistrations(false); 47 config.registerSerialization(Date.class); 48 config.registerSerialization(BigDecimal.class); 49 config.registerSerialization(HashMap.class); 50 config.registerSerialization(Map.class); 51 52 options.addOption("name", true, "拓撲運行時名稱"); 53 options.addOption("conf", false, "配置文件路徑"); 54 options.addOption("workers", true, "虛擬機數量"); 55 } 56 57 protected void setupConfig(CommandLine cmd) throws UnsupportedEncodingException{ 58 //配置文件名稱 59 String confLocation = cmd.getOptionValue("conf",getConfigName()); 60 //創建stormBeanFactory 61 stormBeanFactory = new StormBeanFactory(confLocation); 62 Map<String,Object> stormConfig = stormBeanFactory.getBean("stormConfig",Map.class); 63 Preconditions.checkNotNull(stormConfig); 64 config.putAll(stormConfig); 65 config.put(StormBeanFactory.SPRING_BEAN_FACTORY_XML, stormBeanFactory.getXml()); 66 //先默認加載,然后再加載命令行 67 String numWorkers = cmd.getOptionValue("workers"); 68 if(numWorkers != null){ 69 config.setNumWorkers(Integer.parseInt(numWorkers)); 70 }else{ 71 config.setNumWorkers(getNumWorkers()); 72 } 73 config.put(Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS, 180); 74 config.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 2000); 75 config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384); 76 config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384); 77 config.put(Config.TOPOLOGY_ACKER_EXECUTORS, config.get(Config.TOPOLOGY_WORKERS)); 78 } 79 80 @SuppressWarnings("unchecked") 81 protected SpoutConfig getSpoutConfig(String topic){ 82 String brokerZkStr = (String)config.get("kafka.brokerZkStr"); 83 String brokerZkPath = (String)config.get("kafka.brokerZkPath"); 84 85 List<String> zkServers = (List<String>)config.get("kafka.offset.zkServers"); 86 Integer zkPort = Integer.parseInt(String.valueOf(config.get("kafka.offset.zkPort"))); 87 String zkRoot = (String)config.get("kafka.offset.zkRoot"); 88 String id = StringUtils.join(getTopoName(),"-",topic); 89 BrokerHosts kafkaBrokerZk = new ZkHosts(brokerZkStr, brokerZkPath); 90 SpoutConfig spoutConfig = new SpoutConfig(kafkaBrokerZk, topic, zkRoot, id); 91 spoutConfig.zkServers = zkServers; 92 spoutConfig.zkPort = zkPort; 93 spoutConfig.zkRoot = zkRoot; 94 spoutConfig.stateUpdateIntervalMs = 30000; 95 return spoutConfig; 96 } 97 98 //創建kafkaspout 99 public KafkaSpout getKafkaSpout(String topic){ 100 SpoutConfig spoutConfig = getSpoutConfig(topic); 101 return new DelayKafkaSpout(spoutConfig); 102 } 103 104 105 /** 106 * 拓撲可部署多次,但從kafka獲取數據,做唯一次過濾等用的 107 * 108 * @return 109 */ 110 public abstract String getTopoName(); 111 112 public abstract String getConfigName(); 113 114 public abstract int getNumWorkers(); 115 116 public void registerKryo(Config config){ 117 118 } 119 120 public abstract void addOptions(Options options); 121 122 public abstract void setupOptionValue(CommandLine cmd); 123 124 public abstract void createTopology(TopologyBuilder builder); 125 126 public void runLocat(String[] args) throws Exception{ 127 CommandLineParser parser = new DefaultParser(); 128 CommandLine cmd = parser.parse(options, args); 129 HelpFormatter formatter = new HelpFormatter(); 130 formatter.printHelp("topology", options); 131 setupConfig(cmd); 132 133 config.setDebug(true); 134 config.setNumWorkers(1); 135 TopologyBuilder builder = new TopologyBuilder(); 136 createTopology(builder); 137 LocalCluster cluster = new LocalCluster(); 138 String topoName = cmd.getOptionValue("name", 139 StringUtils.join(getTopoName(), "-", new DateTime().toString("yyyyMMdd-HHmmss"))); 140 cluster.submitTopology(topoName,config,builder.createTopology()); 141 142 } 143 144 public void run(String args[]) throws Exception{ 145 CommandLineParser parser = new DefaultParser(); 146 CommandLine cmd = parser.parse(options, args); 147 HelpFormatter formatter = new HelpFormatter(); 148 formatter.printHelp("topology", options); 149 setupConfig(cmd); 150 setupOptionValue(cmd); 151 152 TopologyBuilder builder = new TopologyBuilder(); 153 createTopology(builder); 154 String topoName = cmd.getOptionValue("name",StringUtils.join(getTopoName(),new DateTime().toString("yyyyMMdd-HHmmss"))); 155 StormSubmitter.submitTopologyWithProgressBar(topoName, config, builder.createTopology()); 156 } 157 }

?

?用于實現數據流spout,bolt的業務實現Topology:

1 import org.apache.commons.cli.CommandLine; 2 import org.apache.commons.cli.Options; 3 4 import storm.kafka.KafkaSpout; 5 6 import backtype.storm.topology.TopologyBuilder; 7 8 import com.practice.impl.BasicTopology; 9 10 public class LbsCalcTopology extends BasicTopology{ 11 12 private int spoutParallelism = 1; 13 14 private int onceParallelism = 1; 15 16 private int calculateParallelism = 1; 17 18 19 @Override 20 public void addOptions(Options options) { 21 options.addOption("spout",true,"spoutParallelism"); 22 options.addOption("once",true,"onceParallelism"); 23 options.addOption("calc",true,"calculateParallelism"); 24 } 25 26 @Override 27 public void setupOptionValue(CommandLine cmd) { 28 spoutParallelism = Integer.parseInt(cmd.getOptionValue("spout","1")); 29 onceParallelism = Integer.parseInt(cmd.getOptionValue("once","1")); 30 calculateParallelism = Integer.parseInt(cmd.getOptionValue("calc","1")); 31 } 32 33 @Override 34 public void createTopology(TopologyBuilder builder) { 35 KafkaSpout kafkaSpout = getKafkaSpout("lbs"); 36 LbsOnceBolt exactlyOnceBolt = new LbsOnceBolt(getTopoName(),"lbs","lbs"); 37 LbsCalcBolt calculateBolt = new LbsCalcBolt(); 38 39 builder.setSpout("kafkaSpout", kafkaSpout,spoutParallelism); 40 builder.setBolt("onceParallelism", exactlyOnceBolt,onceParallelism).shuffleGrouping("kafkaSpout"); 41 builder.setBolt("calculateBolt", calculateBolt, calculateParallelism).fieldsGrouping("onceParallelism", BasicTopology.HASH_FIELDS); 42 } 43 44 @Override 45 public String getTopoName() { 46 return "lbs"; 47 } 48 49 @Override 50 public String getConfigName() { 51 return "lbs-topology.xml"; 52 } 53 54 @Override 55 public int getNumWorkers() { 56 return 3; 57 } 58 59 public static void main(String args[]) throws Exception{ 60 LbsCalcTopology topo = new LbsCalcTopology(); 61 topo.run(args); 62 } 63 }

?

具體業務時間bolt:

1 import java.util.Map; 2 3 import backtype.storm.task.OutputCollector; 4 import backtype.storm.task.TopologyContext; 5 import backtype.storm.topology.OutputFieldsDeclarer; 6 import backtype.storm.topology.base.BaseRichBolt; 7 import backtype.storm.tuple.Tuple; 8 9 public class LbsCalcBolt extends BaseRichBolt{ 10 11 @Override 12 public void execute(Tuple input) { 13 try{ 14 String msg = input.getString(0); 15 if(msg != null){ 16 System.out.println(msg); 17 } 18 }catch(Exception e){ 19 e.printStackTrace(); 20 } 21 } 22 23 @Override 24 public void prepare(Map arg0, TopologyContext arg1, OutputCollector arg2) { 25 // TODO Auto-generated method stub 26 27 } 28 29 @Override 30 public void declareOutputFields(OutputFieldsDeclarer arg0) { 31 // TODO Auto-generated method stub 32 33 } 34 35 }

?

?

Kafka安裝配置與代碼框架

?

1、主要配置參數說明

-- 日志數據存儲目錄
log.dirs = /storage/disk17/kafka-logs

-- Kafka server端口
port = 6667

-- 強制切分日志文件的間隔時間(切分的文件大小由log.segment.bytes決定,默認1073741824 bytes)
log.roll.hours = 168

-- 日志文件保留時間
log.retention.hours = 168

-- 每次flush到磁盤的最大消息數量,數量太大會讓寫磁盤時間過長(IO阻塞),導致客戶端發生延遲
log.flush.interval.messages=10000

-- 每次flush消息的間隔時間
log.flush.scheduler.interval.ms=3000

-- zookeeper 連接超時時間
zookeeper.connection.timeout.ms = 20000

-- zookeeper 集群的節點地址,多個以,號分隔
zookeeper.connect=127.0.0.1:2181

-- zooKeeper集群中leader和follower之間的同步時間
zookeeper.sync.time.ms=2000

-- 是否允許自動創建主題
auto.create.topics.enable=true

-- 默認復制因子數量
default.replication.factor=1

-- 默認分區數量
num.partitions=1


2、消息以及日志數據的存儲策略

kafka和JMS(Java Message Service)實現(activeMQ)不同的是:即使消息被消費,消息仍然不會被立即刪除,日志文件將會根據broker中的配置要求,保留一定的時間之后刪除,比如log.retention.hours=168,那么七天后,文件會被清除,無論其中的消息是否被消費。kafka通過這種簡單的手段,來釋放磁盤空間,以及減少消息消費之后對文件內容改動的磁盤IO開銷。

對于consumer而言,它需要保存消費消息的offset(如果不指定則存儲在默認的zookeeper目錄kafak-broker),對于offset的保存和使用,由consumer來控制。當consumer正常消費消息時,offset將會"線性"的向前驅動,即消息將依次順序被消費。事實上consumer可以使用任意順序消費消息,它只需要將offset重置為任意值。

kafka集群幾乎不需要維護任何consumer和producer狀態信息,這些信息由zookeeper保存。因此producer和consumer的客戶端實現非常輕量級,它們可以隨意離開,而不會對集群造成額外的影響。

3、常用操作命令

3.1、創建消息主題(kafka topic)

./kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic topicName --partitions 2 --replication-factor 3 --create

--zookeeper zookeeper 服務端地址
--topic 消息主題名稱
--partitions 分區數量(如果不指定數量則由Kafka的配置決定)
--replication-factor 復制因子數量(副本數量,如果不指定數量則由Kafka的配置決定)
--create 創建主題

3.2、刪除消息主題

* 慎用,這條命令只是刪除zookeeper中主題的元數據,日志文件并不會刪除,不建議直接刪除日志文件。如需刪除,安全的措施是停止kafka集群服務,然后執行這條命令再刪除日志文件,最后恢復服務,恢復服務后執行--describe命令(3.3)檢查主題是否已經移除!

./kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper 127.0.0.1:2181 --topic topicName

3.3、查看消息主題

./kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic topicName --describe

--zookeeper zookeeper 服務端地址
--topic 消息主題名稱
----describe 主題信息

命令將輸出如下信息,如topicName主題有2個分區,復制因子為3,以及主題所在的leader。

Topic:topicName PartitionCount:2 ReplicationFactor:3 Configs:
Topic: topicName Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
Topic: topicName Partition: 1 Leader: 0 Replicas: 0,2,1 Isr: 0,2,1

3.4、其他命令

-- 列出所有的主題
./kafka-topics.sh --zookeeper 127.0.0.1:2181 --list

-- 修改主題分區數量
./kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic topicName --partitions 4 --alter

?

?

Redis安裝配置與代碼框架

?

?

Jettry配置與代碼框架

?Jetty服務一共啟動8個線程進行數據的接入。存儲于bLOCKINGqUEUE中,進行消費,啟啟動多個線程的作用在于并發消費接入的報文數據。同時,同一事件啟動多個服務,通過nginx進行負載均衡。

一、Jetty服務的啟動

1、創建ApplicationContext,通過AbstractApplicationContext創建。
AbstractApplicationContext applicationContext = new FileSystemXmlApplicationContext(configXmlFile);

2、創建PlatformMBeanServer
MBeanServer mbs = java.lang.management.ManagementFactory.getPlatformMBeanServer();

3、注冊ApplicationServer

ObjectName mbeanName = getApplicationObjectName(); ApplicationServer applicationServer = new ApplicationServer(); .... mbs.registerMBean(applicationServer,mbeanNamer);

?

二、Jettry服務的停止
......

?

?

?

HIVE安裝配置與代碼框架

?

?

Rstudio與Spark安裝配置與代碼框架

?

?

Nginx配置

?

user www-data; #運行用戶
worker_processes 1; #啟動進程,通常設置成和cpu的數量相等
error_log /var/log/nginx/error.log; #全局錯誤日志及PID文件
pid /var/run/nginx.pid;#PID文件

#工作模式及連接數上限
events {
use epoll; #epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內核,可以大大提高nginx的性能
worker_connections 1024;#單個后臺worker process進程的最大并發鏈接數
# multi_accept on;
}

#設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
#設定mime類型,類型由mime.type文件定義
include /etc/nginx/mime.types;
default_type application/octet-stream;
#設定日志格式
access_log /var/log/nginx/access.log;

#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對于普通應用,
#必須設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
sendfile on;
#tcp_nopush on;

#連接超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;

#開啟gzip壓縮
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

#設定請求緩沖
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

#設定負載均衡的服務器列表
upstream mysvr {
#weigth參數表示權值,權值越高被分配到的幾率越大
#本機上的Squid開啟3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}


server {
#偵聽80端口
listen 80;
#定義使用www.xx.com訪問
server_name www.xx.com;(虛擬主機ip)

#設定本虛擬主機的訪問日志
access_log logs/www.xx.com.access.log main;

#默認請求
location / {
root /root; #定義服務器的默認網站根目錄位置
index index.php index.html index.htm; #定義首頁索引文件的名稱

fastcgi_pass www.xx.com;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}

# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /root;
}

#靜態文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
#過期30天,靜態文件不怎么更新,過期可以設大一點,如果頻繁更新,則可以設置得小一點。
expires 30d;
}
#PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.
location ~ \.php$ {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
include fastcgi_params;
}
#設定查看Nginx狀態的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#禁止訪問 .htxxx 文件
location ~ /\.ht {
deny all;
}

}
}

?

?

Sentry配置

?

?

Hue配置(3.11版本)

hue安裝
rpm -ivh hue-* --force --nodeps
rpm -ivh sentry-* --force --nodeps

hue 啟動
/usr/lib/hue/build/env/bin/hue runserver ip:port > /var/log/hue/hue-start.out 2> /var/log/hue/hue-error.out &


spark livy 集成
hue sqlited is locked
desktopdefault_hdfs_superuserhadoopHDFS管理用戶desktophttp_host10.10.4.125Hue Web Server所在主機/IPdesktophttp_port8000Hue Web Server服務端口desktopserver_userhadoop運行Hue Web Server的進程用戶desktopserver_grouphadoop運行Hue Web Server的進程用戶組desktopdefault_useryanjunHue管理員


1. 新建hue用戶
#usradd hue
將包放到/home/hue/底下(可以自己選擇位置)
#rpm -ivh hue-* --force --nodeps
安裝完成之后,hue的目錄在/usr/lib/hue,配置文件目錄在/etc/hue/conf/hue.ini
2. 配置hue(/etc/hue/conf/hue.ini)
[beeswax]
# Host where HiveServer2 is running.
# If Kerberos security is enabled, use fully-qualified domain name (FQDN).
hive_server_host=172.19.189.50(hiveserver2的地址)

# Port where HiveServer2 Thrift server runs on.
hive_server_port=10010(hiveserver2端口)

# Hive configuration directory, where hive-site.xml is located
hive_conf_dir=/etc/conf(hive配置文件路徑)

# Timeout in seconds for thrift calls to Hive service
server_conn_timeout=120(連接hive超時時間)

# Choose whether to use the old GetLog() thrift call from before Hive 0.14 to retrieve the logs.
# If false, use the FetchResults() thrift call from Hive 1.0 or more instead.
## use_get_log_api=false

# Limit the number of partitions that can be listed.
list_partitions_limit=10000(不限制時查詢界面上list的partition數據)

# The maximum number of partitions that will be included in the SELECT * LIMIT sample query for partitioned tables.
query_partitions_limit=10(查詢語句中最多查詢10個partition)

# A limit to the number of cells (rows * columns) that can be downloaded from a query
# (e.g. - 10K rows * 1K columns = 10M cells.)
# A value of -1 means there will be no limit.
download_cell_limit=10000000(download最大量)

# Hue will try to close the Hive query when the user leaves the editor page.
# This will free all the query resources in HiveServer2, but also make its results inaccessible.
close_queries=true(關閉界面時直接斷開該用戶與hiveserver2的連接)

# Thrift version to use when communicating with HiveServer2.
# New column format is from version 7.
thrift_version=7(默認值,不建議改會報錯)

[[yarn_clusters]]
[[[default]]]
# Enter the host on which you are running the ResourceManager
resourcemanager_host= (RM地址)

# The port where the ResourceManager IPC listens on
resourcemanager_port=8032(RM端口)

# Whether to submit jobs to this cluster
submit_to=True

# Resource Manager logical name (required for HA)
logical_name=ActiveResourceManager(HA,給activeRM命名)

# Change this if your YARN cluster is Kerberos-secured
## security_enabled=false

# URL of the ResourceManager API
resourcemanager_api_url=http://172.19.xxx.xx:8088(RM URL)

# URL of the ProxyServer API
## proxy_api_url=http://localhost:8088

# URL of the HistoryServer API
history_server_api_url=http://172.19.xx.xx:19888

# URL of the Spark History Server
#spark_history_server_url=http://172.30.xx.xx:18088

# In secure mode (HTTPS), if SSL certificates from YARN Rest APIs
# have to be verified against certificate authority
## ssl_cert_ca_verify=True

# HA support by specifying multiple clusters.
# Redefine different properties there.
# e.g.

[[[ha]]]
# Resource Manager logical name (required for HA)
logical_name=StandbyResourceManager(RM的HA從節點name)

# Un-comment to enable
submit_to=True

# URL of the ResourceManager API
resourcemanager_api_url=http://172.19.189.50:8088(RM從節點地址)

[hadoop]
# Configuration for HDFS NameNode
# ------------------------------------------------------------------------
[[hdfs_clusters]]
# HA support by using HttpFs
[[[default]]]
# Enter the filesystem uri
fs_defaultfs=hdfs://hdp(HDFS的filesystem名字)

# NameNode logical name.
logical_name=MasterNamenode(NN name)

# Use WebHdfs/HttpFs as the communication mechanism.
# Domain should be the NameNode or HttpFs host.
# Default port is 14000 for HttpFs.
webhdfs_url=http://172.19.189.50:50070/webhdfs/v1(hue的獲取hdfs的nn HA是通過WebHDFS來切換的,這個地址是啟動Webhdfs的地址)

# Change this if your HDFS cluster is Kerberos-secured
## security_enabled=false

# In secure mode (HTTPS), if SSL certificates from YARN Rest APIs
# have to be verified against certificate authority
## ssl_cert_ca_verify=True

# Directory of the Hadoop configuration
hadoop_conf_dir=/etc/hadoop/conf(hadoop配置文件路徑)

[desktop]
# Set this to a random string, the longer the better.
# This is used for secure hashing in the session store.
## secret_key=

# Execute this script to produce the Django secret key. This will be used when
# 'secret_key' is not set.
## secret_key_script=

# Webserver listens on this address and port
http_host=0.0.0.0
http_port=8888

# Time zone name
time_zone=Asia/Shanghai

# Enable or disable Django debug mode.
#django_debug_mode=false

# Enable or disable database debug mode.
#database_logging=false

# Whether to send debug messages from JavaScript to the server logs.
#send_dbug_messages=true

# Enable or disable backtrace for server error
http_500_debug_mode=true

# Enable or disable memory profiling.
## memory_profiler=false

# Server email for internal error messages
## django_server_email='hue@localhost.localdomain'

# Email backend
## django_email_backend=django.core.mail.backends.smtp.EmailBackend

# Webserver runs as this user
server_user=hue
server_group=hadoop(hue界面登錄用戶)

# This should be the Hue admin and proxy user
default_user=hue(hue管理員用戶)

# This should be the hadoop cluster admin
default_hdfs_superuser=hue(hue在hdfs上的管理員用戶)
[[database]]
#engine=sqlite3
#name=/var/lib/hue/desktop.db
# Database engine is typically one of:
# postgresql_psycopg2, mysql, sqlite3 or oracle.
# Note that for sqlite3, 'name', below is a path to the filename. For other backends, it is the database name
# Note for Oracle, options={"threaded":true} must be set in order to avoid crashes.
# Note for Oracle, you can use the Oracle Service Name by setting "host=" and "port=" and then "name=<host>:<port>/<service_name>".
# Note for MariaDB use the 'mysql' engine.
engine=mysql
host=172.30.115.60
port=3306
user=hue
password=hue
name=hue
(hue的元數據存儲位置)
# Execute this script to produce the database password. This will be used when 'password' is not set.
## password_script=/path/script
## name=desktop/desktop.db
## options={}

[librdbms]
# The RDBMS app can have any number of databases configured in the databases
# section. A database is known by its section name
# (IE sqlite, mysql, psql, and oracle in the list below).
[[databases]]
# sqlite configuration.
## [[[sqlite]]]
# Name to show in the UI.
## nice_name=SQLite

# For SQLite, name defines the path to the database.
## name=/tmp/sqlite.db

# Database backend to use.
## engine=sqlite

# Database options to send to the server when connecting.
# https://docs.djangoproject.com/en/1.4/ref/databases/
## options={}

# mysql, oracle, or postgresql configuration.
[[[mysql]]](開啟mysql)
# Name to show in the UI.
nice_name="HUE DB"(界面顯示mysql的名字)

# For MySQL and PostgreSQL, name is the name of the database.
# For Oracle, Name is instance of the Oracle server. For express edition
# this is 'xe' by default.
name=hue(連接的mysql數據庫)

# Database backend to use. This can be:
# 1. mysql
# 2. postgresql
# 3. oracle
engine=mysql(連接引擎)

# IP or hostname of the database to connect to.
host=172.30.115.60(mysql地址)

# Port the database server is listening to. Defaults are:
# 1. MySQL: 3306
# 2. PostgreSQL: 5432
# 3. Oracle Express Edition: 1521
port=3306(端口)

# Username to authenticate with when connecting to the database.
user=hue(連接數據庫的用戶)

# Password matching the username to authenticate with when
# connecting to the database.
password=hue(連接數據庫的密碼)

# Database options to send to the server when connecting.
# https://docs.djangoproject.com/en/1.4/ref/databases/
## options={}

修改hue源碼
1. /usr/lib/hue/desktop/libs/notebook/src/notebook/connectors/hiveserver2.py
添加調用query_server方法:
def _get_db(self, snippet):

LOG.info('log by ck get_db')
if snippet['type'] == 'hive':

name = 'beeswax'

elif snippet['type'] == 'impala':

name = 'impala'

else:

name = 'spark-sql'

?

return dbms.get_by_type(self.user, 'data', query_server=get_query_server_config_for_meta(name=name))

修改計算(exector)的執行方法
@query_error_handler
def execute(self, notebook, snippet):
db = self._get_db(snippet)

statement = self._get_current_statement(db, snippet)
session = self._get_session(notebook, snippet['type'])
query = self._prepare_hql_query(snippet, statement['statement'], session)

try:
if statement.get('statement_id') == 0:
db.use(query.database)
handle = db.client.query(query)
except QueryServerException, ex:
raise QueryError(ex.message, handle=statement)

# All good
server_id, server_guid = handle.get()
response = {
'secret': server_id,
'guid': server_guid,
'operation_type': handle.operation_type,
'has_result_set': handle.has_result_set,
'modified_row_count': handle.modified_row_count,
'log_context': handle.log_context,
}
response.update(statement)

return response
2. /usr/lib/hue/apps/beeswax/src/beeswax/server/dbms.py
添加query執行的路徑:(修改ip為spark的ip和端口)
def get_query_server_config_for_meta(name='beeswax', server=None):

if name == 'impala':

from impala.dbms import get_query_server_config as impala_query_server_config

query_server = impala_query_server_config()

else:

kerberos_principal = hive_site.get_hiveserver2_kerberos_principal(HIVE_SERVER_HOST.get())

?

query_server = {

'server_name': 'beeswax', # Aka HiveServer2 now

'server_host': '172.30.115.58',#HIVE_SERVER_HOST.get(),

'server_port': '10010',#HIVE_SERVER_PORT.get(),

'principal': kerberos_principal,

'http_url': '%(protocol)s://%(host)s:%(port)s/%(end_point)s' % {

'protocol': 'https' if hiveserver2_use_ssl() else 'http',

'host': '172.30.115.58',#HIVE_SERVER_HOST.get(),

'port': hive_site.hiveserver2_thrift_http_port(),

'end_point': hive_site.hiveserver2_thrift_http_path()

},

'transport_mode': 'http' if hive_site.hiveserver2_transport_mode() == 'HTTP' else 'socket',

'auth_username': AUTH_USERNAME.get(),

'auth_password': AUTH_PASSWORD.get()

}

?

if name == 'sparksql': # Spark SQL is almost the same as Hive

from spark.conf import SQL_SERVER_HOST as SPARK_SERVER_HOST, SQL_SERVER_PORT as SPARK_SERVER_PORT

?

query_server.update({

'server_name': 'sparksql',

'server_host': SPARK_SERVER_HOST.get(),

'server_port': SPARK_SERVER_PORT.get()

})

?

debug_query_server = query_server.copy()

debug_query_server['auth_password_used'] = bool(debug_query_server.pop('auth_password'))

LOG.info("Query Server: %s" % debug_query_server)

?

return query_server

添加query的cache locking
DBMS_CACHE = {}

DBMS_CACHE_LOCK = threading.Lock()


DBMS_META_CACHE = {}

DBMS_META_CACHE_LOCK = threading.Lock()

DBMS_DATA_CACHE = {}

DBMS_DATA_CACHE_LOCK = threading.Lock()

?

?

def get(user, query_server=None):

global DBMS_CACHE

global DBMS_CACHE_LOCK

?

if query_server is None:

query_server = get_query_server_config()

?

DBMS_CACHE_LOCK.acquire()

try:

DBMS_CACHE.setdefault(user.username, {})

?

if query_server['server_name'] not in DBMS_CACHE[user.username]:

# Avoid circular dependency

from beeswax.server.hive_server2_lib import HiveServerClientCompatible

?

if query_server['server_name'] == 'impala':

from impala.dbms import ImpalaDbms

from impala.server import ImpalaServerClient

DBMS_CACHE[user.username][query_server['server_name']] = ImpalaDbms(HiveServerClientCompatible(ImpalaServerClient(query_server, user)), QueryHistory.SERVER_TYPE[1][0])

else:

from beeswax.server.hive_server2_lib import HiveServerClient

DBMS_CACHE[user.username][query_server['server_name']] = HiveServer2Dbms(HiveServerClientCompatible(HiveServerClient(query_server, user)), QueryHistory.SERVER_TYPE[1][0])

?

return DBMS_CACHE[user.username][query_server['server_name']]

finally:

DBMS_CACHE_LOCK.release()

?

?

def get_by_type(user, type, query_server=None):

global DBMS_META_CACHE

global DBMS_META_CACHE_LOCK

global DBMS_DATA_CACHE

global DBMS_DATA_CACHE_LOCK

?

if query_server is None:

query_server = get_query_server_config()

if type == 'meta':

DBMS_META_CACHE_LOCK.acquire()

try:

DBMS_META_CACHE.setdefault(user.username, {})

?

if query_server['server_name'] not in DBMS_META_CACHE[user.username]:

# Avoid circular dependency

from beeswax.server.hive_server2_lib import HiveServerClientCompatible

?

if query_server['server_name'] == 'impala':

from impala.dbms import ImpalaDbms

from impala.server import ImpalaServerClient

DBMS_META_CACHE[user.username][query_server['server_name']] = ImpalaDbms(HiveServerClientCompatible(ImpalaServerClient(query_server, user)), QueryHistory.SERVER_TYPE[1][0])

else:

from beeswax.server.hive_server2_lib import HiveServerClient

DBMS_META_CACHE[user.username][query_server['server_name']] = HiveServer2Dbms(HiveServerClientCompatible(HiveServerClient(query_server, user)), QueryHistory.SERVER_TYPE[1][0])

?

return DBMS_META_CACHE[user.username][query_server['server_name']]

finally:

DBMS_META_CACHE_LOCK.release()

else:

DBMS_DATA_CACHE_LOCK.acquire()

try:

DBMS_DATA_CACHE.setdefault(user.username, {})

?

if query_server['server_name'] not in DBMS_DATA_CACHE[user.username]:

# Avoid circular dependency

from beeswax.server.hive_server2_lib import HiveServerClientCompatible

?

if query_server['server_name'] == 'impala':

from impala.dbms import ImpalaDbms

from impala.server import ImpalaServerClient

DBMS_DATA_CACHE[user.username][query_server['server_name']] = ImpalaDbms(HiveServerClientCompatible(ImpalaServerClient(query_server, user)), QueryHistory.SERVER_TYPE[1][0])

else:

from beeswax.server.hive_server2_lib import HiveServerClient

DBMS_DATA_CACHE[user.username][query_server['server_name']] = HiveServer2Dbms(HiveServerClientCompatible(HiveServerClient(query_server, user)), QueryHistory.SERVER_TYPE[1][0])

?

return DBMS_DATA_CACHE[user.username][query_server['server_name']]

finally:

DBMS_DATA_CACHE_LOCK.release()

3. /usr/lib/hue/apps/filebrowser/src/filebrowser/templates/listdir.mako
刪除filebrower中的delete和drop
< !-- ko if: $root.isS3 -->
< button

?

class ="btn fileToolbarBtn delete-link" title="${_('Delete forever')}" data-bind="enable: selectedFiles().length > 0, click: deleteSelected" > < i class ="fa fa-bolt" > < / i > ${_('Delete forever')} < / button >

?

< !-- / ko -->


< ul

class ="dropdown-menu" >

< li > < a

href = "#"

class ="delete-link" title="${_('Delete forever')}" data-bind="enable: selectedFiles().length > 0, click: deleteSelected" > < i class ="fa fa-bolt" > < / i > ${_('Delete forever')} < / a > < / li >

< / ul >

4. /usr/lib/hue/apps/filebrowser/src/filebrowser/templates/listdir_components.mako
< li > < a href = "#" class ="delete-link" title="${_('Delete forever')}" data-bind="enable: $root.selectedFiles().length > 0, click: $root.deleteSelected" > < i class ="fa fa-fw fa-bolt" > < / i > ${_('Delete forever')} < / a > < / li >

5. /usr/lib/hue/apps/filebrowser/src/filebrowser/views.py
request.fs.do_as_user(request.user, request.fs.rmtree, arg['path'], True) # the old code was ('skip_trash' in request.GET)

修改hdfs配置
hdfs-site.xml文件
修改:fs.permissions.umask-mode 000
(hue建表用戶為web登錄用戶,在用spark做計算引擎時會在hdfs的表目錄中創建文件,后臺spark的用戶為hive無法寫入)

添加:添加hue用戶為hdfs代理用戶(superuser)
hadoop.proxyuser.hue.hosts *
hadoop.proxyuser.hue.groups *




?

總結

以上是生活随笔為你收集整理的主流大数据技术全体系参数与搭建与后台代码工程框架的编写(百分之70)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

波多野结衣乳巨码无在线观看 | 久9re热视频这里只有精品 | 波多野42部无码喷潮在线 | 国产成人无码av在线影院 | 亚洲精品午夜国产va久久成人 | 亚洲中文无码av永久不收费 | 久久99久久99精品中文字幕 | 国色天香社区在线视频 | 永久免费观看国产裸体美女 | 色婷婷久久一区二区三区麻豆 | 波多野结衣乳巨码无在线观看 | 一二三四在线观看免费视频 | 2020久久香蕉国产线看观看 | 欧美丰满熟妇xxxx性ppx人交 | 鲁鲁鲁爽爽爽在线视频观看 | 国产成人精品一区二区在线小狼 | 亚洲一区二区三区在线观看网站 | 永久黄网站色视频免费直播 | 国产亚洲精品久久久久久大师 | 蜜臀aⅴ国产精品久久久国产老师 | 久久精品99久久香蕉国产色戒 | 99久久无码一区人妻 | 国产亚洲精品久久久久久久久动漫 | 人妻少妇精品视频专区 | 欧美zoozzooz性欧美 | 亚洲精品国产品国语在线观看 | 人妻人人添人妻人人爱 | 久久久久免费看成人影片 | 中文字幕乱妇无码av在线 | 人妻体内射精一区二区三四 | 人人爽人人澡人人高潮 | 国产亚洲人成在线播放 | 丰腴饱满的极品熟妇 | 成在人线av无码免费 | 中文字幕无码av波多野吉衣 | 老头边吃奶边弄进去呻吟 | 性色av无码免费一区二区三区 | 久久人人爽人人爽人人片ⅴ | 久久精品国产99久久6动漫 | 300部国产真实乱 | 国产免费久久精品国产传媒 | 国产精品香蕉在线观看 | 天天躁夜夜躁狠狠是什么心态 | 曰韩少妇内射免费播放 | 丰满少妇女裸体bbw | 成人三级无码视频在线观看 | 久久久av男人的天堂 | 国产卡一卡二卡三 | 亚洲精品一区三区三区在线观看 | 亚洲综合无码久久精品综合 | 色综合久久久久综合一本到桃花网 | 99久久精品日本一区二区免费 | 国产成人综合美国十次 | 国产成人亚洲综合无码 | 成人精品视频一区二区 | 午夜精品一区二区三区的区别 | 成人片黄网站色大片免费观看 | 精品久久久久香蕉网 | 老司机亚洲精品影院 | 强奷人妻日本中文字幕 | 亚洲色欲色欲欲www在线 | 国精产品一区二区三区 | 亚洲日韩一区二区三区 | 中文字幕乱码人妻二区三区 | 国产亚洲精品久久久久久久 | 亚洲码国产精品高潮在线 | 亚洲一区二区三区国产精华液 | 午夜精品久久久久久久久 | 亚洲国产av美女网站 | aa片在线观看视频在线播放 | 日本www一道久久久免费榴莲 | 在线天堂新版最新版在线8 | 婷婷六月久久综合丁香 | 亚洲精品午夜国产va久久成人 | 波多野结衣av在线观看 | 中文无码精品a∨在线观看不卡 | 亚洲一区二区三区 | 久久国内精品自在自线 | 成人精品视频一区二区 | 久久婷婷五月综合色国产香蕉 | 一二三四社区在线中文视频 | 2020久久香蕉国产线看观看 | 亚洲熟女一区二区三区 | 中文字幕 人妻熟女 | 51国偷自产一区二区三区 | 久在线观看福利视频 | 正在播放东北夫妻内射 | 一二三四社区在线中文视频 | 欧美精品一区二区精品久久 | 国产偷国产偷精品高清尤物 | 国产无遮挡吃胸膜奶免费看 | 欧美高清在线精品一区 | 欧美亚洲国产一区二区三区 | 亚洲一区二区三区无码久久 | 狠狠综合久久久久综合网 | 欧美日韩在线亚洲综合国产人 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国语精品一区二区三区 | 国产亚洲精品久久久久久国模美 | 久精品国产欧美亚洲色aⅴ大片 | 欧美第一黄网免费网站 | 天下第一社区视频www日本 | 亚洲自偷自拍另类第1页 | 午夜福利试看120秒体验区 | 国产亚洲精品久久久ai换 | 国产精品第一区揄拍无码 | 蜜桃视频插满18在线观看 | 欧美丰满熟妇xxxx | 亚洲精品中文字幕乱码 | 丁香啪啪综合成人亚洲 | 天堂久久天堂av色综合 | 亚洲国精产品一二二线 | 狠狠躁日日躁夜夜躁2020 | 在线成人www免费观看视频 | 亚洲色成人中文字幕网站 | 人妻互换免费中文字幕 | 国产尤物精品视频 | 草草网站影院白丝内射 | 国产无遮挡吃胸膜奶免费看 | 久久精品中文字幕大胸 | 日韩欧美中文字幕公布 | 欧美激情综合亚洲一二区 | 国产精品久久久久久亚洲毛片 | 亚洲日韩一区二区三区 | 奇米影视7777久久精品 | 成人欧美一区二区三区 | 99久久久无码国产精品免费 | 国产无遮挡又黄又爽免费视频 | 欧美日韩在线亚洲综合国产人 | 中文字幕精品av一区二区五区 | 国产内射爽爽大片视频社区在线 | 午夜精品久久久久久久久 | www一区二区www免费 | 伊人久久婷婷五月综合97色 | 亚洲日韩中文字幕在线播放 | www国产精品内射老师 | 久久99精品国产.久久久久 | 精品国产福利一区二区 | 日韩精品a片一区二区三区妖精 | 黑人巨大精品欧美一区二区 | 久久国产劲爆∧v内射 | 亚洲一区二区三区无码久久 | 亚洲精品一区二区三区在线观看 | yw尤物av无码国产在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 呦交小u女精品视频 | 欧美日韩视频无码一区二区三 | 又粗又大又硬毛片免费看 | 水蜜桃色314在线观看 | 无码国产激情在线观看 | 无码福利日韩神码福利片 | 欧美怡红院免费全部视频 | 日本精品久久久久中文字幕 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产成人无码av片在线观看不卡 | 成熟女人特级毛片www免费 | 日本欧美一区二区三区乱码 | 久久久精品成人免费观看 | 中文精品久久久久人妻不卡 | 一个人看的视频www在线 | 特大黑人娇小亚洲女 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲人成影院在线观看 | 色老头在线一区二区三区 | 野狼第一精品社区 | 国产亚洲精品久久久久久久久动漫 | 无遮无挡爽爽免费视频 | 色五月五月丁香亚洲综合网 | 亚洲一区二区三区偷拍女厕 | 大地资源中文第3页 | 亚洲色欲色欲天天天www | 男女性色大片免费网站 | 人妻天天爽夜夜爽一区二区 | 人妻尝试又大又粗久久 | 国产成人久久精品流白浆 | 亚洲国产精品成人久久蜜臀 | 十八禁真人啪啪免费网站 | 国产女主播喷水视频在线观看 | 久久天天躁狠狠躁夜夜免费观看 | 国产内射老熟女aaaa | 精品厕所偷拍各类美女tp嘘嘘 | 两性色午夜免费视频 | 我要看www免费看插插视频 | 亚欧洲精品在线视频免费观看 | 日韩亚洲欧美精品综合 | 国产办公室秘书无码精品99 | 俺去俺来也在线www色官网 | 激情爆乳一区二区三区 | 国产精品久久国产三级国 | 中文字幕人妻无码一夲道 | 亚洲无人区午夜福利码高清完整版 | 无码国模国产在线观看 | 国产精品久久久久久亚洲毛片 | 久久国产自偷自偷免费一区调 | 欧美人与禽猛交狂配 | 国产精品视频免费播放 | 成人三级无码视频在线观看 | 午夜精品一区二区三区的区别 | 国产精品亚洲lv粉色 | 最新国产麻豆aⅴ精品无码 | 国产农村妇女高潮大叫 | 国产人成高清在线视频99最全资源 | 午夜福利一区二区三区在线观看 | 日本丰满护士爆乳xxxx | 97久久精品无码一区二区 | 国产九九九九九九九a片 | 伊在人天堂亚洲香蕉精品区 | 精品国精品国产自在久国产87 | 动漫av网站免费观看 | 东京一本一道一二三区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 少妇性荡欲午夜性开放视频剧场 | 红桃av一区二区三区在线无码av | 亚洲国精产品一二二线 | 中文字幕人妻丝袜二区 | 久9re热视频这里只有精品 | 欧美性猛交内射兽交老熟妇 | 欧美怡红院免费全部视频 | 内射巨臀欧美在线视频 | 牲欲强的熟妇农村老妇女视频 | 99久久婷婷国产综合精品青草免费 | 蜜臀av无码人妻精品 | 荫蒂添的好舒服视频囗交 | 内射巨臀欧美在线视频 | 国内少妇偷人精品视频免费 | 国内精品人妻无码久久久影院 | 久久综合给久久狠狠97色 | 女人高潮内射99精品 | 欧美性生交活xxxxxdddd | 十八禁真人啪啪免费网站 | 亚洲精品一区三区三区在线观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 98国产精品综合一区二区三区 | 综合网日日天干夜夜久久 | 无遮挡啪啪摇乳动态图 | 中文字幕无码人妻少妇免费 | 亚洲狠狠婷婷综合久久 | 超碰97人人射妻 | 粗大的内捧猛烈进出视频 | 人人澡人人透人人爽 | 奇米影视7777久久精品人人爽 | 亚洲国产精品久久人人爱 | 少妇被粗大的猛进出69影院 | 国产精品久久久久久亚洲影视内衣 | 久久国产自偷自偷免费一区调 | 国产无av码在线观看 | 无码播放一区二区三区 | 日本一卡二卡不卡视频查询 | 免费无码的av片在线观看 | 黑人玩弄人妻中文在线 | 亚洲国产精品一区二区第一页 | 最近免费中文字幕中文高清百度 | 动漫av一区二区在线观看 | 国产亚洲精品久久久久久国模美 | 色欲综合久久中文字幕网 | 狠狠色丁香久久婷婷综合五月 | 黑人玩弄人妻中文在线 | 无码精品人妻一区二区三区av | 欧美激情一区二区三区成人 | 国产精品丝袜黑色高跟鞋 | 狠狠色欧美亚洲狠狠色www | 又大又紧又粉嫩18p少妇 | 欧美人与禽猛交狂配 | 国产肉丝袜在线观看 | 97久久超碰中文字幕 | 久久久国产一区二区三区 | 国产av一区二区三区最新精品 | 麻豆人妻少妇精品无码专区 | 免费看少妇作爱视频 | 小泽玛莉亚一区二区视频在线 | 久久国产劲爆∧v内射 | 久久综合久久自在自线精品自 | 欧美日韩一区二区免费视频 | 麻豆果冻传媒2021精品传媒一区下载 | 在线精品国产一区二区三区 | 亚洲乱码日产精品bd | 亚洲乱码国产乱码精品精 | 亚洲区小说区激情区图片区 | 在线观看欧美一区二区三区 | 久久久久亚洲精品男人的天堂 | 人人超人人超碰超国产 | 亚洲 高清 成人 动漫 | 色偷偷人人澡人人爽人人模 | 亚洲精品久久久久avwww潮水 | 成人欧美一区二区三区黑人 | 国产区女主播在线观看 | 亚洲成色在线综合网站 | 鲁鲁鲁爽爽爽在线视频观看 | 少妇无码av无码专区在线观看 | 天天综合网天天综合色 | v一区无码内射国产 | 亚洲国产综合无码一区 | 在线播放亚洲第一字幕 | 特黄特色大片免费播放器图片 | 2019午夜福利不卡片在线 | 欧美性猛交xxxx富婆 | 俺去俺来也在线www色官网 | 久久五月精品中文字幕 | 国产高潮视频在线观看 | 国内揄拍国内精品人妻 | 日韩欧美群交p片內射中文 | 亚洲va中文字幕无码久久不卡 | 伊人久久婷婷五月综合97色 | 亚洲精品无码国产 | www国产亚洲精品久久久日本 | 岛国片人妻三上悠亚 | 无码精品人妻一区二区三区av | 亚洲欧美日韩国产精品一区二区 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产肉丝袜在线观看 | 强开小婷嫩苞又嫩又紧视频 | 欧美三级不卡在线观看 | 人妻中文无码久热丝袜 | 人妻人人添人妻人人爱 | 日本肉体xxxx裸交 | 夜夜躁日日躁狠狠久久av | 扒开双腿疯狂进出爽爽爽视频 | www国产精品内射老师 | 中文无码成人免费视频在线观看 | 强伦人妻一区二区三区视频18 | 六月丁香婷婷色狠狠久久 | 亚洲男人av香蕉爽爽爽爽 | 性欧美疯狂xxxxbbbb | 粉嫩少妇内射浓精videos | 中国女人内谢69xxxxxa片 | 精品少妇爆乳无码av无码专区 | 国产电影无码午夜在线播放 | 国产激情一区二区三区 | 午夜福利一区二区三区在线观看 | 亚洲精品一区二区三区婷婷月 | 亚洲 另类 在线 欧美 制服 | 丰满人妻一区二区三区免费视频 | 久久午夜无码鲁丝片 | 欧美性猛交内射兽交老熟妇 | 色婷婷久久一区二区三区麻豆 | 国产超碰人人爽人人做人人添 | 国产精品无码一区二区桃花视频 | 亚洲阿v天堂在线 | 色婷婷av一区二区三区之红樱桃 | av无码不卡在线观看免费 | 无码人妻av免费一区二区三区 | 老司机亚洲精品影院 | 中文字幕无码日韩专区 | 久久成人a毛片免费观看网站 | 久久午夜夜伦鲁鲁片无码免费 | 日韩av无码中文无码电影 | 1000部啪啪未满十八勿入下载 | 亚洲va欧美va天堂v国产综合 | 国产亚av手机在线观看 | 色一情一乱一伦一区二区三欧美 | 国产成人av免费观看 | 免费中文字幕日韩欧美 | 国产亚洲精品久久久久久久久动漫 | 丁香花在线影院观看在线播放 | 色综合久久久无码中文字幕 | 欧美freesex黑人又粗又大 | 综合激情五月综合激情五月激情1 | 亚洲欧美日韩国产精品一区二区 | 野狼第一精品社区 | 娇妻被黑人粗大高潮白浆 | 久久亚洲国产成人精品性色 | 久久久久av无码免费网 | 精品 日韩 国产 欧美 视频 | 国内精品人妻无码久久久影院 | 日本欧美一区二区三区乱码 | 国语自产偷拍精品视频偷 | 国产九九九九九九九a片 | 欧美乱妇无乱码大黄a片 | 欧美老熟妇乱xxxxx | 又大又紧又粉嫩18p少妇 | 亚洲gv猛男gv无码男同 | 99久久人妻精品免费二区 | √8天堂资源地址中文在线 | 中文字幕乱码中文乱码51精品 | 成人无码精品一区二区三区 | 乱码av麻豆丝袜熟女系列 | 天堂一区人妻无码 | 毛片内射-百度 | 扒开双腿吃奶呻吟做受视频 | 爱做久久久久久 | 国产亚洲精品久久久久久久久动漫 | 天堂一区人妻无码 | 精品无码国产自产拍在线观看蜜 | 无码成人精品区在线观看 | 5858s亚洲色大成网站www | 国产综合色产在线精品 | 无码人妻精品一区二区三区下载 | 性做久久久久久久免费看 | 国产无遮挡又黄又爽免费视频 | 人妻体内射精一区二区三四 | 四虎影视成人永久免费观看视频 | 欧美 日韩 亚洲 在线 | 国产精品理论片在线观看 | а√天堂www在线天堂小说 | 午夜福利不卡在线视频 | 欧美国产日韩久久mv | 西西人体www44rt大胆高清 | √8天堂资源地址中文在线 | 亚洲综合久久一区二区 | 两性色午夜视频免费播放 | 精品无码一区二区三区爱欲 | 日本大乳高潮视频在线观看 | 午夜丰满少妇性开放视频 | 帮老师解开蕾丝奶罩吸乳网站 | 国产在热线精品视频 | 蜜桃视频插满18在线观看 | 人妻有码中文字幕在线 | 性生交片免费无码看人 | 久久zyz资源站无码中文动漫 | 日日噜噜噜噜夜夜爽亚洲精品 | 宝宝好涨水快流出来免费视频 | 天天拍夜夜添久久精品大 | 久久亚洲国产成人精品性色 | 娇妻被黑人粗大高潮白浆 | 欧美激情一区二区三区成人 | 国产人成高清在线视频99最全资源 | 国产成人无码午夜视频在线观看 | 久久久婷婷五月亚洲97号色 | 日日躁夜夜躁狠狠躁 | 国产午夜无码视频在线观看 | 国产超碰人人爽人人做人人添 | 夜夜躁日日躁狠狠久久av | 亚洲国产av美女网站 | 丰满少妇熟乱xxxxx视频 | 一区二区传媒有限公司 | 国产精品亚洲lv粉色 | 亚洲自偷自偷在线制服 | 日韩精品一区二区av在线 | 中文字幕无码视频专区 | 荫蒂被男人添的好舒服爽免费视频 | 成年美女黄网站色大免费全看 | 国产成人无码区免费内射一片色欲 | 一区二区传媒有限公司 | 午夜福利试看120秒体验区 | 中文字幕乱码中文乱码51精品 | 少妇性荡欲午夜性开放视频剧场 | 免费观看黄网站 | 日韩人妻少妇一区二区三区 | 波多野42部无码喷潮在线 | 熟妇激情内射com | 成人影院yy111111在线观看 | 久久国语露脸国产精品电影 | 国产午夜福利100集发布 | 国产人妻精品一区二区三区不卡 | 中国大陆精品视频xxxx | 亚洲理论电影在线观看 | 国产午夜精品一区二区三区嫩草 | 国产亚洲欧美日韩亚洲中文色 | 2020久久超碰国产精品最新 | 在线a亚洲视频播放在线观看 | 久久亚洲精品中文字幕无男同 | 国产人妻精品午夜福利免费 | 国产 浪潮av性色四虎 | 午夜精品一区二区三区在线观看 | 国产xxx69麻豆国语对白 | 欧美日本日韩 | 亚洲人成网站色7799 | 欧美变态另类xxxx | 内射巨臀欧美在线视频 | 久久99精品国产麻豆蜜芽 | 老子影院午夜精品无码 | 精品久久久久香蕉网 | 国产黑色丝袜在线播放 | 国产成人无码一二三区视频 | 亚洲精品美女久久久久久久 | 大屁股大乳丰满人妻 | 久久99精品久久久久久 | 女人高潮内射99精品 | 欧美 日韩 亚洲 在线 | 久久久精品欧美一区二区免费 | 98国产精品综合一区二区三区 | 天干天干啦夜天干天2017 | 国产精品久免费的黄网站 | 天堂亚洲免费视频 | 国内精品人妻无码久久久影院蜜桃 | 精品厕所偷拍各类美女tp嘘嘘 | 国产精品手机免费 | 少妇性俱乐部纵欲狂欢电影 | 无码人妻精品一区二区三区不卡 | 内射白嫩少妇超碰 | 亚洲精品国产精品乱码不卡 | 国内精品一区二区三区不卡 | 亚洲精品国产精品乱码不卡 | 亚洲欧洲无卡二区视頻 | 一本久道久久综合婷婷五月 | 久久久久国色av免费观看性色 | 久久精品国产日本波多野结衣 | 亚洲阿v天堂在线 | 午夜无码人妻av大片色欲 | 国产激情艳情在线看视频 | 久久天天躁夜夜躁狠狠 | 亚洲一区二区三区香蕉 | 欧美老妇交乱视频在线观看 | 亚洲色欲色欲天天天www | 亚洲精品中文字幕久久久久 | 久久久成人毛片无码 | 国产激情精品一区二区三区 | 国产成人综合色在线观看网站 | 国产亚洲精品久久久久久国模美 | 国产av人人夜夜澡人人爽麻豆 | 国产亚洲精品久久久久久久久动漫 | 天天摸天天碰天天添 | 国产精品人妻一区二区三区四 | 55夜色66夜色国产精品视频 | 内射巨臀欧美在线视频 | 97人妻精品一区二区三区 | 国精产品一品二品国精品69xx | av在线亚洲欧洲日产一区二区 | 久久久久久久女国产乱让韩 | 久久久国产一区二区三区 | 欧美日韩一区二区三区自拍 | 婷婷五月综合激情中文字幕 | 久久久精品欧美一区二区免费 | 亚洲成色www久久网站 | 精品成人av一区二区三区 | 1000部啪啪未满十八勿入下载 | а√资源新版在线天堂 | 色欲久久久天天天综合网精品 | 一本色道久久综合狠狠躁 | 欧美人与禽zoz0性伦交 | 国内少妇偷人精品视频免费 | 久久精品国产亚洲精品 | 欧美 丝袜 自拍 制服 另类 | 欧美黑人巨大xxxxx | 国产高清不卡无码视频 | 国产无遮挡又黄又爽免费视频 | 亚洲欧美精品伊人久久 | 精品无码av一区二区三区 | 久久久久国色av免费观看性色 | 国产av剧情md精品麻豆 | 日日摸夜夜摸狠狠摸婷婷 | 午夜嘿嘿嘿影院 | 国产婷婷色一区二区三区在线 | 国産精品久久久久久久 | 日本一区二区三区免费高清 | 强开小婷嫩苞又嫩又紧视频 | 国产精品高潮呻吟av久久 | 性生交大片免费看女人按摩摩 | 日韩精品无码一本二本三本色 | 久久久无码中文字幕久... | 国产精品成人av在线观看 | 亚洲精品国产精品乱码不卡 | 欧美阿v高清资源不卡在线播放 | 久久99精品久久久久久动态图 | 国产亚洲精品久久久久久 | a片在线免费观看 | 亚洲色偷偷偷综合网 | 亚洲熟悉妇女xxx妇女av | 黑人玩弄人妻中文在线 | 国产香蕉97碰碰久久人人 | 亚洲中文字幕无码一久久区 | 免费乱码人妻系列无码专区 | 又粗又大又硬又长又爽 | 亚洲 激情 小说 另类 欧美 | 麻豆国产丝袜白领秘书在线观看 | 97无码免费人妻超级碰碰夜夜 | 欧美一区二区三区 | 熟妇女人妻丰满少妇中文字幕 | 久久伊人色av天堂九九小黄鸭 | 亚洲热妇无码av在线播放 | 在线视频网站www色 | 国产乱人伦av在线无码 | 一本久久a久久精品亚洲 | 久久国产劲爆∧v内射 | 三上悠亚人妻中文字幕在线 | 亚洲成av人综合在线观看 | 亚洲欧美综合区丁香五月小说 | 国产成人无码av一区二区 | 国产女主播喷水视频在线观看 | 国产成人无码a区在线观看视频app | 国产两女互慰高潮视频在线观看 | 乱码午夜-极国产极内射 | 国产无遮挡又黄又爽免费视频 | 午夜福利试看120秒体验区 | 丰满诱人的人妻3 | 日日摸夜夜摸狠狠摸婷婷 | 性生交大片免费看女人按摩摩 | 免费网站看v片在线18禁无码 | 一本久久a久久精品vr综合 | 亚洲s色大片在线观看 | 亚洲欧洲日本综合aⅴ在线 | 精品久久8x国产免费观看 | 狠狠色噜噜狠狠狠7777奇米 | 在线成人www免费观看视频 | 日本又色又爽又黄的a片18禁 | 99久久99久久免费精品蜜桃 | 天堂а√在线地址中文在线 | 少妇被粗大的猛进出69影院 | 少妇人妻av毛片在线看 | 国产亲子乱弄免费视频 | 国内精品人妻无码久久久影院蜜桃 | 国产精品久久精品三级 | 丝袜足控一区二区三区 | 亚洲国产精品无码一区二区三区 | 欧美野外疯狂做受xxxx高潮 | 久久久久久亚洲精品a片成人 | 色婷婷香蕉在线一区二区 | 福利一区二区三区视频在线观看 | 久久国产自偷自偷免费一区调 | 无码毛片视频一区二区本码 | 久久久婷婷五月亚洲97号色 | a片免费视频在线观看 | 精品乱码久久久久久久 | 97久久超碰中文字幕 | 四虎4hu永久免费 | 中国女人内谢69xxxxxa片 | 国产精品毛片一区二区 | 国产精品无码mv在线观看 | 88国产精品欧美一区二区三区 | 亚洲国产精品久久人人爱 | 亚洲gv猛男gv无码男同 | 久久久久人妻一区精品色欧美 | 色诱久久久久综合网ywww | 国产免费久久久久久无码 | 亚洲精品一区二区三区在线观看 | 日本一区二区三区免费高清 | 少妇无码av无码专区在线观看 | 亚洲精品国产品国语在线观看 | 色噜噜亚洲男人的天堂 | 国精品人妻无码一区二区三区蜜柚 | 日欧一片内射va在线影院 | 日产精品高潮呻吟av久久 | 日本乱人伦片中文三区 | yw尤物av无码国产在线观看 | 中文无码成人免费视频在线观看 | 欧美精品在线观看 | 最近免费中文字幕中文高清百度 | 六十路熟妇乱子伦 | 大肉大捧一进一出好爽视频 | 久久五月精品中文字幕 | 狠狠色噜噜狠狠狠狠7777米奇 | 99精品国产综合久久久久五月天 | 少妇愉情理伦片bd | 国产又粗又硬又大爽黄老大爷视 | 一本大道久久东京热无码av | 久久久国产精品无码免费专区 | 国产人妻精品一区二区三区不卡 | 亚洲男女内射在线播放 | 久久国产精品二国产精品 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产一区二区三区日韩精品 | 中文字幕乱码人妻无码久久 | yw尤物av无码国产在线观看 | 丝袜 中出 制服 人妻 美腿 | 成人动漫在线观看 | 精品无码成人片一区二区98 | 午夜福利电影 | 狠狠噜狠狠狠狠丁香五月 | 国产欧美精品一区二区三区 | 给我免费的视频在线观看 | 国产精品无码成人午夜电影 | 欧美精品免费观看二区 | 精品无码av一区二区三区 | 日韩精品一区二区av在线 | 国产av一区二区三区最新精品 | 综合人妻久久一区二区精品 | 国产免费无码一区二区视频 | 亚洲国产欧美日韩精品一区二区三区 | 任你躁国产自任一区二区三区 | 成人无码精品1区2区3区免费看 | 欧美肥老太牲交大战 | 久久亚洲中文字幕无码 | 久久99精品国产麻豆 | 国产美女极度色诱视频www | 两性色午夜免费视频 | 无码av中文字幕免费放 | 免费国产成人高清在线观看网站 | 中文字幕人妻无码一区二区三区 | 成年美女黄网站色大免费全看 | 成人动漫在线观看 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产明星裸体无码xxxx视频 | 老熟妇乱子伦牲交视频 | 久久久av男人的天堂 | 国产精品二区一区二区aⅴ污介绍 | 国产精品久久久久影院嫩草 | 欧美人妻一区二区三区 | 男女性色大片免费网站 | 亚洲国产高清在线观看视频 | 成人亚洲精品久久久久软件 | 麻豆av传媒蜜桃天美传媒 | 久久久久av无码免费网 | 久久久www成人免费毛片 | 亚洲欧美国产精品久久 | 色欲综合久久中文字幕网 | 美女黄网站人色视频免费国产 | 无码国产激情在线观看 | 99久久婷婷国产综合精品青草免费 | 澳门永久av免费网站 | 中文字幕人妻丝袜二区 | 九一九色国产 | 丰满护士巨好爽好大乳 | 狂野欧美激情性xxxx | 在线а√天堂中文官网 | 久久精品中文闷骚内射 | 亚洲国产一区二区三区在线观看 | 小sao货水好多真紧h无码视频 | 天天综合网天天综合色 | 久久综合久久自在自线精品自 | 亚洲人成网站在线播放942 | 国产凸凹视频一区二区 | 亚洲精品无码人妻无码 | 亚洲精品一区二区三区大桥未久 | 色欲久久久天天天综合网精品 | 欧美亚洲日韩国产人成在线播放 | 国产激情无码一区二区app | 欧美乱妇无乱码大黄a片 | 日韩欧美成人免费观看 | 性生交大片免费看女人按摩摩 | 国产成人精品一区二区在线小狼 | 日本精品少妇一区二区三区 | 国产精品爱久久久久久久 | 国产99久久精品一区二区 | 乱人伦中文视频在线观看 | 国产精品毛多多水多 | 欧美乱妇无乱码大黄a片 | 中文精品无码中文字幕无码专区 | 人人妻人人澡人人爽欧美一区 | 国产成人综合在线女婷五月99播放 | 国产成人午夜福利在线播放 | 人人妻人人澡人人爽欧美精品 | 亚洲精品一区国产 | av无码久久久久不卡免费网站 | 婷婷五月综合激情中文字幕 | 国产 浪潮av性色四虎 | 十八禁视频网站在线观看 | 亚洲 a v无 码免 费 成 人 a v | 午夜性刺激在线视频免费 | 综合人妻久久一区二区精品 | 中文字幕中文有码在线 | 一本色道久久综合狠狠躁 | 精品无码成人片一区二区98 | 欧美野外疯狂做受xxxx高潮 | 久久99精品国产麻豆 | 正在播放东北夫妻内射 | 久久国产36精品色熟妇 | 国产精品亚洲lv粉色 | 欧美一区二区三区 | 一区二区传媒有限公司 | 国产精品99爱免费视频 | 精品国产一区二区三区四区在线看 | 日本肉体xxxx裸交 | 中文无码精品a∨在线观看不卡 | 国产一区二区不卡老阿姨 | 欧美三级a做爰在线观看 | 永久免费观看国产裸体美女 | 国产人妖乱国产精品人妖 | 国内少妇偷人精品视频 | 在线天堂新版最新版在线8 | 九九综合va免费看 | 国产午夜亚洲精品不卡下载 | 极品尤物被啪到呻吟喷水 | 色欲人妻aaaaaaa无码 | 老熟妇仑乱视频一区二区 | 日本爽爽爽爽爽爽在线观看免 | 亚洲综合另类小说色区 | 欧美喷潮久久久xxxxx | 国产成人精品优优av | 国产成人无码一二三区视频 | 亚洲国产精品久久人人爱 | 国产在线无码精品电影网 | 蜜桃av抽搐高潮一区二区 | 人妻天天爽夜夜爽一区二区 | √天堂资源地址中文在线 | 亚洲精品无码人妻无码 | 国精产品一区二区三区 | 人妻少妇精品无码专区二区 | 亚洲熟妇色xxxxx欧美老妇y | 婷婷综合久久中文字幕蜜桃三电影 | 久久久久久久久蜜桃 | 成人aaa片一区国产精品 | 久久午夜夜伦鲁鲁片无码免费 | 国产av一区二区精品久久凹凸 | 国产亚洲精品久久久久久久久动漫 | 老子影院午夜精品无码 | 激情内射亚州一区二区三区爱妻 | 日韩av无码中文无码电影 | 亚洲自偷自拍另类第1页 | 免费视频欧美无人区码 | 全黄性性激高免费视频 | 人人澡人人妻人人爽人人蜜桃 | 欧美成人免费全部网站 | 久久精品成人欧美大片 | 东京一本一道一二三区 | 久久国产36精品色熟妇 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 扒开双腿疯狂进出爽爽爽视频 | 伊人久久婷婷五月综合97色 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 99久久精品无码一区二区毛片 | 又湿又紧又大又爽a视频国产 | 装睡被陌生人摸出水好爽 | 精品无码一区二区三区爱欲 | 牲欲强的熟妇农村老妇女视频 | 亚洲第一网站男人都懂 | 成人影院yy111111在线观看 | 成人亚洲精品久久久久软件 | 国产精品欧美成人 | 精品久久久无码中文字幕 | 久久婷婷五月综合色国产香蕉 | 中文字幕色婷婷在线视频 | 国产成人无码av片在线观看不卡 | 成人欧美一区二区三区 | 天天做天天爱天天爽综合网 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产无遮挡吃胸膜奶免费看 | 少妇人妻大乳在线视频 | 精品久久综合1区2区3区激情 | 久久人人97超碰a片精品 | 激情国产av做激情国产爱 | 亚洲小说图区综合在线 | 男人和女人高潮免费网站 | 好男人www社区 | 无套内谢老熟女 | 中文无码精品a∨在线观看不卡 | 久久精品女人天堂av免费观看 | 狠狠噜狠狠狠狠丁香五月 | 亚无码乱人伦一区二区 | 国产香蕉尹人视频在线 | 丰满人妻被黑人猛烈进入 | 人人妻人人澡人人爽欧美精品 | 无码国产激情在线观看 | 久久精品无码一区二区三区 | 欧美成人午夜精品久久久 | 77777熟女视频在线观看 а天堂中文在线官网 | 精品国产av色一区二区深夜久久 | 丰满少妇人妻久久久久久 | 国产在线一区二区三区四区五区 | 丝袜人妻一区二区三区 | 国内少妇偷人精品视频 | 中文字幕精品av一区二区五区 | 亚洲精品国产精品乱码视色 | 国产精品无码一区二区桃花视频 | 日本一区二区三区免费高清 | 精品国产精品久久一区免费式 | 国产精品免费大片 | 精品无人区无码乱码毛片国产 | 波多野结衣一区二区三区av免费 | 亚洲色在线无码国产精品不卡 | 国产精品99久久精品爆乳 | 亚洲国产精品一区二区第一页 | 国产麻豆精品精东影业av网站 | 国产人妖乱国产精品人妖 | 精品国产麻豆免费人成网站 | 青草视频在线播放 | aⅴ亚洲 日韩 色 图网站 播放 | 精品偷自拍另类在线观看 | 特大黑人娇小亚洲女 | 麻豆av传媒蜜桃天美传媒 | 正在播放老肥熟妇露脸 | 巨爆乳无码视频在线观看 | 俺去俺来也在线www色官网 | 欧美性黑人极品hd | 免费国产成人高清在线观看网站 | 亚洲成av人在线观看网址 | 亚洲国产av美女网站 | 免费看男女做好爽好硬视频 | 精品久久久无码中文字幕 | 亚洲一区二区三区香蕉 | 真人与拘做受免费视频一 | 无码av岛国片在线播放 | 伊人久久大香线蕉av一区二区 | 国产婷婷色一区二区三区在线 | www一区二区www免费 | 97夜夜澡人人爽人人喊中国片 | 久久人人97超碰a片精品 | 亚欧洲精品在线视频免费观看 | 曰本女人与公拘交酡免费视频 | 亚洲成熟女人毛毛耸耸多 | 亚洲国产欧美国产综合一区 | 国精产品一区二区三区 | 精品国偷自产在线视频 | 午夜福利一区二区三区在线观看 | 美女毛片一区二区三区四区 | 亚洲欧美日韩成人高清在线一区 | 青青青爽视频在线观看 | 国产亚洲精品久久久ai换 | 午夜无码区在线观看 | 亚洲欧洲中文日韩av乱码 | 伦伦影院午夜理论片 | 亚欧洲精品在线视频免费观看 | 国产网红无码精品视频 | 欧美xxxx黑人又粗又长 | 成年美女黄网站色大免费视频 | 无遮挡国产高潮视频免费观看 | 丰满少妇熟乱xxxxx视频 | 亚洲成a人片在线观看日本 | 久久www免费人成人片 | 欧美乱妇无乱码大黄a片 | 国产成人午夜福利在线播放 | 久久精品视频在线看15 | 一本久道高清无码视频 | 精品国产麻豆免费人成网站 | 18精品久久久无码午夜福利 | 精品偷拍一区二区三区在线看 | 动漫av网站免费观看 | 清纯唯美经典一区二区 | 色偷偷人人澡人人爽人人模 | 88国产精品欧美一区二区三区 | 99国产精品白浆在线观看免费 | 欧美黑人乱大交 | 高清不卡一区二区三区 | 久久久中文字幕日本无吗 | 欧美第一黄网免费网站 | 日韩精品成人一区二区三区 | 日产国产精品亚洲系列 | 国产suv精品一区二区五 | 7777奇米四色成人眼影 | 7777奇米四色成人眼影 | 曰韩少妇内射免费播放 | 国产精品无码一区二区三区不卡 | 在线播放免费人成毛片乱码 | 国产成人精品久久亚洲高清不卡 | 国产成人一区二区三区在线观看 | 99久久精品日本一区二区免费 | 性生交大片免费看女人按摩摩 | 欧美日韩色另类综合 | 99视频精品全部免费免费观看 | 国产在热线精品视频 | 久久无码专区国产精品s | 麻豆国产人妻欲求不满 | 无码国产乱人伦偷精品视频 | 亚洲乱码日产精品bd | 亚洲国产一区二区三区在线观看 | 樱花草在线社区www | 久久久久成人精品免费播放动漫 | 日韩精品a片一区二区三区妖精 | 久久综合激激的五月天 | 日本va欧美va欧美va精品 | 国产午夜手机精彩视频 | 精品久久久中文字幕人妻 | 小泽玛莉亚一区二区视频在线 | 无码一区二区三区在线观看 | 永久免费观看美女裸体的网站 | 久久午夜夜伦鲁鲁片无码免费 | 精品一区二区三区无码免费视频 | 国产精品自产拍在线观看 | 色婷婷欧美在线播放内射 | 亚洲s码欧洲m码国产av | 国产成人精品久久亚洲高清不卡 | 精品国产青草久久久久福利 | 双乳奶水饱满少妇呻吟 | 欧洲极品少妇 | 国产激情无码一区二区 | 国产激情综合五月久久 | 精品aⅴ一区二区三区 | 国产成人精品无码播放 | 捆绑白丝粉色jk震动捧喷白浆 | 99久久精品日本一区二区免费 | 99精品国产综合久久久久五月天 | 国产精品人人爽人人做我的可爱 | 中文字幕无码日韩欧毛 | 日日碰狠狠丁香久燥 | 国产成人精品视频ⅴa片软件竹菊 | 在线欧美精品一区二区三区 | 亚洲精品一区二区三区四区五区 | 成人性做爰aaa片免费看不忠 | 一本色道久久综合狠狠躁 | 欧美国产日韩久久mv | 人妻aⅴ无码一区二区三区 | 97人妻精品一区二区三区 | 亚洲国产欧美国产综合一区 | 国语精品一区二区三区 | 精品无码国产自产拍在线观看蜜 | 综合激情五月综合激情五月激情1 | 精品久久久久久人妻无码中文字幕 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | aⅴ在线视频男人的天堂 | 国产亚洲精品精品国产亚洲综合 | 97久久国产亚洲精品超碰热 | 色一情一乱一伦一视频免费看 | 日本护士xxxxhd少妇 | 国产精品爱久久久久久久 | 波多野结衣aⅴ在线 | 国产偷国产偷精品高清尤物 | 久久国内精品自在自线 | a在线亚洲男人的天堂 | 东京热无码av男人的天堂 | 4hu四虎永久在线观看 | 国产又爽又猛又粗的视频a片 | 青青草原综合久久大伊人精品 | 国产香蕉97碰碰久久人人 | 内射白嫩少妇超碰 | 亚洲区小说区激情区图片区 | 国产黑色丝袜在线播放 | 无码人妻丰满熟妇区毛片18 | 波多野结衣aⅴ在线 | 亚洲人成网站色7799 | 久久99国产综合精品 | 国产xxx69麻豆国语对白 | 亚洲第一无码av无码专区 | 伊人久久婷婷五月综合97色 | 美女张开腿让人桶 | 一个人免费观看的www视频 | 国产精品国产三级国产专播 | 国产精品久久久久无码av色戒 | 国产免费无码一区二区视频 | 亚洲熟妇自偷自拍另类 | 国产在线无码精品电影网 | 人妻无码久久精品人妻 | 精品久久久无码中文字幕 | 少妇高潮喷潮久久久影院 | 99国产精品白浆在线观看免费 | 熟妇激情内射com | 欧美老熟妇乱xxxxx | 5858s亚洲色大成网站www | 大屁股大乳丰满人妻 | 日本熟妇人妻xxxxx人hd | 精品成在人线av无码免费看 | 亚洲精品www久久久 | 亚洲成a人片在线观看无码3d | 国产另类ts人妖一区二区 | av无码久久久久不卡免费网站 | 又粗又大又硬又长又爽 | 麻豆md0077饥渴少妇 | 国产亚洲日韩欧美另类第八页 | 鲁鲁鲁爽爽爽在线视频观看 | 国产99久久精品一区二区 | 国产特级毛片aaaaaaa高清 | 天堂在线观看www | 亚洲一区二区三区 | 麻豆md0077饥渴少妇 | 欧美日韩综合一区二区三区 | 任你躁在线精品免费 | 天下第一社区视频www日本 | 日本www一道久久久免费榴莲 | 欧美日韩久久久精品a片 | 中文字幕av伊人av无码av | 成年女人永久免费看片 | 国产人妻人伦精品1国产丝袜 | 日本一区二区更新不卡 | 亚洲成a人片在线观看日本 | 久久亚洲中文字幕无码 | 久久久久久国产精品无码下载 | 最近免费中文字幕中文高清百度 | 亚洲区欧美区综合区自拍区 | 丰满人妻精品国产99aⅴ | 国产精品亚洲综合色区韩国 | 俺去俺来也在线www色官网 | 亚洲乱亚洲乱妇50p | 久青草影院在线观看国产 | 最新国产乱人伦偷精品免费网站 | 精品无码成人片一区二区98 | 日韩av无码中文无码电影 | 久久国内精品自在自线 | 狠狠色欧美亚洲狠狠色www | 国产成人一区二区三区别 | 久久久久亚洲精品中文字幕 | 动漫av一区二区在线观看 | 亚洲无人区午夜福利码高清完整版 | 九九久久精品国产免费看小说 | 曰韩无码二三区中文字幕 | 中文字幕无码乱人伦 | 中文字幕中文有码在线 | 欧美 日韩 亚洲 在线 | 我要看www免费看插插视频 | 婷婷五月综合缴情在线视频 | 国产精品多人p群无码 | 免费无码肉片在线观看 | 国产精品久免费的黄网站 | 久久午夜无码鲁丝片秋霞 | 国产亚洲精品久久久闺蜜 | 国产做国产爱免费视频 | 国产疯狂伦交大片 | 亚洲热妇无码av在线播放 | 丰满人妻被黑人猛烈进入 | 网友自拍区视频精品 | 国产午夜无码精品免费看 | 国产精品高潮呻吟av久久 | 久久国产劲爆∧v内射 | 精品人妻av区 | 野外少妇愉情中文字幕 | 高潮毛片无遮挡高清免费 | 日韩精品无码一区二区中文字幕 | 亚洲娇小与黑人巨大交 | 亚洲一区二区三区在线观看网站 | 久久久久se色偷偷亚洲精品av | 久热国产vs视频在线观看 | 国产美女精品一区二区三区 | 无套内谢的新婚少妇国语播放 | 四十如虎的丰满熟妇啪啪 | 国产精品福利视频导航 | 久久久国产一区二区三区 | 中文字幕av无码一区二区三区电影 | 97人妻精品一区二区三区 | 亚洲精品一区二区三区在线观看 | 免费国产成人高清在线观看网站 | 激情国产av做激情国产爱 | 亚洲色大成网站www | 久久久久免费精品国产 | 三上悠亚人妻中文字幕在线 | 奇米影视888欧美在线观看 | 亚洲精品一区二区三区在线 | 国产精品久久久久久无码 | 天天拍夜夜添久久精品 | 欧美自拍另类欧美综合图片区 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧洲美熟女乱又伦 | 成人毛片一区二区 | 无码一区二区三区在线 | 久久人妻内射无码一区三区 | 国产成人一区二区三区在线观看 | 欧美黑人乱大交 | 2020久久香蕉国产线看观看 | 中文字幕 亚洲精品 第1页 | 亚洲人成网站在线播放942 | 性欧美大战久久久久久久 | 无人区乱码一区二区三区 | 欧美怡红院免费全部视频 | 麻花豆传媒剧国产免费mv在线 | 牲欲强的熟妇农村老妇女 | 熟妇激情内射com | 成人片黄网站色大片免费观看 | 国产97在线 | 亚洲 | 国产精品久久久久无码av色戒 | 免费网站看v片在线18禁无码 | 久久精品人妻少妇一区二区三区 | 乱码午夜-极国产极内射 | 国产精品a成v人在线播放 | 无码人妻av免费一区二区三区 | 麻豆蜜桃av蜜臀av色欲av | 亚洲精品久久久久中文第一幕 | 国产精品亚洲lv粉色 | 亚洲s色大片在线观看 | 九九综合va免费看 | 久久久久人妻一区精品色欧美 | 久久久久久av无码免费看大片 | 成人免费视频一区二区 | 97夜夜澡人人爽人人喊中国片 | 国产福利视频一区二区 | 国产精品二区一区二区aⅴ污介绍 | 人人爽人人澡人人人妻 | 日日鲁鲁鲁夜夜爽爽狠狠 | 装睡被陌生人摸出水好爽 | 国产色视频一区二区三区 | 真人与拘做受免费视频一 | 日本xxxx色视频在线观看免费 | 中文字幕+乱码+中文字幕一区 | 国内揄拍国内精品人妻 | 丰满肥臀大屁股熟妇激情视频 | 亚洲午夜福利在线观看 | 国产精品-区区久久久狼 | 久久久久久久久888 | 国产精品亚洲专区无码不卡 | 国产无套粉嫩白浆在线 | 宝宝好涨水快流出来免费视频 | 少妇性l交大片 | 亚洲国产av美女网站 | 性欧美牲交在线视频 | 欧美国产日韩亚洲中文 | 成人免费视频视频在线观看 免费 | 午夜免费福利小电影 | 波多野结衣av在线观看 | 国产69精品久久久久app下载 | 国产精品va在线播放 | 黄网在线观看免费网站 | 夜夜夜高潮夜夜爽夜夜爰爰 | 乌克兰少妇xxxx做受 | 亚洲狠狠色丁香婷婷综合 | a在线观看免费网站大全 | 精品国产av色一区二区深夜久久 | 亚洲一区二区三区播放 | 色偷偷人人澡人人爽人人模 | 亚洲国产日韩a在线播放 | 日韩人妻无码中文字幕视频 | 国产人妖乱国产精品人妖 | 久久久久av无码免费网 | 欧美成人午夜精品久久久 | 久久精品一区二区三区四区 | 漂亮人妻洗澡被公强 日日躁 | 爆乳一区二区三区无码 | 性欧美videos高清精品 | 免费观看激色视频网站 | 欧美性生交活xxxxxdddd | 亚洲欧美日韩国产精品一区二区 | 欧美精品无码一区二区三区 | 久久99国产综合精品 | 国产精品内射视频免费 | 欧美国产日产一区二区 | 国产亚av手机在线观看 | 久久久中文久久久无码 | 呦交小u女精品视频 | 欧美兽交xxxx×视频 | 一区二区三区乱码在线 | 欧洲 | 18禁黄网站男男禁片免费观看 | 国产精品沙发午睡系列 | 夜夜躁日日躁狠狠久久av | 奇米影视888欧美在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 精品国产精品久久一区免费式 | 久久精品国产精品国产精品污 | 欧美自拍另类欧美综合图片区 | 理论片87福利理论电影 | 伊在人天堂亚洲香蕉精品区 | 中文字幕无码av波多野吉衣 | 国产av一区二区三区最新精品 | 女人被男人躁得好爽免费视频 | 熟妇人妻中文av无码 | 99久久久国产精品无码免费 | 激情国产av做激情国产爱 | 国产精品va在线播放 | 嫩b人妻精品一区二区三区 | 76少妇精品导航 | 国产成人精品一区二区在线小狼 | 18禁黄网站男男禁片免费观看 | 在线播放免费人成毛片乱码 | 99国产精品白浆在线观看免费 | 欧美真人作爱免费视频 | 大色综合色综合网站 | 最近免费中文字幕中文高清百度 | 思思久久99热只有频精品66 | 熟女少妇在线视频播放 | 香港三级日本三级妇三级 | 亚洲人成影院在线观看 | 国产亚洲人成在线播放 | 一区二区三区乱码在线 | 欧洲 | 久久久久久亚洲精品a片成人 | 内射欧美老妇wbb | 老熟妇乱子伦牲交视频 | 免费观看又污又黄的网站 | 欧美精品国产综合久久 | 国产熟女一区二区三区四区五区 | 亚洲熟妇色xxxxx欧美老妇 | 在教室伦流澡到高潮hnp视频 | √天堂资源地址中文在线 | 国产亚洲视频中文字幕97精品 | 国产成人一区二区三区在线观看 | 一个人看的www免费视频在线观看 | 成人欧美一区二区三区黑人免费 | 国内精品一区二区三区不卡 | 国内精品九九久久久精品 | 中文字幕 亚洲精品 第1页 | 亚洲中文字幕无码中文字在线 | 一本色道久久综合亚洲精品不卡 | 欧美亚洲日韩国产人成在线播放 | 宝宝好涨水快流出来免费视频 | 国产成人精品无码播放 | 精品偷拍一区二区三区在线看 | 少妇高潮喷潮久久久影院 | 2020久久香蕉国产线看观看 | 国产成人午夜福利在线播放 | 久久国产36精品色熟妇 | 内射爽无广熟女亚洲 | www成人国产高清内射 | 久久综合狠狠综合久久综合88 | 色欲人妻aaaaaaa无码 | 无码任你躁久久久久久久 | 精品久久久久久人妻无码中文字幕 | 久久zyz资源站无码中文动漫 | 激情五月综合色婷婷一区二区 | 国产成人无码a区在线观看视频app | 亚洲aⅴ无码成人网站国产app | 国产在线无码精品电影网 | 中文久久乱码一区二区 | 国产人妻精品一区二区三区 | 国产办公室秘书无码精品99 | 人妻无码αv中文字幕久久琪琪布 | 无码一区二区三区在线 | 精品日本一区二区三区在线观看 | 7777奇米四色成人眼影 | 午夜熟女插插xx免费视频 | 亚洲乱码中文字幕在线 | 亚洲色偷偷偷综合网 | 国产成人精品视频ⅴa片软件竹菊 | 天下第一社区视频www日本 | 丰满护士巨好爽好大乳 | 国产精品永久免费视频 | 少妇高潮一区二区三区99 | 久久人妻内射无码一区三区 | 国产亚洲tv在线观看 | 亚洲人成影院在线无码按摩店 | 国产又粗又硬又大爽黄老大爷视 | 国产无遮挡又黄又爽免费视频 | 国产成人精品必看 | 国产高潮视频在线观看 | 精品成在人线av无码免费看 | 俺去俺来也在线www色官网 | 精品久久久久香蕉网 | 牲欲强的熟妇农村老妇女 | 永久免费观看美女裸体的网站 | 亚洲一区二区三区含羞草 | 国产va免费精品观看 | 亚洲成a人片在线观看无码 | 3d动漫精品啪啪一区二区中 | 久久久精品欧美一区二区免费 | 少妇性荡欲午夜性开放视频剧场 | 熟妇激情内射com | 色情久久久av熟女人妻网站 | 久久综合狠狠综合久久综合88 | 国产精品久久久久7777 | 色婷婷香蕉在线一区二区 | 未满小14洗澡无码视频网站 | 中文字幕无码av波多野吉衣 | 未满小14洗澡无码视频网站 | 久久99热只有频精品8 | 激情综合激情五月俺也去 | 亚洲国产av精品一区二区蜜芽 | 日日天日日夜日日摸 | 蜜桃臀无码内射一区二区三区 | 国产av剧情md精品麻豆 | 九九久久精品国产免费看小说 | 欧美性色19p | 无套内谢的新婚少妇国语播放 | 性欧美牲交在线视频 | 亚洲成熟女人毛毛耸耸多 | 亚洲第一网站男人都懂 | 成熟女人特级毛片www免费 | 玩弄中年熟妇正在播放 | 亚洲一区二区三区在线观看网站 | 日韩精品成人一区二区三区 | 免费观看激色视频网站 | 天天做天天爱天天爽综合网 | 久久综合网欧美色妞网 | 日韩精品一区二区av在线 | av香港经典三级级 在线 | 曰本女人与公拘交酡免费视频 | 免费无码的av片在线观看 | 精品无人国产偷自产在线 | 久久精品国产一区二区三区肥胖 | 精品久久久中文字幕人妻 | 久久久久亚洲精品男人的天堂 | 亚洲天堂2017无码中文 | 色一情一乱一伦 | 国产人妻人伦精品1国产丝袜 | 亚洲中文字幕成人无码 | 久久久久成人精品免费播放动漫 | 婷婷色婷婷开心五月四房播播 | 亚洲精品国产精品乱码视色 | 日本护士毛茸茸高潮 | 少妇的肉体aa片免费 | 国产成人综合色在线观看网站 | 亚洲色偷偷男人的天堂 | 国产农村乱对白刺激视频 | 98国产精品综合一区二区三区 | 人人爽人人爽人人片av亚洲 | 国产亚av手机在线观看 | 男人的天堂av网站 | 色诱久久久久综合网ywww | www成人国产高清内射 | 荫蒂添的好舒服视频囗交 | 55夜色66夜色国产精品视频 | 午夜精品久久久久久久久 | 美女极度色诱视频国产 | 国产精品成人av在线观看 | 日本一卡2卡3卡四卡精品网站 | 久久精品国产99久久6动漫 | 亚洲天堂2017无码 | 国产明星裸体无码xxxx视频 | 国产精品99爱免费视频 | 人人妻人人澡人人爽人人精品浪潮 | 久久人人爽人人爽人人片av高清 | 玩弄少妇高潮ⅹxxxyw | 亚洲国产精华液网站w | 亚洲人成影院在线无码按摩店 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲日本va中文字幕 | 亚洲国产精品成人久久蜜臀 | 久久精品国产精品国产精品污 | 亚洲一区二区三区香蕉 | 999久久久国产精品消防器材 | 亚洲综合伊人久久大杳蕉 | 亚洲国产欧美日韩精品一区二区三区 | 国产做国产爱免费视频 | 久久国产劲爆∧v内射 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲中文字幕无码一久久区 | 国产精品.xx视频.xxtv | 熟妇人妻激情偷爽文 | 亚洲va欧美va天堂v国产综合 | 欧美人与善在线com | 成熟人妻av无码专区 | 无套内射视频囯产 | 人妻体内射精一区二区三四 | 日本护士xxxxhd少妇 | 久青草影院在线观看国产 | 自拍偷自拍亚洲精品被多人伦好爽 | 综合人妻久久一区二区精品 | a片免费视频在线观看 | 九月婷婷人人澡人人添人人爽 | 99久久亚洲精品无码毛片 | 欧美猛少妇色xxxxx | 欧洲熟妇色 欧美 | 亚洲精品午夜国产va久久成人 | 超碰97人人做人人爱少妇 | 日韩欧美群交p片內射中文 | 麻豆精品国产精华精华液好用吗 | 东京热男人av天堂 | 99久久精品日本一区二区免费 | 久久伊人色av天堂九九小黄鸭 | 四十如虎的丰满熟妇啪啪 | 国产电影无码午夜在线播放 | 噜噜噜亚洲色成人网站 | 久久综合激激的五月天 | 久久久无码中文字幕久... | 免费无码午夜福利片69 | 色欲综合久久中文字幕网 | 亚洲熟妇色xxxxx欧美老妇y | 久久伊人色av天堂九九小黄鸭 | 丰满人妻精品国产99aⅴ | 亚洲人成网站在线播放942 | 在线а√天堂中文官网 | 99久久久无码国产aaa精品 | 国产猛烈高潮尖叫视频免费 | 乱码午夜-极国产极内射 | 色一情一乱一伦 | 日韩成人一区二区三区在线观看 | 国产av久久久久精东av | 亚洲精品无码国产 | 免费无码av一区二区 | 欧美成人高清在线播放 | 亚洲国产成人av在线观看 | 国产精品久久久久7777 | 欧美精品免费观看二区 | 国产两女互慰高潮视频在线观看 | 老子影院午夜精品无码 | 精品国产青草久久久久福利 | 自拍偷自拍亚洲精品被多人伦好爽 | 日日摸天天摸爽爽狠狠97 | 国产亚洲人成在线播放 | 在线观看国产一区二区三区 | 久久精品国产精品国产精品污 | 国产av无码专区亚洲a∨毛片 | 国产午夜精品一区二区三区嫩草 | 俺去俺来也www色官网 | 伊人久久大香线蕉亚洲 | 高中生自慰www网站 | 日韩视频 中文字幕 视频一区 | 久久精品国产日本波多野结衣 | 男人的天堂2018无码 | 国产激情无码一区二区 | 久久久久国色av免费观看性色 | 最近免费中文字幕中文高清百度 | 国产欧美精品一区二区三区 | 在线欧美精品一区二区三区 | 熟妇女人妻丰满少妇中文字幕 | 国内少妇偷人精品视频 | 国产精品久久久av久久久 | 无码福利日韩神码福利片 | 欧美怡红院免费全部视频 | 精品国偷自产在线 | 少妇高潮一区二区三区99 | 欧美国产日韩久久mv | 色婷婷久久一区二区三区麻豆 | 蜜桃臀无码内射一区二区三区 | 永久黄网站色视频免费直播 | 国产成人综合在线女婷五月99播放 | 国产精品国产三级国产专播 | 国产精品久久久av久久久 | 一二三四社区在线中文视频 | 欧美激情综合亚洲一二区 | 伊人久久婷婷五月综合97色 | 四虎影视成人永久免费观看视频 | 久久这里只有精品视频9 | 国产人妻久久精品二区三区老狼 | 久久国产劲爆∧v内射 | 久久综合狠狠综合久久综合88 | 亚洲 高清 成人 动漫 | 麻豆蜜桃av蜜臀av色欲av | 国产成人亚洲综合无码 | 97久久国产亚洲精品超碰热 | 国内精品人妻无码久久久影院蜜桃 | 午夜福利一区二区三区在线观看 | 国产无遮挡又黄又爽免费视频 | 精品欧洲av无码一区二区三区 | 国产又爽又猛又粗的视频a片 | 高潮毛片无遮挡高清免费 | 欧美老熟妇乱xxxxx | 国产午夜福利亚洲第一 | 女人被男人爽到呻吟的视频 | 成人免费视频在线观看 | 全球成人中文在线 | 国产成人人人97超碰超爽8 | 亚洲日韩一区二区三区 | 一本久道高清无码视频 | 中文字幕av日韩精品一区二区 | 精品一区二区三区无码免费视频 | 欧美日韩一区二区免费视频 | 无码国内精品人妻少妇 | 国产在线精品一区二区三区直播 | 四虎永久在线精品免费网址 | 日韩亚洲欧美精品综合 | 97精品国产97久久久久久免费 | 久激情内射婷内射蜜桃人妖 | 婷婷六月久久综合丁香 | 少妇无码吹潮 | 特黄特色大片免费播放器图片 | 十八禁视频网站在线观看 | 欧美丰满熟妇xxxx性ppx人交 | 国产做国产爱免费视频 | 欧美日韩人成综合在线播放 | 欧美亚洲日韩国产人成在线播放 | 成人欧美一区二区三区黑人免费 | 亚洲熟悉妇女xxx妇女av | 亚洲aⅴ无码成人网站国产app | 国产激情精品一区二区三区 | 亚洲一区av无码专区在线观看 | 国产熟妇另类久久久久 | 免费中文字幕日韩欧美 | 日日夜夜撸啊撸 | 日日摸夜夜摸狠狠摸婷婷 | 成人性做爰aaa片免费看 | 久久国语露脸国产精品电影 | 久久久国产精品无码免费专区 | 无码人妻精品一区二区三区下载 | 亚洲国产av美女网站 | 蜜桃av抽搐高潮一区二区 | 人人妻人人藻人人爽欧美一区 | 天天燥日日燥 | 日本丰满熟妇videos | 国产另类ts人妖一区二区 | 好爽又高潮了毛片免费下载 | 免费看少妇作爱视频 | 岛国片人妻三上悠亚 | 成人无码视频免费播放 | 亚洲 高清 成人 动漫 | 波多野结衣 黑人 | 色综合久久88色综合天天 | 精品日本一区二区三区在线观看 | 国产特级毛片aaaaaa高潮流水 | 国产精品亚洲一区二区三区喷水 | 少妇无码av无码专区在线观看 | 午夜熟女插插xx免费视频 | √8天堂资源地址中文在线 | 亚洲一区二区三区四区 | 国产综合在线观看 | 国产精品久久久久久亚洲影视内衣 | 欧美自拍另类欧美综合图片区 | 成熟人妻av无码专区 | 欧美老熟妇乱xxxxx | 国产成人精品必看 | 日日摸夜夜摸狠狠摸婷婷 | 在线播放无码字幕亚洲 | 国产成人精品视频ⅴa片软件竹菊 | 午夜理论片yy44880影院 | 少妇无码一区二区二三区 | 双乳奶水饱满少妇呻吟 | 亚洲综合精品香蕉久久网 | 少妇性荡欲午夜性开放视频剧场 | www国产亚洲精品久久久日本 | 国产精品亚洲lv粉色 | 亚洲精品国产精品乱码不卡 | 亚洲日本va中文字幕 | 内射欧美老妇wbb | 国产xxx69麻豆国语对白 | 免费无码一区二区三区蜜桃大 | 无码av最新清无码专区吞精 | 欧美人与牲动交xxxx | 波多野结衣 黑人 | 中文字幕无码av波多野吉衣 | 亚洲欧美国产精品久久 | 日本一区二区三区免费高清 | 乌克兰少妇性做爰 | 国产精品二区一区二区aⅴ污介绍 | 岛国片人妻三上悠亚 | 欧美性色19p | 国产精品无码成人午夜电影 | 成人一在线视频日韩国产 | 亚洲伊人久久精品影院 | 在线亚洲高清揄拍自拍一品区 | 午夜精品一区二区三区在线观看 | 最近免费中文字幕中文高清百度 | 2019nv天堂香蕉在线观看 | 天堂а√在线地址中文在线 | 日韩精品a片一区二区三区妖精 | 国产精品久久国产三级国 | 国产精品久久久久9999小说 | 亚洲日韩一区二区 | 国产精品视频免费播放 | 无码任你躁久久久久久久 | 亚洲国产成人av在线观看 | 久久精品国产日本波多野结衣 | 国产精品-区区久久久狼 | 亚洲精品成a人在线观看 | 欧美变态另类xxxx | 中文字幕 亚洲精品 第1页 | 特大黑人娇小亚洲女 | 精品国产aⅴ无码一区二区 | 精品国产精品久久一区免费式 | 一区二区三区高清视频一 | 精品aⅴ一区二区三区 | 亚洲欧洲中文日韩av乱码 | 国内综合精品午夜久久资源 | 亚洲欧美精品伊人久久 | 成人亚洲精品久久久久 | 国产精品办公室沙发 | 国产在线一区二区三区四区五区 | 天天拍夜夜添久久精品大 | 国产绳艺sm调教室论坛 | 亚洲 欧美 激情 小说 另类 | 全球成人中文在线 | 荡女精品导航 | 国产特级毛片aaaaaa高潮流水 | 永久黄网站色视频免费直播 | 久久99精品久久久久久动态图 | 老司机亚洲精品影院 | 亚洲日韩精品欧美一区二区 | 色噜噜亚洲男人的天堂 | 欧美变态另类xxxx | 夜精品a片一区二区三区无码白浆 | 国产精品成人av在线观看 | 国产成人无码av片在线观看不卡 | 国产麻豆精品精东影业av网站 | 色欲综合久久中文字幕网 | 国产精品久久国产精品99 | 成人欧美一区二区三区黑人 | 无码国产乱人伦偷精品视频 | 国内综合精品午夜久久资源 | 亚洲一区二区三区偷拍女厕 | 欧美激情内射喷水高潮 | 国产午夜无码精品免费看 | 娇妻被黑人粗大高潮白浆 | 欧美激情内射喷水高潮 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲成av人片天堂网无码】 | 亚洲国产高清在线观看视频 | 国产精品久久国产三级国 | 在线亚洲高清揄拍自拍一品区 | 欧美日韩久久久精品a片 | 亚洲日韩av片在线观看 | 色婷婷综合激情综在线播放 | 99视频精品全部免费免费观看 | 中文无码伦av中文字幕 | 亚洲欧美中文字幕5发布 | 日韩精品无码一本二本三本色 | 国产av一区二区三区最新精品 | 成人无码精品1区2区3区免费看 | 国产成人精品久久亚洲高清不卡 | 精品无码一区二区三区爱欲 | 无码播放一区二区三区 | 人妻尝试又大又粗久久 | 亚洲精品综合一区二区三区在线 | 宝宝好涨水快流出来免费视频 | 黑人大群体交免费视频 | 无码一区二区三区在线 | 成人精品天堂一区二区三区 | 国产超碰人人爽人人做人人添 | 国产精品自产拍在线观看 | 乱人伦中文视频在线观看 | 十八禁真人啪啪免费网站 | 亚洲中文字幕久久无码 | 亚洲aⅴ无码成人网站国产app | 人人爽人人爽人人片av亚洲 | 日日夜夜撸啊撸 | 中文精品无码中文字幕无码专区 | 骚片av蜜桃精品一区 | 久久精品女人的天堂av | 人人妻人人澡人人爽欧美精品 | 无码人妻精品一区二区三区不卡 | 日日麻批免费40分钟无码 | 成人一区二区免费视频 | 97久久国产亚洲精品超碰热 | 国内老熟妇对白xxxxhd | 天天躁日日躁狠狠躁免费麻豆 | 波多野结衣av一区二区全免费观看 | 97夜夜澡人人双人人人喊 | 精品国产国产综合精品 | 人妻少妇精品视频专区 | 国产精品久久久久久亚洲毛片 | 亚洲中文字幕乱码av波多ji | 精品厕所偷拍各类美女tp嘘嘘 | 午夜时刻免费入口 | 成人影院yy111111在线观看 | 国产精品人妻一区二区三区四 | 午夜成人1000部免费视频 | 亚洲精品无码国产 | 内射后入在线观看一区 | 欧美亚洲国产一区二区三区 | 亚洲日韩一区二区 | 日韩精品乱码av一区二区 | 亚洲一区二区三区无码久久 | 亚洲精品午夜国产va久久成人 | 欧美精品国产综合久久 | 沈阳熟女露脸对白视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 蜜桃av抽搐高潮一区二区 |