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

通過擴展 Spark SQL ,打造自己的大數據分析引擎

大數據 Spark
Spark SQL 的 Catalyst ,這部分真的很有意思,值得去仔細研究一番,今天先來說說Spark的一些擴展機制吧,上一次寫Spark,對其SQL的解析進行了一定的魔改,今天我們按套路來,使用磚廠為我們提供的機制,來擴展Spark...

[[403924]]

Spark SQL 的 Catalyst ,這部分真的很有意思,值得去仔細研究一番,今天先來說說Spark的一些擴展機制吧,上一次寫Spark,對其SQL的解析進行了一定的魔改,今天我們按套路來,使用磚廠為我們提供的機制,來擴展Spark...

首先我們先來了解一下 Spark SQL 的整體執行流程,輸入的查詢先被解析成未關聯元數據的邏輯計劃,然后根據元數據和解析規則,生成邏輯計劃,再經過優化規則,形成優化過的邏輯計劃(RBO),將邏輯計劃轉換成物理計劃在經過代價模型(CBO),輸出真正的物理執行計劃。

我們今天舉三個擴展的例子,來進行說明。

擴展解析器

這個例子,我們擴展解析引擎,我們對輸入的SQL,禁止泛查詢即不許使用select *來做查詢,以下是解析的代。

  1. package wang.datahub.parser 
  2.  
  3. import org.apache.spark.sql.catalyst.analysis.UnresolvedStar 
  4. import org.apache.spark.sql.catalyst.expressions.Expression 
  5. import org.apache.spark.sql.catalyst.parser.ParserInterface 
  6. import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Project} 
  7. import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} 
  8. import org.apache.spark.sql.types.{DataType, StructType} 
  9.  
  10. class MyParser(parser: ParserInterface) extends ParserInterface { 
  11.  /** 
  12.   * Parse a string to a [[LogicalPlan]]. 
  13.   */ 
  14.  override def parsePlan(sqlText: String): LogicalPlan = { 
  15.    val logicalPlan = parser.parsePlan(sqlText) 
  16.    logicalPlan transform { 
  17.      case project @ Project(projectList, _) => 
  18.        projectList.foreach { 
  19.          name => 
  20.            if (name.isInstanceOf[UnresolvedStar]) { 
  21.              throw new RuntimeException("You must specify your project column set," + 
  22.                " * is not allowed."
  23.           } 
  24.       } 
  25.        project 
  26.   } 
  27.    logicalPlan 
  28.  
  29.  /** 
  30.   * Parse a string to an [[Expression]]. 
  31.   */ 
  32.  override def parseExpression(sqlText: String): Expression = parser.parseExpression(sqlText) 
  33.  
  34.  /** 
  35.   * Parse a string to a [[TableIdentifier]]. 
  36.   */ 
  37.  override def parseTableIdentifier(sqlText: String): TableIdentifier = 
  38.    parser.parseTableIdentifier(sqlText) 
  39.  
  40.  /** 
  41.   * Parse a string to a [[FunctionIdentifier]]. 
  42.   */ 
  43.  override def parseFunctionIdentifier(sqlText: String): FunctionIdentifier = 
  44.    parser.parseFunctionIdentifier(sqlText) 
  45.  
  46.  /** 
  47.   * Parse a string to a [[StructType]]. The passed SQL string should be a comma separated 
  48.   * list of field definitions which will preserve the correct Hive metadata. 
  49.   */ 
  50.  override def parseTableSchema(sqlText: String): StructType = 
  51.    parser.parseTableSchema(sqlText) 
  52.  
  53.  /** 
  54.   * Parse a string to a [[DataType]]. 
  55.   */ 
  56.  override def parseDataType(sqlText: String): DataType = parser.parseDataType(sqlText) 

接下來,我們測試一下

  1. package wang.datahub.parser 
  2.  
  3. import org.apache.spark.sql.{SparkSession, SparkSessionExtensions} 
  4. import org.apache.spark.sql.catalyst.parser.ParserInterface 
  5.  
  6. object MyParserApp { 
  7.  def main(args: Array[String]): Unit = { 
  8.    System.setProperty("hadoop.home.dir","E:\\devlop\\envs\\hadoop-common-2.2.0-bin-master"); 
  9.    type ParserBuilder = (SparkSession, ParserInterface) => ParserInterface 
  10.    type ExtensionsBuilder = SparkSessionExtensions => Unit 
  11.    val parserBuilder: ParserBuilder = (_, parser) => new MyParser(parser) 
  12.    val extBuilder: ExtensionsBuilder = { e => e.injectParser(parserBuilder)} 
  13.    val spark =  SparkSession 
  14.     .builder() 
  15.     .appName("Spark SQL basic example"
  16.     .config("spark.master""local[*]"
  17.     .withExtensions(extBuilder) 
  18.     .getOrCreate() 
  19.  
  20.    spark.sparkContext.setLogLevel("ERROR"
  21.  
  22.    import spark.implicits._ 
  23.  
  24.    val df = Seq( 
  25.     ( "First Value",1, java.sql.Date.valueOf("2010-01-01")), 
  26.     ( "First Value",4, java.sql.Date.valueOf("2010-01-01")), 
  27.     ("Second Value",2,  java.sql.Date.valueOf("2010-02-01")), 
  28.     ("Second Value",9,  java.sql.Date.valueOf("2010-02-01")) 
  29.   ).toDF("name""score""date_column"
  30.    df.createTempView("p"
  31.  
  32.    //   val df = spark.read.json("examples/src/main/resources/people.json"
  33.    //   df.toDF().write.saveAsTable("person"
  34.    //,javg(score) 
  35.  
  36.    // custom parser 
  37.    //   spark.sql("select * from p ").show 
  38.  
  39.    spark.sql("select * from p").show() 

下面是執行結果,符合我們的預期。

擴展優化器

接下來,我們來擴展優化器,磚廠提供了很多默認的RBO,這里可以方便的構建我們自己的優化規則,本例中我們構建一套比較奇怪的規則,而且是完全不等價的,這里只是為了說明。

針對字段+0的操作,規則如下:

  1. 如果0出現在+左邊,則直接將字段變成右表達式,即 0+nr 等效為 nr
  2. 如果0出現在+右邊,則將0變成3,即 nr+0 變成 nr+3
  3. 如果沒出現0,則表達式不變

下面是代碼:

  1. package wang.datahub.optimizer 
  2.  
  3. import org.apache.spark.sql.SparkSession 
  4. import org.apache.spark.sql.catalyst.expressions.{Add, Expression, Literal} 
  5. import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan 
  6. import org.apache.spark.sql.catalyst.rules.Rule 
  7.  
  8. object MyOptimizer extends Rule[LogicalPlan] { 
  9.  
  10.  def apply(logicalPlan: LogicalPlan): LogicalPlan = { 
  11.    logicalPlan.transformAllExpressions { 
  12.      case Add(leftright) => { 
  13.        println("this this my add optimizer"
  14.        if (isStaticAdd(left)) { 
  15.          right 
  16.       } else if (isStaticAdd(right)) { 
  17.          Add(left, Literal(3L)) 
  18.       } else { 
  19.          Add(leftright
  20.       } 
  21.     } 
  22.   } 
  23.  
  24.  private def isStaticAdd(expression: Expression): Boolean = { 
  25.    expression.isInstanceOf[Literal] && expression.asInstanceOf[Literal].toString == "0" 
  26.  
  27.  def main(args: Array[String]): Unit = { 
  28.    System.setProperty("hadoop.home.dir","E:\\devlop\\envs\\hadoop-common-2.2.0-bin-master"); 
  29.    val testSparkSession: SparkSession = SparkSession.builder().appName("Extra optimization rules"
  30.     .master("local[*]"
  31.     .withExtensions(extensions => { 
  32.        extensions.injectOptimizerRule(session => MyOptimizer) 
  33.     }) 
  34.     .getOrCreate() 
  35.  
  36.    testSparkSession.sparkContext.setLogLevel("ERROR"
  37.  
  38.    import testSparkSession.implicits._ 
  39.    testSparkSession.experimental.extraOptimizations = Seq() 
  40.    Seq(-1, -2, -3).toDF("nr").write.mode("overwrite").json("./test_nrs"
  41. //   val optimizedResult = testSparkSession.read.json("./test_nrs").selectExpr("nr + 0"
  42.    testSparkSession.read.json("./test_nrs").createTempView("p"
  43.  
  44.    var sql = "select nr+0 from p"
  45.    var t = testSparkSession.sql(sql) 
  46.    println(t.queryExecution.optimizedPlan) 
  47.    println(sql) 
  48.    t.show() 
  49.  
  50.    sql = "select 0+nr from p"
  51.    var  u = testSparkSession.sql(sql) 
  52.    println(u.queryExecution.optimizedPlan) 
  53.    println(sql) 
  54.    u.show() 
  55.  
  56.    sql = "select nr+8 from p"
  57.    var  v = testSparkSession.sql(sql) 
  58.    println(v.queryExecution.optimizedPlan) 
  59.    println(sql) 
  60.    v.show() 
  61. //   println(optimizedResult.queryExecution.optimizedPlan.toString() ) 
  62. //   optimizedResult.collect().map(row => row.getAs[Long]("(nr + 0)")) 
  63.    Thread.sleep(1000000) 
  64.  

執行如下

  1. this this my add optimizer 
  2. this this my add optimizer 
  3. this this my add optimizer 
  4. Project [(nr#12L + 3) AS (nr + CAST(0 AS BIGINT))#14L] 
  5. +- Relation[nr#12L] json 
  6.  
  7. select nr+0 from p 
  8. this this my add optimizer 
  9. this this my add optimizer 
  10. this this my add optimizer 
  11. +------------------------+ 
  12. |(nr + CAST(0 AS BIGINT))| 
  13. +------------------------+ 
  14. |                       2| 
  15. |                       1| 
  16. |                       0| 
  17. +------------------------+ 
  18.  
  19. this this my add optimizer 
  20. Project [nr#12L AS (CAST(0 AS BIGINT) + nr)#21L] 
  21. +- Relation[nr#12L] json 
  22.  
  23. select 0+nr from p 
  24. this this my add optimizer 
  25. +------------------------+ 
  26. |(CAST(0 AS BIGINT) + nr)| 
  27. +------------------------+ 
  28. |                     -1| 
  29. |                     -2| 
  30. |                     -3| 
  31. +------------------------+ 
  32.  
  33. this this my add optimizer 
  34. this this my add optimizer 
  35. this this my add optimizer 
  36. Project [(nr#12L + 8) AS (nr + CAST(8 AS BIGINT))#28L] 
  37. +- Relation[nr#12L] json 
  38.  
  39. select nr+8 from p 
  40. this this my add optimizer 
  41. this this my add optimizer 
  42. this this my add optimizer 
  43. +------------------------+ 
  44. |(nr + CAST(8 AS BIGINT))| 
  45. +------------------------+ 
  46. |                       7| 
  47. |                       6| 
  48. |                       5| 
  49. +------------------------+ 

擴展策略

SparkStrategies包含了一系列特定的Strategies,這些Strategies是繼承自QueryPlanner中定義的Strategy,它定義接受一個Logical Plan,生成一系列的Physical Plan

通過Strategies把邏輯計劃轉換成可以具體執行的物理計劃,代碼如下

  1. package wang.datahub.strategy 
  2.  
  3. import org.apache.spark.sql.{SparkSession, Strategy} 
  4. import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan 
  5. import org.apache.spark.sql.execution.SparkPlan 
  6.  
  7. object MyStrategy extends Strategy { 
  8.  def apply(plan: LogicalPlan): Seq[SparkPlan] = { 
  9.    println("Hello world!"
  10.    Nil 
  11.  
  12.  def main(args: Array[String]): Unit = { 
  13.    System.setProperty("hadoop.home.dir","E:\\devlop\\envs\\hadoop-common-2.2.0-bin-master"); 
  14.    val spark = SparkSession.builder().master("local").getOrCreate() 
  15.  
  16.    spark.experimental.extraStrategies = Seq(MyStrategy) 
  17.    val q = spark.catalog.listTables.filter(t => t.name == "six"
  18.    q.explain(true
  19.    spark.stop() 

執行效果

好了,擴展部分就先介紹到這,接下來我計劃可能會簡單說說RBO和CBO,結合之前做過的一個小功能,一條SQL的查詢時間預估。

本文轉載自微信公眾號「麒思妙想」,可以通過以下二維碼關注。轉載本文請聯系麒思妙想公眾號。

 

責任編輯:武曉燕 來源: 麒思妙想
相關推薦

2015-10-16 09:21:13

SparkMySQL數據分析

2013-07-31 09:20:07

大數據引擎云計算個性化搜索

2017-10-11 11:10:02

Spark Strea大數據流式處理

2015-08-14 10:28:09

大數據

2021-08-06 11:01:23

大數據數據分析技術

2019-06-19 16:01:14

Spark數據分析SparkSQL

2015-04-20 14:36:52

大數據大數據分析提升客戶體驗

2017-07-22 00:41:27

大數據數據存儲

2014-03-27 09:36:36

Spark

2015-07-29 14:41:35

2019-07-31 14:16:35

大數據人工智能算法

2015-08-11 15:52:52

大數據數據分析

2022-06-13 08:00:00

數據湖數據倉庫大數據

2015-03-20 16:40:40

Spark大數據分析大數據

2022-03-29 14:49:14

大數據數據分析

2021-10-12 15:25:08

大數據數據分析

2015-07-23 09:34:57

大數據數據分析

2013-04-09 09:28:20

大數據大數據全球技術峰會

2018-10-24 14:32:15

數據分析數據科學算法

2023-12-22 15:49:02

大數據科學家Python數據分析師
點贊
收藏

51CTO技術棧公眾號

114国产精品久久免费观看| 久久久999精品视频| 中文字幕欧美人妻精品一区| 爱久久·www| 国产主播一区二区三区| 性欧美办公室18xxxxhd| 亚洲色成人网站www永久四虎| 六九午夜精品视频| 亚洲三级免费电影| 久久久久一区二区三区| 国产免费视频一区二区三区| 国产亚洲欧洲| 久青草国产97香蕉在线视频| 熟女丰满老熟女熟妇| 99久久久国产| 91久久国产最好的精华液| 国产人妻互换一区二区| 日本一级在线观看| 国产精品18久久久久久久久久久久 | 久久经典视频| 国产91丝袜在线观看| 国产精品日韩精品| 久久亚洲天堂网| 中文字幕一区二区三区在线视频| 夜夜嗨av一区二区三区四区| 在线观看一区二区三区四区| 亚洲男人在线| 欧美午夜免费电影| 亚洲欧美国产不卡| 四虎精品成人免费网站| 国产成人av影院| 国产精品日韩专区| 天堂网免费视频| 日韩亚洲在线| 韩国一区二区电影| 538精品在线观看| 91视频精品| 亚洲视频电影图片偷拍一区| 日本免费福利视频| 北条麻妃在线一区二区免费播放| 欧美一区二区三区在线观看| www.涩涩涩| 欧美va在线观看| 欧美性色视频在线| 日韩中文字幕在线视频观看| 黄页网站大全在线免费观看| 亚洲欧美激情在线| 一区二区三区四区不卡| 永久免费在线观看视频| 中文字幕免费观看一区| 日本欧美色综合网站免费| 日中文字幕在线| 国产成人av自拍| 国产精品sss| 日韩在线观看视频一区二区三区| 国产成人精品免费看| 99超碰麻豆| 丰满人妻av一区二区三区| 国产乱码精品一区二区三| 91色在线视频| 午夜精品在线播放| 成人免费毛片片v| 精品一区二区三区国产| 欧美拍拍视频| 日本一区二区视频在线| 亚洲精品视频一区二区三区| 在线观看完整版免费| 1区2区3区精品视频| 韩国黄色一级大片| 欧美卡一卡二| 欧美日韩精品在线播放| 六月丁香婷婷在线| 免费一级欧美在线观看视频| 3d成人h动漫网站入口| 国产又粗又猛又爽又黄| 国产精品一区二区中文字幕| 亚洲片国产一区一级在线观看| 在线观看亚洲大片短视频| 欧美激情777| 久久久噜久噜久久综合| 永久免费无码av网站在线观看| 日韩精品视频网站| 成人深夜直播免费观看| 狠狠躁夜夜躁av无码中文幕| 国产亚洲综合色| 天天操天天干天天玩| 精品三级久久| 欧美日韩精品免费| 亚洲少妇一区二区三区| 国产一区二区三区网| 久久精品视频免费播放| 久久狠狠高潮亚洲精品| 日本在线不卡一区| 国产精品白丝jk白祙| 男人天堂综合| 一区二区三区国产精品| 人妻少妇被粗大爽9797pw| 四虎精品永久免费| 亚洲国产欧美自拍| 国产精品麻豆一区| 国产色综合网| 亚洲在线免费看| 久蕉在线视频| 亚洲小说欧美激情另类| 五月婷婷丁香色| 国产一区调教| 美女av一区二区| 欧美brazzers| 99热国产精品| 经典三级在线视频| 国产日韩电影| 亚洲第一福利在线观看| 国产女人18水真多毛片18精品| 亚洲影音一区| 草莓视频一区| 国产精品剧情一区二区在线观看| 好吊成人免视频| 337p日本欧洲亚洲大胆张筱雨 | 一区二区不卡在线| 成人勉费视频| 亚洲国产成人久久综合一区| 9999热视频| 麻豆精品一二三| 品久久久久久久久久96高清| 好吊日av在线| 91精品国产综合久久久久久| 中文字幕在线观看免费高清| 亚洲茄子视频| 国产精品一级久久久| 黄色免费在线网站| 欧美揉bbbbb揉bbbbb| 狠狠人妻久久久久久综合蜜桃| 欧美高清日韩| 成人黄色片在线| 日本最新在线视频| 欧美无砖专区一中文字| a天堂中文字幕| 狂野欧美一区| 日本一区视频在线观看免费| 欧美aa在线| 日韩大陆欧美高清视频区| 日本五十路女优| a级高清视频欧美日韩| youjizz.com在线观看| 日韩欧美中文在线观看| 欧美裸体xxxx极品少妇| 国产v在线观看| 亚洲乱码国产乱码精品精98午夜 | 久久久久亚洲av成人毛片韩| 成人免费看黄yyy456| 欧美成人精品免费| 9l视频自拍九色9l视频成人| 欧美激情一区二区三区高清视频| www.日本在线观看| 亚洲成人7777| 色婷婷免费视频| 在线亚洲激情| 区一区二区三区中文字幕| 影音成人av| 播播国产欧美激情| www.蜜臀av| 欧美日韩国产在线看| 久久久精品人妻无码专区| 国产精品试看| 视频一区不卡| 视频精品二区| 97超碰国产精品女人人人爽| 青青草免费在线视频| 91极品美女在线| 糖心vlog免费在线观看 | 中文字幕在线永久| 亚洲成人三区| 成人春色激情网| 天堂а√在线官网| 日韩免费看网站| 日韩特黄一级片| 国产校园另类小说区| 午夜啪啪小视频| 午夜日韩在线| 免费看污久久久| 日韩成人综合网站| 韩国精品久久久999| 精品视频一二区| 欧美一区二区三区免费大片| 国产乱码久久久久久| 亚洲国产精品黑人久久久| 波多野结衣电影免费观看| 久久国产主播| 国产 国语对白 露脸| 色婷婷狠狠五月综合天色拍| 国产日韩av在线| 波多野一区二区| 日韩中文字幕视频| 青青草在线视频免费观看| 911精品产国品一二三产区| 日本少妇bbwbbw精品| 亚洲国产精品成人综合色在线婷婷 | 国产又黄又爽又无遮挡| 久久精品亚洲麻豆av一区二区| 午夜精品久久久久久久99热影院| 亚洲国产精品一区| 中文字幕欧美日韩一区二区| 老牛精品亚洲成av人片| 成人网中文字幕| 午夜欧美巨大性欧美巨大 | 精品深夜av无码一区二区老年| 久久久综合九色合综国产精品| 国产精品999.| 久久美女性网| 日本大片免费看| 欧美亚洲高清| 欧美精品二区三区四区免费看视频| av日韩久久| 国产成人鲁鲁免费视频a| 色在线视频网| 久久亚洲国产精品| melody高清在线观看| 亚洲精品国产精品自产a区红杏吧| 一卡二卡三卡在线| 91成人在线精品| 日韩精品在线观看免费| 亚洲一线二线三线久久久| 成年人视频软件| 久久亚洲欧美国产精品乐播| 国产精品亚洲一区二区无码| 黄一区二区三区| 少妇一级淫免费放| 亚洲欧美日韩国产一区| 黄色一级视频在线播放| 国产综合网站| 欧美人成在线观看| 欧美精品日韩| 国产精品一二三在线观看| 99精品视频精品精品视频 | 99精品福利视频| 国产青草视频在线观看| 午夜久久福利| 亚洲av综合色区| 欧美日韩国产在线一区| 欧美精品一区二区性色a+v| 五月天激情综合网| 中国黄色录像片| 亚洲人体av| 黄色一级片网址| 亚洲国产精品久久久天堂| 中文字幕不卡每日更新1区2区| 精品日韩免费| 色姑娘综合网| 精品麻豆一区二区三区| 香蕉免费一区二区三区在线观看| 久久久青草婷婷精品综合日韩| 色婷婷久久综合| 欧美日本中文字幕| 精品无码一区二区三区的天堂| 亚洲国产美国国产综合一区二区| 欧美xxxx黑人xyx性爽| 亚洲视频一区在线| www.av视频| 亚洲综合丝袜美腿| 好吊操这里只有精品| 国产精品视区| 国产精品久久久久7777婷婷| 一呦二呦三呦精品国产| 国产精品日韩在线观看| av在线国产精品| 不卡一卡2卡3卡4卡精品在| 欧美成人基地| 日韩精品欧美专区| 天天综合久久| cao在线观看| 日日夜夜精品视频天天综合网| 日本免费观看网站| 国产一区二区影院| 日韩无码精品一区二区| 久久久精品影视| 国产稀缺精品盗摄盗拍| 亚洲一区二区欧美激情| 69视频免费在线观看| 欧美丝袜第一区| 国产精品国产一区二区三区四区| 精品美女一区二区| 国产一二三在线观看| 久久成人18免费网站| 丝袜诱惑一区二区| 成人写真福利网| 青青草久久爱| 手机看片日韩国产| 99综合精品| www.污网站| 久久亚洲免费视频| 91精品国产高清一区二区三蜜臀| 午夜视频一区在线观看| 老熟妇一区二区三区啪啪| 日韩一区二区三区免费看| 蝌蚪视频在线播放| 欧美极品少妇全裸体| 国产欧美自拍| 老牛影视免费一区二区| 亚洲女同中文字幕| 无码人妻丰满熟妇区毛片| 国产成人亚洲综合a∨猫咪| 男生草女生视频| 亚洲国产一区视频| 一级特黄aa大片| 亚洲日韩欧美视频| 女同视频在线观看| 成人淫片在线看| 欧美久久综合网| 欧美日韩成人免费视频| 国产一区激情在线| 久久久久久成人网| 欧美午夜宅男影院在线观看| a天堂在线观看视频| 三级精品视频久久久久| 丝袜美腿诱惑一区二区三区| 懂色一区二区三区av片| 亚洲精品网址| 中文字幕 91| 中文字幕成人网| www.色国产| 日韩精品在线免费观看| 美女精品导航| 国产二区不卡| 欧美激情1区2区3区| 欧美国产日韩另类| 国产精品美日韩| 国产男人搡女人免费视频| 精品亚洲一区二区三区在线播放 | 久久6免费高清热精品| 国产精品第一| 亚洲国产精品123| 久久国产日本精品| a级大片在线观看| 日韩欧美a级成人黄色| 无码国产色欲xxxx视频| 欧美精品18videos性欧美| 精品国产亚洲一区二区在线观看| 久久久一二三四| 狠狠色综合日日| 在线观看亚洲网站| 4438亚洲最大| 日本三级韩国三级欧美三级| 99视频免费观看| 亚洲天堂偷拍| 黄色片视频免费观看| 精品久久久久久久久中文字幕| 天天操天天干天天| 欧美中文在线观看| 欧美美女在线| 亚洲黄色小视频在线观看| 国产欧美日本一区二区三区| 成年人av网站| 日韩在线视频免费观看高清中文| 免费日韩成人| 996这里只有精品| www.在线成人| 国产精品久久久久久久久久精爆| 亚洲色图激情小说| 国产综合色激情| 18视频在线观看娇喘| 成人v精品蜜桃久久一区| 日本熟女毛茸茸| 色yeye香蕉凹凸一区二区av| 国产精品视频首页| 青青青在线视频播放| 91香蕉视频mp4| 怡春院在线视频| 久久综合久久八八| 欧美理伦片在线播放| 黄色三级视频在线| 一区二区三区在线视频观看| 人妻精品无码一区二区| 欧美在线免费看| 99久久99久久精品国产片桃花| 中文字幕在线播放一区二区| 午夜精品久久久久久久99水蜜桃| 你懂的免费在线观看视频网站| 国产精品永久免费在线| 国语自产精品视频在线看8查询8| 疯狂揉花蒂控制高潮h| 欧美网站一区二区| 污污的视频在线观看| 欧美日韩在线一区二区三区| 久久精品久久99精品久久| 国产在线视频在线观看| 亚洲欧美日韩精品久久| 成人综合日日夜夜| 91精品91久久久中77777老牛| 中文字幕第一区| 姝姝窝人体www聚色窝| 国产日韩av在线| 在线亚洲精品| 69xx绿帽三人行| 亚洲欧洲高清在线| 1204国产成人精品视频| 国产又大又黄又粗的视频| 亚洲尤物视频在线| av在线资源站| 久久爱av电影| 国产一区二区网址|