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

一篇文章了解 Spark Shuffle 內存使用

存儲 存儲軟件 Spark
在使用 Spark 進行計算時,我們經常會碰到作業 (Job) Out Of Memory(OOM) 的情況,而且很大一部分情況是發生在 Shuffle 階段。那么在 Spark Shuffle 中具體是哪些地方會使用比較多的內存而有可能導致 OOM 呢?

 在使用 Spark 進行計算時,我們經常會碰到作業 (Job) Out Of Memory(OOM) 的情況,而且很大一部分情況是發生在 Shuffle 階段。那么在 Spark Shuffle 中具體是哪些地方會使用比較多的內存而有可能導致 OOM 呢? 為此,本文將圍繞以上問題梳理 Spark 內存管理和 Shuffle 過程中與內存使用相關的知識;然后,簡要分析下在 Spark Shuffle 中有可能導致 OOM 的原因。

[[267454]]

一、Spark 內存管理和消費模型

在分析 Spark Shuffle 內存使用之前。我們首先了解下以下問題:當一個 Spark 子任務 (Task) 被分配到 Executor 上運行時,Spark 管理內存以及消費內存的大體模型是什么樣呢?(注:由于 OOM 主要發生在 Executor 端,所以接下來的討論主要針對 Executor 端的內存管理和使用)。

1,在 Spark 中,使用抽象類 MemoryConsumer 來表示需要使用內存的消費者。在這個類中定義了分配,釋放以及 Spill 內存數據到磁盤的一些方法或者接口。具體的消費者可以繼承 MemoryConsumer 從而實現具體的行為。 因此,在 Spark Task 執行過程中,會有各種類型不同,數量不一的具體消費者。如在 Spark Shuffle 中使用的 ExternalAppendOnlyMap, ExternalSorter 等等(具體后面會分析)。

2,MemoryConsumer 會將申請,釋放相關內存的工作交由 TaskMemoryManager 來執行。當一個 Spark Task 被分配到 Executor 上運行時,會創建一個 TaskMemoryManager。在 TaskMemoryManager 執行分配內存之前,需要首先向 MemoryManager 進行申請,然后由 TaskMemoryManager 借助 MemoryAllocator 執行實際的內存分配。

3,Executor 中的 MemoryManager 會統一管理內存的使用。由于每個 TaskMemoryManager 在執行實際的內存分配之前,會首先向 MemoryManager 提出申請。因此 MemoryManager 會對當前進程使用內存的情況有著全局的了解。

MemoryManager,TaskMemoryManager 和 MemoryConsumer 之前的對應關系,如下圖。總體上,一個 MemoryManager 對應著至少一個 TaskMemoryManager (具體由 executor-core 參數指定),而一個 TaskMemoryManager 對應著多個 MemoryConsumer (具體由任務而定)。

一篇文章了解 Spark Shuffle 內存使用

了解了以上內存消費的整體過程以后,有兩個問題需要注意下:

1,當有多個 Task 同時在 Executor 上執行時, 將會有多個 TaskMemoryManager 共享 MemoryManager 管理的內存。那么 MemoryManager 是怎么分配的呢?答案是每個任務可以分配到的內存范圍是 [1 / (2 * n), 1 / n],其中 n 是正在運行的 Task 個數。因此,多個并發運行的 Task 會使得每個 Task 可以獲得的內存變小。

2,前面提到,在 MemoryConsumer 中有 Spill 方法,當 MemoryConsumer 申請不到足夠的內存時,可以 Spill 當前內存到磁盤,從而避免無節制的使用內存。但是,對于堆內內存的申請和釋放實際是由 JVM 來管理的。因此,在統計堆內內存具體使用量時,考慮性能等各方面原因,Spark 目前采用的是抽樣統計的方式來計算 MemoryConsumer 已經使用的內存,從而造成堆內內存的實際使用量不是特別準確。從而有可能因為不能及時 Spill 而導致 OOM。

二、Spark Shuffle 過程

整體上 Spark Shuffle 具體過程如下圖,主要分為兩個階段:Shuffle Write 和 Shuffle Read。

Write 階段大體經歷排序(***要求是需要按照分區進行排序),可能的聚合 (combine) 和歸并(有多個文件 spill 磁盤的情況 ),最終每個寫 Task 會產生數據和索引兩個文件。其中,數據文件會按照分區進行存儲,即相同分區的數據在文件中是連續的,而索引文件記錄了每個分區在文件中的起始和結束位置。

而對于 Shuffle Read, 首先可能需要通過網絡從各個 Write 任務節點獲取給定分區的數據,即數據文件中某一段連續的區域,然后經過排序,歸并等過程,最終形成計算結果。

一篇文章了解 Spark Shuffle 內存使用

對于 Shuffle Write,Spark 當前有三種實現,具體分別為 BypassMergeSortShuffleWriter, UnsafeShuffleWriter 和 SortShuffleWriter (具體使用哪一個實現有一個判斷條件,此處不表)。而 Shuffle Read 只有一種實現。

2.1 Shuffle Write 階段分析

2.1.1 BypassMergeSortShuffleWriter 分析

對于 BypassMergeSortShuffleWriter 的實現,大體實現過程是首先為每個分區創建一個臨時分區文件,數據寫入對應的分區文件,最終所有的分區文件合并成一個數據文件,并且產生一個索引文件。由于這個過程不做排序,combine(如果需要 combine 不會使用這個實現)等操作,因此對于 BypassMergeSortShuffleWriter,總體來說是不怎么耗費內存的。

2.1.2 SortShuffleWriter 分析

SortShuffleWriter 是最一般的實現,也是日常使用最頻繁的。SortShuffleWriter 主要委托 ExternalSorter 做數據插入,排序,歸并 (Merge),聚合 (Combine) 以及最終寫數據和索引文件的工作。ExternalSorter 實現了之前提到的 MemoryConsumer 接口。下面分析一下各個過程使用內存的情況:

1,對于數據寫入,根據是否需要做 Combine,數據會被插入到 PartitionedAppendOnlyMap 這個 Map 或者 PartitionedPairBuffer 這個數組中。每隔一段時間,當向 MemoryManager 申請不到足夠的內存時,或者數據量超過 spark.shuffle.spill.numElementsForceSpillThreshold 這個閾值時 (默認是 Long 的***值,不起作用),就會進行 Spill 內存數據到文件。假設可以源源不斷的申請到內存,那么 Write 階段的所有數據將一直保存在內存中,由此可見,PartitionedAppendOnlyMap 或者 PartitionedPairBuffer 是比較吃內存的。

2,無論是 PartitionedAppendOnlyMap 還是 PartitionedPairBuffer, 使用的排序算法是 TimSort。在使用該算法是正常情況下使用的臨時額外空間是很小,但是最壞情況下是 n / 2,其中 n 表示待排序的數組長度(具體見 TimSort 實現)。

3,當插入數據因為申請不到足夠的內存將會 Spill 數據到磁盤,在將最終排序結果寫入到數據文件之前,需要將內存中的 PartitionedAppendOnlyMap 或者 PartitionedPairBuffer 和已經 spill 到磁盤的 SpillFiles 進行合并。Merge 的大體過程如下圖。

 

一篇文章了解 Spark Shuffle 內存使用

從上圖可見,大體差不多就是歸并排序的過程,由此可見這個過程是沒有太多額外的內存消耗。歸并過程中的聚合計算大體也是差不多的過程,唯一需要注意的是鍵值碰撞的情況,即當前輸入的各個有序隊列的鍵值的哈希值相同,但是實際的鍵值不等的情況。這種情況下,需要額外的空間保存所有鍵值不同,但哈希值相同值的中間結果。但是總體上來說,發生這種情況的概率并不是特別大。

4,寫數據文件的過程涉及到不同數據流之間的轉化,而在流的寫入過程中,一般都有緩存,主要由參數 spark.shuffle.file.buffer 和 spark.shuffle.spill.batchSize 控制,總體上這部分開銷也不大。

以上分析了 SortShuffleWriter write 階段的主要過程,從中可以看出主要的內存消耗在寫入 PartitionedAppendOnlyMap 或者 PartitionedPairBuffer 這個階段。

2.1.3 UnsafeShuffleWriter

UnsafeShuffleWriter 是對 SortShuffleWriter 的優化,大體上也和 SortShuffleWriter 差不多,在此不再贅述。從內存使用角度看,主要差異在以下兩點:

一方面,在 SortShuffleWriter 的 PartitionedAppendOnlyMap 或者 PartitionedPairBuffer 中,存儲的是鍵值或者值的具體類型,也就是 Java 對象,是反序列化過后的數據。而在 UnsafeShuffleWriter 的 ShuffleExternalSorter 中數據是序列化以后存儲到實際的 Page 中,而且在寫入數據過程中會額外寫入長度信息。總體而言,序列化以后數據大小是遠遠小于序列化之前的數據。

另一方面,UnsafeShuffleWriter 中需要額外的存儲記錄(LongArray),它保存著分區信息和實際指向序列化后數據的指針(經過編碼的Page num 以及 Offset)。相對于 SortShuffleWriter, UnsafeShuffleWriter 中這部分存儲的開銷是額外的。

2.2 Shuffle Read 階段分析

Spark Shuffle Read 主要經歷從獲取數據,序列化流,添加指標統計,可能的聚合 (Aggregation) 計算以及排序等過程。大體流程如下圖。

 

一篇文章了解 Spark Shuffle 內存使用

以上計算主要都是迭代進行。在以上步驟中,比較復雜的操作是從遠程獲取數據,聚合和排序操作。接下來,依次分析這三個步驟內存的使用情況。

1,數據獲取分為遠程獲取和本地獲取。本地獲取將直接從本地的 BlockManager 取數據, 而對于遠程數據,需要走網絡。在遠程獲取過程中,有相關參數可以控制從遠程并發獲取數據的大小,正在獲取數據的請求數,以及單次數據塊請求是否放到內存等參數。具體參數包括 spark.reducer.maxSizeInFlight (默認 48M),spark.reducer.maxReqsInFlight, spark.reducer.maxBlocksInFlightPerAddress 和 spark.maxRemoteBlockSizeFetchToMem。

考慮到數據傾斜的場景,如果 Map 階段有一個 Block 數據特別的大,默認情況由于 spark.maxRemoteBlockSizeFetchToMem 沒有做限制,所以在這個階段需要將需要獲取的整個 Block 數據放到 Reduce 端的內存中,這個時候是非常的耗內存的。可以設置 spark.maxRemoteBlockSizeFetchToMem 值,如果超過該閾值,可以落盤,避免這種情況的 OOM。 另外,在獲取到數據以后,默認情況下會對獲取的數據進行校驗(參數 spark.shuffle.detectCorrupt 控制),這個過程也增加了一定的內存消耗。

2,對于需要聚合和排序的情況,這個過程是借助 ExternalAppendOnlyMap 來實現的。整個插入,Spill 以及 Merge 的過程和 Write 階段差不多。總體上,這塊也是比較消耗內存的,但是因為有 Spill 操作,當內存不足時,可以將內存數據刷到磁盤,從而釋放內存空間。

三、Spark Shuffle OOM 可能性分析

圍繞內存使用,前面比較詳細的分析了 Spark 內存管理以及在 Shuffle 過程可能使用較多內存的地方。接下來總結的要點如下:

1,首先需要注意 Executor 端的任務并發度,多個同時運行的 Task 會共享 Executor 端的內存,使得單個 Task 可使用的內存減少。

2,無論是在 Map 還是在 Reduce 端,插入數據到內存,排序,歸并都是比較都是比較占用內存的。因為有 Spill,理論上不會因為數據傾斜造成 OOM。 但是,由于對堆內對象的分配和釋放是由 JVM 管理的,而 Spark 是通過采樣獲取已經使用的內存情況,有可能因為采樣不準確而不能及時 Spill,導致OOM。

3,在 Reduce 獲取數據時,由于數據傾斜,有可能造成單個 Block 的數據非常的大,默認情況下是需要有足夠的內存來保存單個 Block 的數據。因此,此時極有可能因為數據傾斜造成 OOM。 可以設置 spark.maxRemoteBlockSizeFetchToMem 參數,設置這個參數以后,超過一定的閾值,會自動將數據 Spill 到磁盤,此時便可以避免因為數據傾斜造成 OOM 的情況。在我們的生產環境中也驗證了這點,在設置這個參數到合理的閾值后,生產環境任務 OOM 的情況大大減少了。

4,在 Reduce 獲取數據后,默認情況會對數據流進行解壓校驗(參數 spark.shuffle.detectCorrupt)。正如在代碼注釋中提到,由于這部分沒有 Spill 到磁盤操作,也有很大的可性能會導致 OOM。在我們的生產環境中也有碰到因為檢驗導致 OOM 的情況。

四、小結

本文主要圍繞內存使用這個點,對 Spark shuffle 的過程做了一個比較詳細的梳理,并且分析了可能造成 OOM 的一些情況以及我們在生產環境碰到的一些問題。本文主要基于作者對 Spark 源碼的理解以及實際生產過程中遇到 OOM 案例總結而成,限于經驗等各方面原因,難免有所疏漏或者有失偏頗。如有問題,歡迎聯系一起討論。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-07-26 15:01:42

SparkShuffle內存

2020-10-09 08:15:11

JsBridge

2025-02-14 09:53:50

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2021-08-12 14:19:14

Slice數組類型內存

2019-04-17 15:16:00

Sparkshuffle算法

2021-02-02 18:39:05

JavaScript

2021-01-29 18:41:16

JavaScript函數語法

2019-01-09 10:04:16

2020-11-10 10:48:10

JavaScript屬性對象

2021-06-04 09:56:01

JavaScript 前端switch

2023-05-08 08:21:15

JavaNIO編程

2023-07-28 07:14:13

2020-12-08 08:09:49

SVG圖標Web

2021-03-05 18:04:15

JavaScript循環代碼

2021-03-09 14:04:01

JavaScriptCookie數據

2021-09-27 09:18:30

ListIterato接口方法

2021-01-26 23:46:32

JavaScript數據結構前端

2023-07-30 15:18:54

JavaScript屬性
點贊
收藏

51CTO技術棧公眾號

69国产精品成人在线播放| 欧美日韩在线播放三区四区| 国产日韩一区二区| 一级黄色大片视频| 91麻豆国产自产在线观看亚洲| 亚洲国产中文在线| 激情文学综合插| 久久久久久有精品国产| 国产三级视频网站| 亚洲人成777| 精品国产成人av| 亚洲精品国产精品国自产观看| 国产日韩欧美一区二区东京热| 亚洲日韩成人| 丝袜亚洲另类欧美重口| 亚洲午夜久久久久久久久| 欧美成人精品三级网站| 一区二区三区日韩| 日韩电影大全在线观看| 亚洲精品18p| 日本最新不卡在线| 国内自拍欧美激情| 日韩av毛片在线观看| 日韩欧美国产大片| 欧美一级午夜免费电影| 青青青国产在线视频| 日本精品600av| 国产亚洲欧洲一区高清在线观看| av免费观看久久| 中文字幕视频免费观看| 国产欧美大片| 色综合五月天导航| 貂蝉被到爽流白浆在线观看| 日韩理论电影中文字幕| 日韩一卡二卡三卡| 一区二区三区免费播放| 亚洲涩涩在线| 亚洲不卡在线观看| 欧美美女黄色网| 香蕉视频免费在线播放| 久久综合久久综合亚洲| 国产视频99| 国产黄色美女视频| 国产专区欧美精品| 国产精品高清在线| 国产又大又黄又粗| 99热免费精品在线观看| 国产69精品久久久| 免费在线观看国产精品| 911久久香蕉国产线看观看| 中文字幕日韩精品有码视频| 亚洲码无人客一区二区三区| 亚洲盗摄视频| 日韩国产在线播放| 又黄又爽的网站| 国产图片一区| 亚洲国产欧美一区| 妖精视频一区二区| 国产伦精品一区二区三区免费优势 | 91视频8mav| 一本色道久久综合亚洲| 美女视频网站黄色亚洲| 国产精品视频99| 伊人网中文字幕| 久久精品国产99久久6| 国产精品视频yy9099| 欧美在线视频精品| 美腿丝袜亚洲三区| 成人久久久久久久| 国产精品亚洲lv粉色| 狠狠色狠狠色合久久伊人| 91精品视频在线看| 草逼视频免费看| 成人av资源站| 麻豆精品视频| 大片免费播放在线视频| 亚洲视频小说图片| 免费极品av一视觉盛宴| av老司机在线观看| 日韩欧美中文字幕在线播放| 国产成人精品视频ⅴa片软件竹菊| 欧美理论影院| 欧美人与性动xxxx| 26uuu国产| 欧美亚洲色图校园春色| 亚洲人在线观看| 国产成人免费在线观看视频| 一区二区三区在线| 欧美高清videos高潮hd| 国产精品777777| 日韩va亚洲va欧美va久久| 国产欧美韩国高清| 国产综合无码一区二区色蜜蜜| 99re热这里只有精品视频| 日本成人黄色| 黄色动漫在线观看| 婷婷中文字幕一区三区| 成人亚洲视频在线观看| 亚洲精品一区二区三区中文字幕 | 欧美精品久久久久a| 精品久久久无码人妻字幂| 爱搞国产精品| 欧美日韩在线不卡| 色哟哟无码精品一区二区三区| 一区二区三区日本久久久| 少妇精69xxtheporn| 久久综合亚洲色hezyo国产| 久久久久久夜| 97神马电影| caoporn国产精品免费视频| 一级日本不卡的影视| 久草在在线视频| 荡女精品导航| 少妇激情综合网| 国产成人精品网| 国产乱子伦视频一区二区三区| 欧美精品一区二区视频| 污污网站在线看| 欧美性色综合网| chinese麻豆新拍video| 亚洲啊v在线观看| 日韩av电影院| 亚洲欧美激情国产综合久久久| 欧美激情综合五月色丁香| 国产v片免费观看| 亚洲一区av| 国产亚洲精品美女| 欧美三级午夜理伦| 高清不卡一区二区在线| 制服丝袜综合日韩欧美| 日韩在线短视频| 日韩av网站导航| 国产1区2区3区4区| 久久爱www久久做| 欧美精品一区二区三区四区五区 | 5252色成人免费视频| 91免费看国产| 亚洲精品国产av| 成人免费在线视频观看| 91色国产在线| 亚洲另类春色校园小说| 午夜精品久久久久久久久久久久久| 国产一区二区三区三州| 国产精品欧美综合在线| 日韩肉感妇bbwbbwbbw| 九九热线有精品视频99| 欧美性受xxxx黑人猛交| 视频二区在线观看| 午夜精品福利在线| 丰满岳乱妇一区二区| 韩日精品视频| 国产精品久久久久久久久久直播 | 免费a级片在线观看| 亚洲免费观看高清完整版在线观看熊| 亚洲一区在线不卡| 日韩av免费大片| 国产精品永久在线| 91社区在线高清| 欧美日韩情趣电影| 国产免费一区二区三区四区| 久久国产免费看| 熟女视频一区二区三区| 亚洲色图欧美色| 99热这里只有精品首页| 欧美极品xxxx| 亚洲aⅴ在线观看| 疯狂欧美牲乱大交777| 在线观看国产网站| 久久三级福利| 性欧美.com| 国产一区二区三区视频在线| 欧美精品免费看| 少妇无码一区二区三区| 丁香五六月婷婷久久激情| 中文字幕丰满乱子伦无码专区| 久久久久91| 亚洲巨乳在线观看| 久久久久久爱| 91豆花精品一区| 你懂的在线免费观看| 欧美色综合久久| 国产波霸爆乳一区二区| av一区二区久久| 久草福利视频在线| 国产精品videosex性欧美| 91入口在线观看| 黑人巨大精品| 尤物99国产成人精品视频| 日本黄xxxxxxxxx100| 1769在线观看| 精品免费日韩av| 久操视频在线免费观看| 亚洲欧美一区二区久久| 在线免费观看a级片| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产成人免费高清视频| 免费毛片在线不卡| 91久久久亚洲精品| 绿色成人影院| 日韩在线视频网站| 黄色片一区二区三区| 日韩欧美成人免费视频| 国产探花在线免费观看| 99在线精品观看| 美女网站色免费| 天天做天天爱天天爽综合网| 蜜桃久久精品乱码一区二区| 日韩伦理一区二区| 97激碰免费视频| 免费在线黄色影片| 日韩午夜在线影院| 99精品视频99| 亚洲色图欧美偷拍| 黄色aaa视频| 国产伦精品一区二区三区免费| 欧美亚洲一二三区| 真实国产乱子伦精品一区二区三区| 免费看污久久久| 久久综合给合| 国产精品 欧美在线| 日本资源在线| 久久天天躁狠狠躁夜夜躁2014| 日韩一级片免费看| 欧美日韩成人一区二区| 婷婷激情五月网| 婷婷中文字幕综合| 日韩成人毛片视频| 成人高清在线| 久久久久久久久久久久国产| 久久精品网站免费观看| 中国老熟女重囗味hdxx| 久久国产精品毛片| 波多野结衣综合网| 综合国产在线| 翔田千里亚洲一二三区| 911精品国产| 成人国产精品av| 成人免费av电影| 欧美一级免费视频| 极品美鲍一区| 欧美国产视频一区二区| caopo在线| 精品视频久久久久久| 天天综合在线视频| 亚洲精品在线三区| 成 人片 黄 色 大 片| 欧美一区二区三区的| 中文字幕人妻色偷偷久久| 欧美日韩在线视频观看| 久久精品这里有| 亚洲成va人在线观看| 国产一级av毛片| 亚洲精选视频免费看| 草视频在线观看| 亚洲视频免费在线| 欧美一区观看| 四季久久免费一区二区三区四区| 亚洲一区视频在线观看视频| 黄色一级大片在线免费观看| 国产精品网曝门| 国产亚洲精品精品精品| 国产喂奶挤奶一区二区三区| 香蕉视频黄色在线观看| 国产欧美精品日韩区二区麻豆天美| 亚洲综合第一页| 久久精品a一级国产免视看成人| 亚洲黄色免费三级| av不卡中文字幕| 久久99九九99精品| 天天色综合社区| 国产一区三区三区| 亚洲成人av免费观看| 美女尤物国产一区| 欧美日韩在线视频一区二区三区| 99在线精品视频在线观看 | 亚洲一级淫片| 日韩精品久久久毛片一区二区| 欧美三级三级| 色乱码一区二区三在线看| 欧洲激情视频| 欧美一级黄色录像片| 国产精品99一区二区| 成人一区二区av| 亚洲免费在线| jizzjizzxxxx| va视频在线观看| 国产精品国产a级| www.色小姐com| 午夜久久久影院| 国产寡妇亲子伦一区二区三区四区| 欧美日韩一区二区在线观看视频| 91片黄在线观看喷潮| 日韩精品资源二区在线| 日本不卡视频一区二区| 国产一区二区三区视频| 五月婷婷六月色| 中国人与牲禽动交精品| 国产精品一区hongkong| 欧美最猛性xxxxx免费| 一二区成人影院电影网| 99精品国产一区二区| 色婷婷狠狠五月综合天色拍| 亚洲欧洲日韩综合二区| 亚洲无毛电影| 又色又爽又高潮免费视频国产| 久久99精品国产麻豆婷婷| 1314成人网| 2欧美一区二区三区在线观看视频| 欧美激情 一区| 国产精品久久久久一区 | 国产伦理一区二区| 亚洲美女视频网| 免费av在线| 久久99精品久久久久久青青91 | 日韩欧美一区免费| 免费人成在线观看视频播放| 久久天堂精品| 免费在线观看日韩av| 2023国产一二三区日本精品2022| 69xx绿帽三人行| 色88888久久久久久影院按摩| 99视频在线观看免费| 亚洲第一区在线观看| 久久久久久国产精品免费无遮挡 | 久久sese| 国产美女99p| 欧美淫片网站| 亚洲免费一级视频| 久久久久亚洲蜜桃| 亚洲天堂黄色片| 91久久精品国产91性色tv | 天堂va在线| 国产精品入口夜色视频大尺度| 久久97精品| 一区二区免费在线视频| 性娇小13――14欧美| 亚洲精品在线网址| 国产精品久久久久久久久果冻传媒 | 中文字幕九色91在线| 久久久久久国产精品免费无遮挡| 国产精品白嫩初高中害羞小美女| 国产精品对白久久久久粗| 麻豆视频传媒入口| 激情文学综合插| 一二三四在线观看视频| 欧美性猛交xxx| 免费成人在线看| 久久久久久久97| 亚洲一区二区免费在线观看| 亚洲图片在线观看| 蜜桃视频在线观看一区| 波多野结衣av在线观看| 精品久久久久久久大神国产| 亚洲 欧美 激情 另类| 91av在线网站| 激情av综合| 久久久免费视频网站| 久久众筹精品私拍模特| 香蕉免费毛片视频| 亚洲精品按摩视频| yourporn在线观看视频| 成人国产精品一区二区| 99久久精品国产亚洲精品| 国产精品v日韩精品v在线观看| 亚洲欧美激情在线| 国产成年妇视频| xxx欧美精品| 91蝌蚪精品视频| 国产一区二区四区| av不卡免费在线观看| 黄色片视频免费| 中文字幕精品一区二区精品| 91精品影视| 黄色网zhan| 国产成人免费在线视频| 日本午夜小视频| 亚洲欧美在线免费观看| 成人黄页网站视频| 日本精品福利视频| 成人av电影免费在线播放| 国产免费观看av| 日韩亚洲精品电影| 精品国产亚洲日本| 91xxx视频| 91美女在线观看| 中文字幕 欧美激情| 欧美激情区在线播放| 青青视频一区二区| 亚洲 欧美 另类人妖| 亚洲一区二区三区四区的| 婷婷在线观看视频| 国产精品99免视看9| 欧美成人嫩草网站| 国产又爽又黄无码无遮挡在线观看| 欧美日韩情趣电影| 91豆花视频在线播放| 色涩成人影视在线播放| 成人国产精品免费观看动漫| 中文字幕视频网站| 久久国产加勒比精品无码|