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

Spark AQE SkewedJoin 在字節跳動的實踐和優化

精選
運維
本文將首先介紹 Spark AQE SkewedJoin 的基本原理以及字節跳動在使用 AQE SkewedJoin 的實踐中遇到的一些問題;其次介紹針對遇到的問題所做的相關優化和功能增強,以及相關優化在字節跳動的收益。

1. 概述

本文將首先介紹 Spark AQE SkewedJoin 的基本原理以及字節跳動在使用 AQE SkewedJoin 的實踐中遇到的一些問題;其次介紹針對遇到的問題所做的相關優化和功能增強,以及相關優化在字節跳動的收益;此外,我們還將分享 SkewedJoin 的使用經驗。

2. 背景

首先對 Spark AQE SkewedJoin 做一個簡單的介紹。Spark Adaptive Query Execution, 簡稱 Spark AQE,總體思想是動態優化和修改 stage 的物理執行計劃。利用執行結束的上游 stage 的統計信息(主要是數據量和記錄數),來優化下游 stage 的物理執行計劃。

圖片

Spark AQE 能夠在 stage 提交執行之前,根據上游 stage 的所有 MapTask 的統計信息,計算得到下游每個 ReduceTask 的 shuffle 輸入,因此 Spark AQE 能夠自動發現發生數據傾斜的 Join,并且做出優化處理,該功能就是 Spark AQE SkewedJoin。

圖片

例如 A 表 inner join B 表,并且 A 表中第 0 個 partition(A0)是一個傾斜的 partition,正常情況下,A0 會和 B 表的第 0 個 partition(B0)發生 join,由于此時 A0 傾斜,task 0 就會成為長尾 task。

SkewedJoin 在執行 A Join B 之前,通過上游 stage 的統計信息,發現 partition A0 明顯超過平均值的數倍,即判斷 A Join B 發生了數據傾斜,且傾斜分區為 partition A0。Spark AQE 會將 A0 的數據拆成 N 份,使用 N 個 task 去處理該 partition,每個 task 只讀取若干個 MapTask 的 shuffle 輸出文件,如下圖所示,A0-0 只會讀取 Stage0#MapTask0 中屬于 A0 的數據。這 N 個 Task 然后都讀取 B 表 partition 0 的數據做 join。這 N 個 task 執行的結果和 A 表的 A0 join B0 的結果是等價的。

圖片

不難看出,在這樣的處理中,B 表的 partition 0 會被讀取 N 次,雖然這增加了一定的額外成本,但是通過 N 個任務處理傾斜數據帶來的收益仍然大于這樣的成本。

Spark 從3.0 版本開始支持了 AQE SkewedJoin 功能,但是我們在實踐中發現了一些問題。

  • 不準確的統計數據可能導致 Spark 無法識別數據傾斜。
  • 切分不均勻導致優化處理效果不理想。
  • 不支持復雜場景例如同一個字段發生連續 join。

我將在【優化增強】中詳述這些問題以及我們的優化和解決方案。

3. 優化增強

3.1 提高數據傾斜的識別能力

由 Spark AQE 處理數據傾斜的原理不難發現,Spark AQE 識別傾斜以及切分數據傾斜的功能依賴于上游 Stage 的統計數據,統計數據越準確,傾斜的識別能力和處理能力就越高,直觀表現就是傾斜數據被拆分的非常平均,拆分后的數據大小幾乎和中位數一致,將長尾Task的影響降到最低。

MapStage 執行結束之后,每一個 MapTask 會生成統計結果 MapStatus,并將其發送給 Driver。MapStatus維護了一個 Array[Long],記錄了該 MapTask 中屬于下游每一個 ReduceTask 的數據大小。當 Driver 收集到了所有的 MapTask 的MapStatu之后,就能夠計算得到每一個 ReduceTask 的輸入數據量,以及分屬于每一個上游 MapTask 的數據大小。根據每一個 ReduceTask 的數據大小,Spark AQE 能夠判斷出數據傾斜,并根據上游 MapTask 的統計信息,合理切分 Reducetask,盡可能保證切分的均勻性。

圖片

如下圖描述,ReduceTask0 的 ShuffleRead(shuffle 過程中讀取的數據量) 為 200,明顯大于 ReduceTask1 和 ReduceTask2 的 100,發生了數據傾斜。我們可以將 ReduceTask0 拆成 2 份,ReduceTask0-0 讀取 MapTask0 和 MapTask1 的數據,ReduceTask0-1 讀取 MapTask2 和 MapTask3 的數據,拆分后的兩個 task 的 ShuffleRead 均為 100。

我們可以看出,統計信息的大小的空間復雜度是 O(M*R),對于大任務而言,會占據大量的 Driver 內存,所以 Spark 原生做了限制,對于 MapTask,當下游 ReduceTask 個數大于某一閾值(spark.shuffle.minNumPartitionsToHighlyCompress?,默認 2000),就會將MapStatus進行壓縮,所有小于 spark.shuffle.accurateBlockThreshold(默認100M)的值都會被一個平均值所代替填充。

舉個例子,下圖是我們遇到的一個 SkewedJoin 沒有生效的作業,從運行 metrics 來看,ShuffleRead 發生了很嚴重的傾斜,符合 SkewedJoin 生效的場景,但實際運行時并沒有生效。

圖片

通過閱讀日志,可以看到,Spark AQE 在運行時,獲取的 join 兩側的 shuffle partitions 的中位數和最大值都是一樣的,所以沒有識別到任何的傾斜。這就是由于壓縮后 MapStatus 的統計數據的不準確造成的。

圖片

我們在實踐中,遇到很多大作業由于統計數據不準確,無法識別傾斜。而當我們嘗試提高這一閾值之后,部分大作業由于 Driver 內存使用上漲而失敗,為了解決這一問題,我們做了以下優化:

  1. Driver 收到詳細的 MapStatus之后,先將數據用于更新每個 ReduceTask 的累計輸入數據,然后將 MapStatus壓縮,這樣就不會占用太多內存。此時,雖然壓縮后的 MapStatus無法讓我們獲得 ReduceTask 準確的上游分布,但是能夠獲得準確的 ReduceTask 的輸入數據總大小,這樣我們就能夠準確的識別發生傾斜的 ReduceTask。
  2. 上述優化增加了一次 MapStatus 的解壓操作,而 MapStatus 的解壓是一個比較耗CPU的操作,對于大作業可能出現 Driver CPU 被打滿,無法處理 Executor 心跳導致作業失敗的情況。對此,我們使用緩存保證Driver端在消費 MapStatus 時,每個 MapStatus 只會被解壓一次,大大降低了優化帶來的 Overhead。

通過上述優化,我們成功在線上將默認閾值從 2000 調整為 5000,保證了線上 96.6% 的 Spark 作業能夠準確的識別數據傾斜(如果存在)。

3.2 提高傾斜數據的切分均勻程度

由于 HighlyCompressMapStatus 用平均值填充所有低于 spark.shuffle.accurateBlockThreshold 的值,每個 ReduceTask 通過壓縮后的 MapStatus 累加計算得到的總數據大小和數據分布,就和實際差距很大。

舉個簡單的例子:我們得到 ReduceTask0 的實際總數據是 1G,而中位數是 100M,因此我們的期望是將 ReduceTask0 拆成 10 份,每一份是 100M。此時上游的 MapStage 一共有 100 個 MapTask,除了 MapTask0 中屬于 ReduceTask0 的數據是 100M,其他 99 個 MapStak 的數據都是 10M。當我們將所有的 MapStatus 壓縮之后,AQE 獲取的 ReduceTask0 的上游分布,就是 MapTask0 有 100M (因為大塊數據所以被保留),其他 99 個 MapTask 的數據都是 1M(在壓縮時使用平均值填充)。這時,Spark AQE 按照 100M 的期望值來切分,只會切分成兩個 ReduceTask:ReduceTask0-0(讀取MapTask0)和 ReduceTask0-1(讀取剩下99個MapTask)。

基于此,我們改進后的方法是利用精確的 ReduceTask 數據量來反推每個 MapperTask 對應的數據量,得到盡可能準確的數據分布。同樣是剛才的例子,我們已知 ReduceTask0 的實際總數據是 1G,MapStatus 壓縮的閾值是 100M,那么可以確定的是,MapTask0 關于 ReduceTask0 的數據 100M 是準確被保留的(因為大于等于閾值),而其他 99 個 MapTask 的數據都是不準確的。此時 AQE 就不會使用被壓縮的數據,而是通過 1G 的總數據反推得到其他 99 個 MapTask 中屬于 ReduceTask0 的數據是 10M,雖然同樣是存在誤差的平均值,但是相比壓縮數據,通過準確的總量反推得到的平均值會更加準確。這個時候 Spark 按照 100M 的期望值來切分,就會切成 10 個 ReduceTask,符合我們的預期。

而在實際應用中,利用新方案,AQE SkewedJoin 切分傾斜數據更加平均,優化效果有明顯的提升。

下圖是某個傾斜處理效果不理想的作業,SkewedJoin 生效后,該 Stage ShuffleReadSize 的中位數和最大值分別為 4M 和 9.9G。

圖片

經過我們的優化后,該 Stage 的 ShuffleReadSize 的中位數和最大值分別為 149M 和 1427M,傾斜分區的切分更加均勻,該 Stage 的運行時間也由原來的 2h 降為 20m。

圖片

3.3 支持更多的場景

場景1:JoinWithAggOrWin

以下圖為例,Stage10 雖然只有一個 SortMergeJoin,但是 join 的一邊并不是 Sort+Exchange 的組合,而是存在 Aggregate 算子或者 Window 算子,因此不屬于社區實現的范圍內。

圖片

場景2:MultipleSkewedJoin

在用戶的業務邏輯中,經常出現這樣一種場景:一張表的主鍵需要連續的 join 多張表,這種場景體現在 Spark 的具體執行上,就是連續的 join 存在于同一個 Stage 當中。如下圖所示 Stage21 中存在連續的多個 SortMergeJoin,而這種場景也是社區的實現無法優化的。

圖片

場景3:JoinWithUnion

Stage 中有 Union 算子,且 Union 的 children 中有 SMJ。

圖片

此外,我們還支持了 ShuffleHashJoin、 BucketJoin、MultipleJoinWithAggOrWin 等更多場景。

4. 字節的實踐

上面介紹的 LAS 對 Spark AQE SkewedJoin 的優化功能在字節跳動內部已使用 1 年左右,截止 2022年8月,優化日均覆蓋1.8萬+ Spark 作業,優化命中作業平均性能提升 35% 左右,其中 30% 被優化的 Spark 作業所屬于的場景是 LAS 自研支持的,大家可以通過火山引擎開通 LAS 服務并體驗這些優化功能。

5. 用戶指南

5.1 哪些場景 AQE SkewedJoin 不支持

AQE SkewedJoin 功能并不能處理所有發生數據傾斜的 Join,這是由它的實現邏輯所決定的。

第一,如果傾斜的分區的大部分數據來自于上游的同一個 Mapper,AQE SkewedJoin 無法處理,原因是 Spark 不支持 Reduce Task 只讀取上游 Mapper 的一個 block 的部分數據。

第二,如果 Join 的發生傾斜的一側存在 Agg 或者 Window 這類有指定 requiredChildDistribution 的算子,那么 SkewedJoin 優化無法處理,因為將分區切分會破壞 RDD 的 outputPartitioning,導致不再滿足 requiredChildDistribution。

第三,對于 Outer/Semi Join,AQE SkewedJoin 是無法處理非 Outer/Semi 側的數據傾斜。比如,對于 LeftOuter Join,SkewedJoin 無法處理右側的數據傾斜。

第四,AQE 無法處理傾斜的 BroadcastHashJoin。

5.2 AQE SkewedJoin 優化效果不明顯時的措施

如果遇到了符合應用場景但是 SkewedJoin 沒有生效或者傾斜處理效果不理想的情況,有以下調優手段:

  • 提高spark.shuffle.minNumPartitionsToHighlyCompress,保證值大于等于 shuffle 并發(當開啟 AQE 時,即為spark.sql.adaptive.coalescePartitions.initialPartitionNum)。
  • 調小spark.shuffle.accurateBlockThreshold,比如 4M。但是需要注意的是,這會增加 Driver 的內存消耗,需要同步增加 Driver 的 cpu 和內存。
  • 降低spark.sql.adaptive.skewJoin.skewedPartitionFactor,降低定義發生傾斜的閾值。

6. 總結

本文首先簡單介紹了 Spark AQE 的基本思想以及 SkewedJoin 功能的原理,接著提出了我們在應用 SkewedJoin的過程中遇到的一些問題。針對這些問題,我們介紹了對 AQE SkewedJoin 做的優化和增強——提高統計的準確度;提高傾斜數據的切分均勻程度;支持了更多的場景。接著,本文介紹了 AQE SkewedJoin 在字節跳動的使用情況,包括日均優化覆蓋作業和優化效果,其中30%被優化的 Spark 作業所屬于的場景是字節自研支持的。最后分享了我們關于 AQE SkewedJoin 的用戶指南:哪些場景 AQE SkewedJoin 不支持;當 AQE SkewedJoin 效果不明顯時,可以采取哪些措施。

7. 附錄A :本文涉及的關于 AQE SkewedJoin 優化的相關參數配置

參數配置名

默認值

參數意義

spark.shuffle.minNumPartitionsToHighlyCompress

2000

決定 Mapstatus 使用 HighlyCompressedMapStatus還是 CompressedMapStatus 的閾值,如果 huffle partition 大于該值,則使用 HighlyCompressedMapStatus。

spark.shuffle.accurateBlockThreshold

100M

HighlyCompressedMapStatus 中記錄 shuffle blcok 準確大小的閾值,當 block 小于該值則用平均值代替。

spark.sql.adaptive.skewJoin.skewedPartitionFactor

10

如果一個 partition 大于該因子乘以分區大小的中位數,那么它就是傾斜的 partition。

責任編輯:未麗燕 來源: 字節跳動技術團隊
相關推薦

2022-07-12 16:54:54

字節跳動Flink狀態查詢

2022-05-23 13:30:48

數據胡實踐

2024-11-01 17:00:03

2022-04-07 16:35:59

PGO 優化profile 數據編譯優化

2024-08-22 14:53:24

PromptAI大模型

2024-09-25 15:57:56

2022-08-21 21:28:32

數據庫實踐

2023-11-20 07:27:00

云原生Spark

2024-01-03 16:29:01

Agent性能優化

2024-04-23 10:16:29

云原生

2023-01-10 09:08:53

埋點數據數據處理

2022-12-23 08:58:35

字節跳動YARN架構

2022-07-18 16:02:10

數據庫實踐

2022-06-22 06:49:39

Hertz開源HTTP 框架

2022-11-24 08:50:07

數據中臺Data Catal

2021-09-06 11:15:05

數據治理字節跳動埋點

2025-01-22 14:00:12

2023-06-09 14:14:45

大數據容器化

2022-09-05 17:26:27

技術
點贊
收藏

51CTO技術棧公眾號

欧美r级电影在线观看| 一区二区三区在线影院| 国产精品女主播视频| 国产免费美女视频| 国产一级成人av| 91国产免费看| 日韩最新中文字幕| 天堂av电影在线观看| 日本在线播放一二三区| 久久久国产午夜精品| 国产美女精品免费电影| 国产精品99精品| 成人在线视频免费观看| 欧美va亚洲va在线观看蝴蝶网| 欧美牲交a欧美牲交aⅴ免费下载| 日本视频在线播放| 99久久久精品免费观看国产蜜| 国产精品久久久久久久久久| 免费在线观看黄视频| 国产亚洲一区| 欧美精品一区二区久久久| 91香蕉视频污版| 波多野结衣在线观看| 国产精品人人做人人爽人人添| 国产伦精品一区二区三区免费视频 | 日本丰满少妇黄大片在线观看| 五月天婷婷激情网| 国产精品一区二区x88av| 国产精品久久久久久久天堂| 国产香蕉视频在线| 亚洲五月婷婷| 欧美成人三级视频网站| 国产又粗又长又黄的视频| 午夜精品福利影院| 亚洲成色777777在线观看影院| 国产性生活一级片| 久久人体av| 在线免费观看日本一区| 久久久免费视频网站| a级片免费在线观看| 亚洲激情图片一区| 黄色一级视频播放| 麻豆传媒视频在线观看| 国产精品久久午夜夜伦鲁鲁| 日韩午夜视频在线观看| 涩爱av在线播放一区二区| 成人av网址在线观看| 99在线观看视频网站| 国产欧美一级片| 国产一区二区三区视频在线播放| 国产精品自产拍在线观看| 美日韩一二三区| 国产精品外国| 日本乱人伦a精品| 日批视频免费在线观看| 天堂在线一区二区| 国产精品视频区1| 一级片在线免费观看视频| 麻豆免费精品视频| 国产综合香蕉五月婷在线| 国产又粗又猛又爽又黄视频| 极品少妇一区二区| 91亚洲一区精品| 国产福利第一视频| 成人性色生活片免费看爆迷你毛片| 91免费版黄色| 天堂在线视频免费观看| 99视频一区二区| 色爱区成人综合网| 日本三级视频在线播放| 亚洲精品免费在线观看| 日本福利视频一区| 色豆豆成人网| 欧美高清dvd| 国产a级片视频| 小说区图片区色综合区| 中文字幕国产亚洲| 国产av 一区二区三区| 影音先锋亚洲一区| 国产成人一区二区三区电影| 在线观看中文字幕网站| 国产乱一区二区| 免费av在线一区二区| 日本天堂在线观看| 亚洲成人高清在线| 天天天干夜夜夜操| 日韩欧美中文在线观看| 亚洲精品福利资源站| 五月天精品视频| 亚洲mv大片欧洲mv大片| 7m精品福利视频导航| 国产一级精品毛片| 成人免费高清视频| 亚洲mv在线看| av中文字幕在线观看第一页 | 国产精品视频免费看| 2021国产视频| 亚洲日本网址| 亚洲第一福利视频| 小泽玛利亚一区| 久久国产精品99国产| 91人成网站www| 美丽的姑娘在线观看免费动漫| 亚洲色图19p| 国产一区亚洲二区三区| 亚洲精品一区国产| 中文字幕欧美日韩| 国产又爽又黄的视频| 黄色资源网久久资源365| 久久五月天婷婷| 亚洲91av| 在线不卡一区二区| 大又大又粗又硬又爽少妇毛片| 88国产精品视频一区二区三区| 91精品国产91久久久久久久久 | 国模套图日韩精品一区二区| 91精品婷婷国产综合久久| 成人影视免费观看| 亚洲日本视频| 99精彩视频| 黄色免费在线观看网站| 色哟哟在线观看一区二区三区| 性一交一黄一片| 99视频精品全国免费| 国产不卡一区二区在线播放| 秋霞网一区二区| 亚洲精品成人天堂一二三| www.se五月| 不卡日本视频| 日韩美女毛茸茸| 四虎影院在线播放| 激情成人在线视频| 国产大尺度视频| 欧美日韩一区二区三区四区在线观看| 国产欧美一区二区三区在线| 福利成人在线观看| 色久优优欧美色久优优| 亚洲av网址在线| 99国产成+人+综合+亚洲欧美| 成人91免费视频| 亚洲小说区图片| 日韩久久久精品| 放荡的美妇在线播放| 国内精品久久久久影院色| 一本一本a久久| 成年永久一区二区三区免费视频| 中文字幕亚洲情99在线| 在线视频播放大全| 国产精品乱码久久久久久| 九色porny自拍| 国产精品99在线观看| 91久久久久久久久久| 毛片免费不卡| 日韩一区二区在线观看| 欧美色图亚洲天堂| 成人午夜激情影院| 国产91美女视频| 国产精品一区高清| 国产精品免费福利| 黄色av网站在线播放| 欧美一区二区成人| 国产网站在线看| 91香蕉视频黄| 日本www.色| 国产精品不卡| 国产一区二区黄色| 裤袜国产欧美精品一区| 中文字幕日本欧美| 99视频免费看| 欧美午夜精品在线| 日本黄色激情视频| 国产成人午夜片在线观看高清观看| 欧美无砖专区免费| 综合综合综合综合综合网| 国产精品丝袜白浆摸在线| 国产剧情在线| 亚洲精品国产免费| 中文在线最新版天堂| 亚洲欧美日韩国产综合| 国产毛片毛片毛片毛片毛片毛片| 天堂久久久久va久久久久| 亚洲午夜精品一区二区| 538任你躁精品视频网免费| 96精品视频在线| 麻豆视频网站在线观看| 亚洲精品二三区| 国产精品国产av| 精品毛片网大全| 肉色超薄丝袜脚交69xx图片| 成人黄色综合网站| 中文字幕有码av| 99av国产精品欲麻豆| 在线亚洲美日韩| 综合国产视频| 成人动漫在线观看视频| 亚洲日本在线观看视频| 午夜精品一区二区三区在线 | 国产精品美日韩| 99re久久精品国产| 国产一区二区三区久久悠悠色av| 亚洲熟妇无码另类久久久| 欧美电影免费| 欧美另类一区| 波多野结衣欧美| 国产在线观看精品| 成人欧美大片| 久久久欧美一区二区| 欧美精品电影| 亚洲色图第一页| 日本激情一区二区三区| 欧美伦理视频网站| 波多野结衣黄色| 午夜精品久久久久| 欧美黑人猛猛猛| 国产精品色一区二区三区| 亚洲精品在线视频免费观看| 国产乱码精品一区二区三区忘忧草 | 日韩欧美激情在线| 在线播放成人av| 色婷婷精品大在线视频| 精品久久免费视频| 亚洲综合视频在线| 日本一级二级视频| 亚洲欧美综合网| 国产免费嫩草影院| 欧美激情一区二区三区全黄| 日本少妇色视频| 不卡电影一区二区三区| 91porn在线| 国产精品18久久久| 在线播放黄色av| 国产在线一区二区| 8x8x成人免费视频| 久久草av在线| 亚洲久久中文字幕| 久久国产日韩欧美精品| 日本久久久久久久久久久久| 日韩综合在线视频| 日韩在线第三页| 日本不卡高清视频| 久久撸在线视频| 美女mm1313爽爽久久久蜜臀| 亚洲免费av一区二区三区| 三级欧美韩日大片在线看| 国语对白做受xxxxx在线中国| 99国产精品久久久久久久| 精品国产一区三区| a91a精品视频在线观看| 两根大肉大捧一进一出好爽视频| 亚洲美女黄色| 精品国产免费av| 久久青草久久| 亚洲欧美激情网| 久久国产精品露脸对白| 一区二区三区四区毛片| 国产精品一区在线| 中文字幕在线播放视频| 久久影视一区二区| 亚洲一级片在线播放| 国产精品麻豆视频| 麻豆精品一区二区三区视频| 一区二区三区波多野结衣在线观看| 精国产品一区二区三区a片| 午夜不卡在线视频| 瑟瑟视频在线免费观看| 欧美一区二区三区色| 亚洲国产av一区二区| 欧美精品一区二区三区蜜桃| 免费一级毛片在线观看| 日日狠狠久久偷偷四色综合免费| 高清免费电影在线观看| 国模精品一区二区三区色天香| 欧美日韩国产v| 91久久精品日日躁夜夜躁国产| 亚洲一区二区电影| 欧美精品一区三区在线观看| 色综合久久网| 激情五月婷婷六月| 日本sm残虐另类| 稀缺呦国内精品呦| 中文字幕第一区综合| 亚洲成人生活片| 色网站国产精品| 国产精品美女一区| 亚洲女人被黑人巨大进入al| 美女隐私在线观看| 人人做人人澡人人爽欧美| 婷婷激情成人| 九9re精品视频在线观看re6| 色喇叭免费久久综合网| 亚洲 自拍 另类小说综合图区| 久久午夜精品| 亚洲区 欧美区| 国产网红主播福利一区二区| 日韩激情小视频| 欧美天堂在线观看| 国内精品久久久久久久久久 | 男人的天堂官网| 亚洲综合久久av| 中文字幕在线一| 亚洲精品美女在线观看| 哥也色在线视频| 国产精品劲爆视频| 美女午夜精品| 国产免费xxx| 美女爽到高潮91| 五级黄高潮片90分钟视频| 亚洲激情五月婷婷| 一区二区三区午夜| 亚洲乱码国产乱码精品精天堂| 午夜激情在线| 成人久久18免费网站图片| 国产一区二区三区网| 国产日韩欧美精品在线观看| 国内精品伊人久久久久影院对白| 久久精品国产亚洲av久| 亚洲国产成人av网| 国产chinasex对白videos麻豆| 一区二区三区精品99久久 | 五月香视频在线观看| 欧美一级成年大片在线观看 | 精品视频www| 91九色美女在线视频| 91在线在线观看| 亚洲影视一区| www.午夜av| 亚洲欧美怡红院| 亚洲视频一区在线播放| 亚洲色图国产精品| 欧美成人h版| 欧美日韩在线观看一区| 亚洲在线成人| 欧美熟妇精品黑人巨大一二三区| 亚洲成人av福利| 黄色片一区二区| 欧美激情在线狂野欧美精品| 日本免费精品| www婷婷av久久久影片| 国产一区欧美二区| 中文字幕av播放| 欧美一卡二卡三卡四卡| 成人三级网址| 97av自拍| 在线播放日韩| 黄色片视频免费观看| 五月天欧美精品| 青青草在线播放| 国产精品777| 日韩一区欧美| 中文字幕第一页在线视频| 亚洲色图一区二区三区| www.日韩在线观看| 国产综合在线视频| 亚洲精品进入| 在线观看免费成人av| 国产精品欧美经典| 国产福利第一视频| 97精品视频在线观看| 亚洲免费成人av在线| 看欧美ab黄色大片视频免费| 国产精品水嫩水嫩| 国产精品嫩草影院精东| 欧美激情一区二区三区高清视频| 国产亚洲成av人片在线观黄桃| 国产91在线视频观看| 欧美韩日一区二区三区| 国产美女无遮挡永久免费| 欧美激情一级精品国产| 色综合久久中文| 欧美三级理论片| 一区二区在线观看视频在线观看| 欧美视频在线观看一区二区三区| 国产91|九色| 99热在线成人| 亚洲精品女人久久久| 欧美手机在线视频| 污污影院在线观看| 欧美一级二级三级| 国产美女在线精品| 国产欧美一区二区三区在线看蜜臂| 一个色综合导航| 亚洲精品视频一二三区| 十八禁视频网站在线观看| 国产精品情趣视频| 三级网站在线看| 国产剧情久久久久久| 伊人久久亚洲影院| 午夜影院黄色片| 精品黑人一区二区三区久久| 另类中文字幕国产精品| 毛片av在线播放| 国产丝袜欧美中文另类| www.桃色av嫩草.com| 国产精品黄视频| 亚洲电影成人| 日韩免费av一区| 日韩黄色av网站| 麻豆国产精品| 浓精h攵女乱爱av| 欧美日韩久久久久|