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

Spark知識體系完整解讀

大數據 Spark
  Spark是整個BDAS的核心組件,是一個大數據分布式編程框架,不僅實現了MapReduce的算子map 函數和reduce函數及計算模型,還提供更為豐富的算子,如filter、join、groupByKey等。是一個用來實現快速而同用的集群計算的平臺。

Spark簡介

  Spark是整個BDAS的核心組件,是一個大數據分布式編程框架,不僅實現了MapReduce的算子map 函數和reduce函數及計算模型,還提供更為豐富的算子,如filter、join、groupByKey等。是一個用來實現快速而同用的集群計算的平臺。

  Spark將分布式數據抽象為彈性分布式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,并為運行在其上的上層組件提供API。其底層采用Scala這種函數式語言書寫而成,并且所提供的API深度借鑒Scala函數式的編程思想,提供與Scala類似的編程接口

  Sparkon Yarn

  

  從用戶提交作業到作業運行結束整個運行期間的過程分析。

  一、客戶端進行操作

  1. 根據yarnConf來初始化yarnClient,并啟動yarnClient

  2. 創建客戶端Application,并獲取Application的ID,進一步判斷集群中的資源是否滿足executor和ApplicationMaster申請的資源,如果不滿足則拋出IllegalArgumentException;

  3. 設置資源、環境變量:其中包括了設置Application的Staging目錄、準備本地資源(jar文件、log4j.properties)、設置Application其中的環境變量、創建Container啟動的Context等;

  4. 設置Application提交的Context,包括設置應用的名字、隊列、AM的申請的Container、標記該作業的類型為Spark;

  5. 申請Memory,并最終通過yarnClient.submitApplication向ResourceManager提交該Application。

  當作業提交到YARN上之后,客戶端就沒事了,甚至在終端關掉那個進程也沒事,因為整個作業運行在YARN集群上進行,運行的結果將會保存到HDFS或者日志中。

  二、提交到YARN集群,YARN操作

  1. 運行ApplicationMaster的run方法;

  2. 設置好相關的環境變量。

  3. 創建amClient,并啟動;

  4. 在Spark UI啟動之前設置Spark UI的AmIpFilter;

  5. 在startUserClass函數專門啟動了一個線程(名稱為Driver的線程)來啟動用戶提交的Application,也就是啟動了Driver。在Driver中將會初始化SparkContext;

  6. 等待SparkContext初始化完成,最多等待spark.yarn.applicationMaster.waitTries次數(默認為10),如果等待了的次數超過了配置的,程序將會退出;否則用SparkContext初始化yarnAllocator;

  7. 當SparkContext、Driver初始化完成的時候,通過amClient向ResourceManager注冊ApplicationMaster

  8. 分配并啟動Executeors。在啟動Executeors之前,先要通過yarnAllocator獲取到numExecutors個Container,然后在Container中啟動Executeors。

      那么這個Application將失敗,將Application Status標明為FAILED,并將關閉SparkContext。其實,啟動Executeors是通過ExecutorRunnable實現的,而ExecutorRunnable內部是啟動CoarseGrainedExecutorBackend的。

  9. 最后,Task將在CoarseGrainedExecutorBackend里面運行,然后運行狀況會通過Akka通知CoarseGrainedScheduler,直到作業運行完成。

  Spark節點的概念

  一、Spark驅動器是執行程序中的main()方法的進程。它執行用戶編寫的用來創建SparkContext(初始化)、創建RDD,以及運行RDD的轉化操作和行動操作的代碼。

  驅動器節點driver的職責:

  1. 把用戶程序轉為任務task(driver)

      Spark驅動器程序負責把用戶程序轉化為多個物理執行單元,這些單元也被稱之為任務task(詳解見備注)

  2. 為執行器節點調度任務(executor)

      有了物理計劃之后,Spark驅動器在各個執行器節點進程間協調任務的調度。Spark驅動器程序會根據當前的執行器節點,把所有任務基于數據所在位置分配給合適的執行器進程。當執行任務時,執行器進程會把緩存的數據存儲起來,而驅動器進程同樣會跟蹤這些緩存數據的位置,并利用這些位置信息來調度以后的任務,以盡量減少數據的網絡傳輸。(就是所謂的移動計算,而不移動數據)。

  二、執行器節點

  作用:

  1. 負責運行組成Spark應用的任務,并將結果返回給驅動器進程;

  2. 通過自身的塊管理器(blockManager)為用戶程序中要求緩存的RDD提供內存式存儲。RDD是直接緩存在執行器進程內的,因此任務可以在運行時充分利用緩存數據加快運算。

  驅動器的職責:

  所有的Spark程序都遵循同樣的結構:程序從輸入數據創建一系列RDD,再使用轉化操作派生成新的RDD,最后使用行動操作手機或存儲結果RDD,Spark程序其實是隱式地創建出了一個由操作組成的邏輯上的有向無環圖DAG。當驅動器程序執行時,它會把這個邏輯圖轉為物理執行計劃。

  這樣 Spark就把邏輯計劃轉為一系列步驟(stage),而每個步驟又由多個任務組成。這些任務會被打包送到集群中。

  Spark初始化

  1. 每個Spark應用都由一個驅動器程序來發起集群上的各種并行操作。驅動器程序包含應用的main函數,并且定義了集群上的分布式數據集,以及對該分布式數據集應用了相關操作。

  2. 驅動器程序通過一個SparkContext對象來訪問spark,這個對象代表對計算集群的一個連接。(比如在sparkshell啟動時已經自動創建了一個SparkContext對象,是一個叫做SC的變量。(下圖,查看變量sc)

      

  3. 一旦創建了sparkContext,就可以用它來創建RDD。比如調用sc.textFile()來創建一個代表文本中各行文本的RDD。(比如vallinesRDD = sc.textFile(“yangsy.text”),val spark = linesRDD.filter(line=>line.contains(“spark”),spark.count())

      執行這些操作,驅動器程序一般要管理多個執行器,就是我們所說的executor節點。

  4. 在初始化SparkContext的同時,加載sparkConf對象來加載集群的配置,從而創建sparkContext對象。

      從源碼中可以看到,在啟動thriftserver時,調用了spark- daemon.sh文件,該文件源碼如左圖,加載spark_home下的conf中的文件。

      

      (在執行后臺代碼時,需要首先創建conf對象,加載相應參數, val sparkConf = newSparkConf().setMaster("local").setAppName("cocapp").set("spark.executor.memory","1g"), val sc: SparkContext = new SparkContext(sparkConf))

  RDD工作原理:

  RDD(Resilient DistributedDatasets)[1] ,彈性分布式數據集,是分布式內存的一個抽象概念,RDD提供了一種高度受限的共享內存模型,即RDD是只讀的記錄分區的集合,只能通過在其他RDD執行確定的轉換操作(如map、join和group by)而創建,然而這些限制使得實現容錯的開銷很低。對開發者而言,RDD可以看作是Spark的一個對象,它本身運行于內存中,如讀文件是一個RDD,對文件計算是一個RDD,結果集也是一個RDD ,不同的分片、數據之間的依賴、key-value類型的map數據都可以看做RDD。

  主要分為三部分:創建RDD對象,DAG調度器創建執行計劃,Task調度器分配任務并調度Worker開始運行。

  SparkContext(RDD相關操作)→通過(提交作業)→(遍歷RDD拆分stage→生成作業)DAGScheduler→通過(提交任務集)→任務調度管理(TaskScheduler)→通過(按照資源獲取任務)→任務調度管理(TaskSetManager)

  Transformation返回值還是一個RDD。它使用了鏈式調用的設計模式,對一個RDD進行計算后,變換成另外一個RDD,然后這個RDD又可以進行另外一次轉換。這個過程是分布式的。

  Action返回值不是一個RDD。它要么是一個Scala的普通集合,要么是一個值,要么是空,最終或返回到Driver程序,或把RDD寫入到文件系統中

  轉換(Transformations)(如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是說從一個RDD轉換生成另一個RDD的操作不是馬上執行,Spark在遇到Transformations操作時只會記錄需要這樣的操作,并不會去執行,需要等到有Actions操作的時候才會真正啟動計算過程進行計算。

  操作(Actions)(如:count, collect, save等),Actions操作會返回結果或把RDD數據寫到存儲系統中。Actions是觸發Spark啟動計算的動因。

  它們本質區別是:Transformation返回值還是一個RDD。它使用了鏈式調用的設計模式,對一個RDD進行計算后,變換成另外一個RDD,然后這個RDD又可以進行另外一次轉換。這個過程是分布式的。Action返回值不是一個RDD。它要么是一個Scala的普通集合,要么是一個值,要么是空,最終或返回到Driver程序,或把RDD寫入到文件系統中。關于這兩個動作,在Spark開發指南中會有就進一步的詳細介紹,它們是基于Spark開發的核心。

  RDD基礎

  1. Spark中的RDD就是一個不可變的分布式對象集合。每個RDD都被分為多個分區,這些分區運行在集群的不同節點上。創建RDD的方法有兩種:一種是讀取一個外部數據集;一種是在群東程序里分發驅動器程序中的對象集合,不如剛才的示例,讀取文本文件作為一個字符串的RDD的示例。

  2. 創建出來后,RDD支持兩種類型的操作:轉化操作和行動操作

      轉化操作會由一個RDD生成一個新的RDD。(比如剛才的根據謂詞篩選)

      行動操作會對RDD計算出一個結果,并把結果返回到驅動器程序中,或把結果存儲到外部存儲系統(比如HDFS)中。比如first()操作就是一個行動操作,會返回RDD的第一個元素。

      注:轉化操作與行動操作的區別在于Spark計算RDD的方式不同。雖然你可以在任何時候定義一個新的RDD,但Spark只會惰性計算這些RDD。它們只有第一個在一個行動操作中用到時,才會真正的計算。之所以這樣設計,是因為比如剛才調用sc.textFile(...)時就把文件中的所有行都讀取并存儲起來,就會消耗很多存儲空間,而我們馬上又要篩選掉其中的很多數據。

      這里還需要注意的一點是,spark會在你每次對它們進行行動操作時重新計算。如果想在多個行動操作中重用同一個RDD,那么可以使用RDD.persist()或RDD.collect()讓Spark把這個RDD緩存下來。(可以是內存,也可以是磁盤)

  3. Spark會使用譜系圖來記錄這些不同RDD之間的依賴關系,Spark需要用這些信息來按需計算每個RDD,也可以依靠譜系圖在持久化的RDD丟失部分數據時用來恢復所丟失的數據。(如下圖,過濾errorsRDD與warningsRDD,最終調用union()函數)

      

  RDD計算方式

  

  RDD的寬窄依賴

  

  窄依賴 (narrowdependencies) 和寬依賴 (widedependencies) 。窄依賴是指 父 RDD 的每個分區都只被子 RDD 的一個分區所使用 。相應的,那么寬依賴就是指父 RDD 的分區被多個子 RDD 的分區所依賴。例如, map 就是一種窄依賴,而 join 則會導致寬依賴

  這種劃分有兩個用處。首先,窄依賴支持在一個結點上管道化執行。例如基于一對一的關系,可以在 filter 之后執行 map 。其次,窄依賴支持更高效的故障還原。因為對于窄依賴,只有丟失的父 RDD 的分區需要重新計算。而對于寬依賴,一個結點的故障可能導致來自所有父 RDD 的分區丟失,因此就需要完全重新執行。因此對于寬依賴,Spark 會在持有各個父分區的結點上,將中間數據持久化來簡化故障還原,就像 MapReduce 會持久化 map 的輸出一樣。

  SparkExample

  

  步驟 1 :創建 RDD 。上面的例子除去最后一個 collect 是個動作,不會創建 RDD 之外,前面四個轉換都會創建出新的 RDD 。因此第一步就是創建好所有 RDD( 內部的五項信息 ) 。

  步驟 2 :創建執行計劃。Spark 會盡可能地管道化,并基于是否要重新組織數據來劃分 階段 (stage) ,例如本例中的 groupBy() 轉換就會將整個執行計劃劃分成兩階段執行。最終會產生一個 DAG(directedacyclic graph ,有向無環圖 ) 作為邏輯執行計劃。

  步驟 3 :調度任務。 將各階段劃分成不同的 任務 (task) ,每個任務都是數據和計算的合體。在進行下一階段前,當前階段的所有任務都要執行完成。因為下一階段的第一個轉換一定是重新組織數據的,所以必須等當前階段所有結果數據都計算出來了才能繼續。

  假設本例中的 hdfs://names 下有四個文件塊,那么 HadoopRDD 中 partitions 就會有四個分區對應這四個塊數據,同時 preferedLocations 會指明這四個塊的最佳位置。現在,就可以創建出四個任務,并調度到合適的集群結點上。

  Spark數據分區

  1. Spark的特性是對數據集在節點間的分區進行控制。在分布式系統中,通訊的代價是巨大的,控制數據分布以獲得最少的網絡傳輸可以極大地提升整體性能。Spark程序可以通過控制RDD分區方式來減少通訊的開銷。

  2. Spark中所有的鍵值對RDD都可以進行分區。確保同一組的鍵出現在同一個節點上。比如,使用哈希分區將一個RDD分成了100個分區,此時鍵的哈希值對100取模的結果相同的記錄會被放在一個節點上。

      (可使用partitionBy(newHashPartitioner(100)).persist()來構造100個分區)

  3. Spark中的許多操作都引入了將數據根據鍵跨界點進行混洗的過程。(比如:join(),leftOuterJoin(),groupByKey(),reducebyKey()等)對于像reduceByKey()這樣只作用于單個RDD的操作,運行在未分區的RDD上的時候會導致每個鍵的所有對應值都在每臺機器上進行本地計算。

  SparkSQL的shuffle過程

  

  Spark SQL的核心是把已有的RDD,帶上Schema信息,然后注冊成類似sql里的”Table”,對其進行sql查詢。這里面主要分兩部分,一是生成SchemaRD,二是執行查詢。

  如果是spark-hive項目,那么讀取metadata信息作為Schema、讀取hdfs上數據的過程交給Hive完成,然后根據這倆部分生成SchemaRDD,在HiveContext下進行hql()查詢。

  SparkSQL結構化數據

  1. 首先說一下ApacheHive,Hive可以在HDFS內或者在其他存儲系統上存儲多種格式的表。SparkSQL可以讀取Hive支持的任何表。要把Spark SQL連接已有的hive上,需要提供Hive的配置文件。hive-site.xml文件復制到spark的conf文件夾下。再創建出HiveContext對象(sparksql的入口),然后就可以使用HQL來對表進行查詢,并以由行足證的RDD的形式拿到返回的數據。

  2. 創建Hivecontext并查詢數據

      importorg.apache.spark.sql.hive.HiveContext

      valhiveCtx = new org.apache.spark.sql.hive.HiveContext(sc)

      valrows = hiveCtx.sql(“SELECT name,age FROM users”)

      valfitstRow – rows.first()

      println(fitstRow.getSgtring(0)) //字段0是name字段

  3. 通過jdbc連接外部數據源更新與加載

      Class.forName("com.mysql.jdbc.Driver")

      val conn =DriverManager.getConnection(mySQLUrl)

      val stat1 =conn.createStatement()

      stat1.execute("UPDATE CI_LABEL_INFO set DATA_STATUS_ID = 2 , DATA_DATE ='" + dataDate +"' where LABEL_ID in ("+allCreatedLabels.mkString(",")+")")

      stat1.close()

      //加載外部數據源數據到內存

      valDIM_COC_INDEX_MODEL_TABLE_CONF =sqlContext.jdbc(mySQLUrl,"DIM_COC_INDEX_MODEL_TABLE_CONF").cache()

      val targets =DIM_COC_INDEX_MODEL_TABLE_CONF.filter("TABLE_DATA_CYCLE ="+TABLE_DATA_CYCLE).collect

  SparkSQL解析

  

  首先說下傳統數據庫的解析,傳統數據庫的解析過程是按Rusult、Data Source、Operation的次序來解析的。傳統數據庫先將讀入的SQL語句進行解析,分辨出SQL語句中哪些詞是關鍵字(如select,from,where),哪些是表達式,哪些是Projection,哪些是Data Source等等。進一步判斷SQL語句是否規范,不規范就報錯,規范則按照下一步過程綁定(Bind)。過程綁定是將SQL語句和數據庫的數據字典(列,表,視圖等)進行綁定,如果相關的Projection、Data Source等都存在,就表示這個SQL語句是可以執行的。在執行過程中,有時候甚至不需要讀取物理表就可以返回結果,比如重新運行剛運行過的SQL語句,直接從數據庫的緩沖池中獲取返回結果。在數據庫解析的過程中SQL語句時,將會把SQL語句轉化成一個樹形結構來進行處理,會形成一個或含有多個節點(TreeNode)的Tree,然后再后續的處理政對該Tree進行一系列的操作。

  Spark SQL對SQL語句的處理和關系數據庫對SQL語句的解析采用了類似的方法,首先會將SQL語句進行解析,然后形成一個Tree,后續如綁定、優化等處理過程都是對Tree的操作,而操作方法是采用Rule,通過模式匹配,對不同類型的節點采用不同的操作。SparkSQL有兩個分支,sqlContext和hiveContext。sqlContext現在只支持SQL語法解析器(Catalyst),hiveContext支持SQL語法和HiveContext語法解析器。

責任編輯:張燕妮 來源: 數盟
相關推薦

2015-07-28 17:52:36

IOS知識體系

2017-06-22 13:07:21

2012-03-08 11:13:23

企業架構

2017-04-03 15:35:13

知識體系架構

2021-07-08 07:16:24

RocketMQ數據結構Message

2025-07-08 08:51:45

2021-07-14 17:18:14

RocketMQ消息分布式

2021-07-16 18:44:42

RocketMQ知識

2021-07-07 07:06:31

Brokerkafka架構

2021-07-07 15:29:52

存儲RocketMQ體系

2021-07-13 11:52:47

順序消息RocketMQkafka

2015-07-16 10:15:44

web前端知識體系

2020-03-09 10:31:58

vue前端開發

2011-08-18 17:20:43

梭子魚知識體系

2019-09-06 08:35:03

TCPIP算法

2021-07-08 05:52:34

Kafka架構主從架構

2020-09-09 09:15:58

Nginx體系進程

2020-10-26 08:34:18

知識體系普適性

2021-07-12 10:25:03

RocketMQ數據結構kafka

2017-08-30 17:30:43

大數據數據化運營
點贊
收藏

51CTO技術棧公眾號

国产精选一区二区| 性欧美长视频免费观看不卡| www.成人黄色| 国产黄色大片在线观看| 99国产欧美另类久久久精品| 国产99视频精品免视看7| 妖精视频在线观看免费| 日韩av综合| 日本久久一区二区| www.欧美黄色| 成年在线电影| 99视频精品全部免费在线| 国产精品美女视频网站| 中文字幕第28页| 999精品视频| 日韩精品中文字幕有码专区| 天天看片天天操| 天堂av在线网| 亚洲日本在线视频观看| 欧美激情www| 亚洲老妇色熟女老太| 免费观看日韩av| 韩国日本不卡在线| 青草影院在线观看| 欧美三级情趣内衣| 日韩精品在线免费观看| 亚洲区 欧美区| 国产成人毛片| 精品久久久久久亚洲国产300| 欧美 另类 交| a黄色在线观看| 91视视频在线观看入口直接观看www | 肉肉视频在线观看| 国产精品网站一区| 欧美日韩国产精品一卡| 欧美 日韩 国产 成人 在线| 激情丁香综合五月| 国产精品免费小视频| 99久久精品国产亚洲| 国内自拍一区| 欧美激情精品久久久久| 天海翼在线视频| 清纯唯美综合亚洲| 国产香蕉精品视频一区二区三区 | 欧美经典影片视频网站| 欧美日韩三级一区| 999精品视频在线| 欧美三区四区| 在线视频欧美区| 午夜免费精品视频| 日韩高清不卡| 欧美日韩久久久| 美女网站色免费| 欧美一级网址| 3751色影院一区二区三区| 成人午夜视频免费在线观看| 天堂√中文最新版在线| 一本色道久久综合狠狠躁的推荐| 日韩网址在线观看| 韩国成人动漫| 欧美吞精做爰啪啪高潮| 777视频在线| www.久久久.com| 日韩一级在线观看| 欧美xxxxx精品| 欧美午夜18电影| 亚洲男人天堂网站| 免费看黄色三级| 国产精品久久久久久久久妇女| 中文字幕不卡在线视频极品| 中文字幕91视频| 亚洲国产精品日韩专区av有中文 | 亚洲精品wwwww| 国产白嫩美女无套久久| 国产一区二区精品久| 中文字幕欧美精品在线| 精品国产精品国产精品| 狠狠综合久久| 日本sm极度另类视频| 性高潮视频在线观看| 久久91精品国产91久久小草| 91九色蝌蚪嫩草| 亚洲色图狠狠干| 国产精品区一区二区三区| 久久免费视频2| 福利成人导航| 在线观看日韩电影| 久久无码人妻一区二区三区| 久久综合五月婷婷| 中国人与牲禽动交精品| 久久久久久国产精品免费播放| 国产日韩1区| 国产精品一区二区三区毛片淫片| 国产av无码专区亚洲av| 91蜜桃免费观看视频| 色香蕉在线观看| av手机在线观看| 欧美日韩免费不卡视频一区二区三区| 潘金莲一级淫片aaaaa| 色狼人综合干| 久久夜色精品国产亚洲aⅴ| 日韩精品一区二区三| 美腿丝袜在线亚洲一区| 国产精品手机视频| 午夜视频在线观看网站| 午夜国产不卡在线观看视频| 免费涩涩18网站入口| 成人资源在线播放| 日韩中文字幕在线观看| 久久久午夜影院| 国产成人综合在线观看| 日本欧洲国产一区二区| 狂野欧美激情性xxxx欧美| 欧美日韩亚洲综合| 精品人妻一区二区三区香蕉| 欧美国产三区| 国产综合在线观看视频| 理论在线观看| 亚洲成a天堂v人片| 日本少妇一区二区三区| 日本欧美视频| 日韩av片电影专区| 婷婷色在线观看| 亚洲综合在线视频| 国产亚洲精品久久久久久打不开| 污污污污污污www网站免费| 性欧美ⅴideo另类hd| 欧美亚洲禁片免费| 天天插天天射天天干| 久久久五月天| 国产精品视频1区| 欧美69xxxxx| 香蕉乱码成人久久天堂爱免费| 午夜剧场高清版免费观看| 精品国产乱码久久久久久果冻传媒 | 亚洲人成网站精品片在线观看| 免费观看成人网| 全球av集中精品导航福利| 欧美精品生活片| 国产人妖一区二区| **网站欧美大片在线观看| 欧美日韩亚洲自拍| 红桃成人av在线播放| 日韩av免费在线播放| 欧美一区二区少妇| 疯狂欧美牲乱大交777| 精品国产一区在线| 激情欧美日韩| 国产欧美日韩一区二区三区| 国产淫片在线观看| 91麻豆精品国产自产在线 | 国产精品爽黄69| 韩国免费在线视频| 色婷婷综合久久久久中文一区二区| 亚洲av成人片色在线观看高潮| 好吊视频一区二区三区四区| 成人毛片网站| 999福利在线视频| 亚洲精品98久久久久久中文字幕| 久久狠狠高潮亚洲精品| 91在线视频官网| 日韩视频在线免费看| 成人aaaa| 亚洲综合中文字幕在线观看| 性欧美videoshd高清| 亚洲第一区中文99精品| 国产三级av片| 亚洲国产精品成人综合| 一区二区三区四区毛片| 欧美.www| 精品无人区一区二区三区 | 欧美综合一区二区三区| 国产成人精品视频免费| 国产乱码字幕精品高清av| 国产精品www在线观看| 日韩激情啪啪| 国产欧美日韩中文字幕在线| 成年人黄视频在线观看| 亚洲成人精品在线| 男操女视频网站| 亚洲欧美日韩综合aⅴ视频| 一级黄色电影片| 天堂在线一区二区| 中文字幕一区二区三区四区五区人 | 日韩精品乱码免费| 欧美日韩中文字幕在线播放 | 国产又爽又黄ai换脸| 北条麻妃一区二区三区在线| 日韩69视频在线观看| 国产剧情在线| 日韩精品在线影院| 国产又色又爽又黄又免费| 午夜精品影院在线观看| 少妇愉情理伦三级| 粉嫩欧美一区二区三区高清影视| 无码无遮挡又大又爽又黄的视频| 91精品二区| 欧美伦理一区二区| 亚洲综合色婷婷在线观看| 日韩av大片免费看| 日本高清在线观看视频| 在线观看国产精品日韩av| 女人18毛片水真多18精品| 欧美日本精品一区二区三区| 91久久国产视频| 亚洲天堂精品视频| 欧美成人午夜精品免费| 国产sm精品调教视频网站| 亚洲成人福利在线| 亚洲影音先锋| 97干在线视频| 欧美大片一区| 亚洲人成人77777线观看| 另类视频一区二区三区| 久久久在线观看| 欧洲不卡av| 亚洲女同精品视频| 亚洲老妇色熟女老太| 欧美日韩mp4| 国产无遮挡呻吟娇喘视频| 亚洲欧美韩国综合色| 欧美另类z0zx974| 97精品国产露脸对白| 中国男女全黄大片| 精品综合久久久久久8888| 成人免费xxxxx在线视频| 9久re热视频在线精品| av 日韩 人妻 黑人 综合 无码| 不卡视频在线| 日韩一区不卡| 精品精品99| 日本一区高清不卡| 岳的好大精品一区二区三区| 黄色99视频| 欧美久久久久久久久久久久| 日本不卡1234视频| 久久久www成人免费毛片麻豆 | 中文字幕在线视频网站| 久久久久久久久国产精品| 牛牛电影国产一区二区| 久国内精品在线| 男女羞羞视频在线观看| 欧美日本精品在线| 女人黄色免费在线观看| 欧美精品videos另类日本| 天天色天天射天天综合网| 久久婷婷国产麻豆91天堂| 免费在线午夜视频| 久久精品99久久久久久久久 | 中文字幕亚洲综合久久菠萝蜜| 欧美18—19性高清hd4k| 欧美韩国日本一区| 91麻豆制片厂| 中文字幕一区二区在线播放| 中文字幕人妻一区二| 一区二区三区四区不卡视频| 久久综合加勒比| 偷拍日韩校园综合在线| 成年免费在线观看| 色悠久久久久综合欧美99| 波多野结衣电影在线播放| 欧美四级电影网| 97人妻精品一区二区三区| 欧美一区二区三区在线视频| 亚洲精品综合网| 亚洲乱亚洲乱妇无码| 国产亚洲依依| 日韩亚洲欧美中文在线| 色图在线观看| 庆余年2免费日韩剧观看大牛| 午夜无码国产理论在线| 成人美女免费网站视频| 国产极品模特精品一二| 欧美日韩日本网| 国产韩国精品一区二区三区| 免费看日b视频| 亚洲免费婷婷| 成人黄色一级大片| 不卡一区在线观看| 黄免费在线观看| 亚洲美女淫视频| 亚洲免费黄色网址| 91精选在线观看| 亚洲欧美综合在线观看| www.午夜精品| 三级中文字幕在线观看| 国产在线观看一区二区三区| 国产一区二区三区亚洲| 亚洲a∨一区二区三区| 欧美另类视频| 欧美精品aaaa| 成人午夜碰碰视频| 国产在线免费av| 午夜在线电影亚洲一区| 中文字幕一区二区人妻| 亚洲国产精品久久久久秋霞不卡| jizz在线观看| 97在线视频精品| 亚洲色图图片| 茄子视频成人在线观看| 国内揄拍国内精品久久| 日本xxxx黄色| 久久婷婷久久一区二区三区| 农村黄色一级片| 欧美三区在线观看| 国产91免费在线观看| 中文字幕综合在线| 少妇在线看www| 成人免费视频观看视频| 久久国产影院| 男人天堂网视频| www.欧美.com| 久久久久久福利| 51精品秘密在线观看| 国产污视频在线| 2019中文字幕在线| 日韩影片在线观看| 在线观看成人av电影| 久久久久久久尹人综合网亚洲| jjzz黄色片| 亚洲精品国产高清久久伦理二区 | 日韩亚洲国产中文字幕欧美| 国产福利小视频在线观看| 欧美有码在线观看视频| 麻豆成人入口| 欧美精品久久久久久久自慰| 国产一区二区精品久久99| 欧美自拍偷拍网| 欧美性色欧美a在线播放| 九色视频在线观看免费播放| 992tv成人免费影院| 精品日产乱码久久久久久仙踪林| 国产精品啪啪啪视频| 国产一区二区三区精品欧美日韩一区二区三区| 免费看污片网站| 日韩欧美中文字幕在线观看| 天堂在线资源网| 久久免费国产视频| jazzjazz国产精品久久| 草草草视频在线观看| 东方aⅴ免费观看久久av| 欧美成人精品激情在线视频| 91精品国产91久久综合桃花 | 午夜精品www| 国产欧美啪啪| 国产精品va无码一区二区| 97久久精品人人爽人人爽蜜臀| 国产成人亚洲精品自产在线| 精品国产污污免费网站入口| 欧美人与禽猛交乱配| 99re在线播放| 在线观看日韩av电影| 久久一区二区电影| 色综合天天综合| 国产区av在线| 国产狼人综合免费视频| 欧美疯狂party性派对| 在线视频日韩欧美| 亚洲精品国产视频| 亚洲欧美色视频| 国产精品96久久久久久又黄又硬| 精品国产91| 亚洲一区二区三区四区精品 | 国产精品xxxxxx| 在线精品国产欧美| 国产精品免费精品自在线观看| 国产成人亚洲综合无码| 岛国精品在线播放| 国产精品一区二区三区四| 一区二区av在线| 亚洲成人a级片| 国产乱淫av片杨贵妃| 久久久精品黄色| 国产又大又粗又硬| 97精品国产97久久久久久春色| 女人av一区| 日韩av加勒比| 色综合天天性综合| 麻豆tv在线| 久久99蜜桃综合影院免费观看| 日日夜夜免费精品| 深夜福利影院在线观看| 日韩大片免费观看视频播放| 在线一区视频观看| 人妻av无码专区| 国产欧美日韩卡一| www天堂在线| 国产精品美乳一区二区免费| 欧美精品1区| 久久久久久久久福利| 精品日韩av一区二区| 快播电影网址老女人久久| 蜜臀av性久久久久蜜臀av| 久久久噜噜噜久噜久久综合| 国产日韩欧美一区二区东京热| 欧美性视频在线| 欧美日韩国产高清| 日本xxxxxxxxx18| 精品国产麻豆免费人成网站| 成人不卡视频|