精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美久久综合网| 欧美videosex性欧美黑吊| 麻豆91在线看| 久久久噜噜噜久久久| 成都免费高清电影| 国产日韩欧美中文在线| 丰满岳妇乱一区二区三区| 亚洲欧美日韩精品久久久| 99热这里只有精品5| 亚洲欧美日韩专区| 久久精品视频一| 亚洲成人日韩在线| av日韩一区| 懂色av中文一区二区三区天美| 亚洲欧洲中文| 在线观看xxx| 国产精一品亚洲二区在线视频| 日本乱人伦a精品| 久久婷婷国产麻豆91| 成人aaaa| 亚洲精品一区二三区不卡| 182午夜视频| 视频在线日韩| 午夜精品久久久久久久久| 亚洲免费不卡| 国产黄色在线播放| 99久精品国产| www 成人av com| 国产视频一区二区三区四区五区| 日韩二区三区四区| 91超碰caoporn97人人| 久草视频免费在线播放| 99久久精品网| 色吧影院999| 欧美人妻一区二区三区| 亚洲精品无吗| 亚洲国产精品嫩草影院久久| 在线成人精品视频| 国产精品久久久久久av公交车| 欧美亚洲一区三区| 国产一级片黄色| 一区一区三区| 欧美性猛交xxxx乱大交蜜桃| 久久久久免费看黄a片app| 永久免费网站在线| 亚洲视频精选在线| 最新视频 - x88av| 成人在线影视| 亚洲免费观看高清完整版在线 | 女优一区二区三区| 亚洲成人xxx| 久久精品女同亚洲女同13| 嗯用力啊快一点好舒服小柔久久| 日韩欧美国产系列| 日本精品一二三区| 风间由美一区二区av101| 精品毛片乱码1区2区3区 | 久久综合色之久久综合| 久久久久久久久久久一区| 亚洲欧美丝袜中文综合| 久久久久亚洲蜜桃| 日产精品久久久一区二区| 免费av在线电影| 国产日产欧产精品推荐色| 亚洲第一导航| av观看在线| 亚洲成人av在线电影| 国产成人avxxxxx在线看| 日韩精品人妻中文字幕| 久久午夜精品| 国产精品一区二区三区久久久 | 五月天国产一区| 2019中文字幕在线视频| 亚洲色图视频网| 激情五月婷婷六月| 在线手机中文字幕| 欧美日韩在线一区二区| 91视频福利网| 欧美黄色网视频| 国产一区二区三区精品久久久| 日本一二三不卡视频| 911精品美国片911久久久| 久久久综合av| 日韩乱码一区二区三区| 国产一区二区精品久久91| 国产欧美日韩伦理| 福利在线观看| 一区二区成人在线| 国产二区视频在线播放| 日韩深夜福利网站| 精品精品欲导航| 少妇无套高潮一二三区| 欧美一区二区三区久久精品茉莉花| 97精品免费视频| 伊人久久国产精品| 成人av午夜影院| 亚洲福利av在线| av在线不卡免费| 欧美日韩情趣电影| www.88av| 你懂的亚洲视频| 国产91色在线免费| 亚洲国产av一区二区| 久久精子c满五个校花| 99热这里只有精品7| free欧美| 亚洲国产高潮在线观看| 欧美三级黄色大片| 久久性色av| 国产99视频精品免费视频36| 亚洲1卡2卡3卡4卡乱码精品| 黄色成人在线播放| 青青草原播放器| 久久国产成人精品| 国产成人在线视频| 日本黄色一区二区三区| 亚洲欧洲av另类| 激情内射人妻1区2区3区| 国产精品对白| 免费99精品国产自在在线| 最好看的日本字幕mv视频大全| 不卡一区中文字幕| 一二三四中文字幕| 伊人亚洲精品| 日韩在线观看网站| 性色av免费观看| 99久久综合狠狠综合久久| 国产免费xxx| 中文字幕综合| 日韩中文字幕网址| 波多野结衣av无码| 久久先锋影音av鲁色资源网| 国产在线播放观看| 国语一区二区三区| 欧美俄罗斯乱妇| 99热在线只有精品| 亚洲精品写真福利| 交换做爰国语对白| 2023国产精品久久久精品双| 91视频国产一区| 麻豆网站在线| 7777精品伊人久久久大香线蕉| 国产一区二区在线免费播放| 九色精品国产蝌蚪| 欧美最猛黑人xxxx黑人猛叫黄| 五月婷婷在线观看视频| 亚瑟在线精品视频| 国产激情视频网站| 亚洲尤物影院| 欧美人xxxxx| 影视一区二区三区| 一区二区三区视频免费在线观看| 免费av中文字幕| 中文字幕乱码亚洲精品一区| 一本岛在线视频| 精品视频全国免费看| 久久久久国产精品免费| 国产精品美女一区| 中文字幕亚洲精品在线观看| 亚洲黄色片免费| 欧美96在线丨欧| 国产不卡一区二区在线观看| 2021中文字幕在线| 国产丝袜精品第一页| 国产精品久久久久久人| 国产欧美日韩综合精品一区二区 | 黄色污污视频在线观看| 亚洲第一男人av| caoporn国产| 国产精品久久久久久久久晋中 | 国产综合无码一区二区色蜜蜜| 一区二区三区在线观看欧美| 在线精品视频播放| 性欧美videos另类喷潮| 亚洲精品美女久久7777777| 国产精品一区二区精品视频观看| 久久男人的天堂| 麻豆导航在线观看| 91精品国产手机| 日韩精品一区二区在线播放| 国产香蕉久久精品综合网| 91看片破解版| 99精品免费| 亚洲在线播放电影| 成人春色在线观看免费网站| 国产91在线播放精品91| h片在线免费| 亚洲久久久久久久久久| 一道本在线视频| 亚洲国产精品久久久男人的天堂| 一区二区三区伦理片| 国产在线精品不卡| 大肉大捧一进一出好爽视频| 99久久精品费精品国产| 精品无人乱码一区二区三区的优势| yiren22亚洲综合| 久久久久亚洲精品| av国产在线观看| 亚洲黄色www| 国产一区二区三区黄片| 丁香五六月婷婷久久激情| www色aa色aawww| 国产亚洲精品超碰| 国产人妖在线观看| 麻豆久久久久久| 国产一区二区三区精彩视频 | 国产精品久久久久aaaa樱花| 久久精品女同亚洲女同13| 久久99国产精品麻豆| 99热在线这里只有精品| 欧美伊人影院| 伊人狠狠色丁香综合尤物| 色哟哟精品丝袜一区二区| 99精品99久久久久久宅男| 成人国产网站| 国产99在线|中文| ****av在线网毛片| 日韩三级影视基地| 大片免费播放在线视频| 亚洲国产一区自拍| av加勒比在线| 91精品国产乱码| 亚洲在线精品视频| 欧美中文字幕不卡| 六月丁香激情综合| 亚洲国产日韩a在线播放性色| 顶级黑人搡bbw搡bbbb搡| 日本一区二区三区免费乱视频| 国产又黄又粗又猛又爽的视频 | 国产91社区| 日本99精品| 91免费看蜜桃| 日本成人精品| 国产成人亚洲欧美| 9999久久久久| 不卡一卡2卡3卡4卡精品在| 国产精品美女久久久久人| 91精品久久久久久久久久另类| 欧美va在线观看| 国产精品九九久久久久久久| 欧美动物xxx| 国产激情视频一区| 日本免费久久| 日本一区二区在线播放| 欧美大片高清| 国产精品久久久91| 日本.亚洲电影| 国产精品揄拍一区二区| 另类一区二区三区| 91精品视频在线看| 成人噜噜噜噜| 亚洲最大av在线| 亚洲性视频在线| 国产呦系列欧美呦日韩呦| 欧美久久精品| 欧美在线播放一区| 日本不卡高清| 男同互操gay射视频在线看| 亚洲精品a级片| 国产精品入口芒果| 亚洲专区免费| 九色porny自拍| 狠狠色狠狠色综合系列| 三上悠亚 电影| 91在线你懂得| 日韩影视一区二区三区| 中文字幕一区二区三区四区不卡| 午夜剧场免费在线观看| 亚洲一区二区三区激情| 毛片在线免费视频| 欧美亚洲国产一区在线观看网站| 7777久久亚洲中文字幕| 欧美大片一区二区三区| 日漫免费在线观看网站| 在线日韩精品视频| 色呦呦在线观看视频| 欧美一级成年大片在线观看| 国产成人77亚洲精品www| 亚洲一区二区三区四区视频| 久久精品福利| 伊人狠狠色丁香综合尤物| 亚洲精品黄色| 性chinese极品按摩| 高清不卡一二三区| 亚洲AV无码片久久精品| 亚洲男人的天堂一区二区| 人人干人人干人人干| 欧美日韩在线播放| 黄色av中文字幕| 在线看欧美日韩| 欧美日韩在线视频免费观看| 国产99久久久欧美黑人 | 麻豆成人91精品二区三区| 999精品免费视频| 国产精品国产三级国产aⅴ中文| 国产精品999久久久| 欧美私模裸体表演在线观看| 丰满熟妇人妻中文字幕| 最近2019中文免费高清视频观看www99 | www.久久久久| 瑟瑟视频在线看| 亚洲影视九九影院在线观看| 教室别恋欧美无删减版| 日韩xxxx视频| 国产美女精品一区二区三区| 国产特级黄色录像| 亚洲一区中文在线| 亚洲一区二区人妻| 国产亚洲欧美日韩精品| 僵尸再翻生在线观看免费国语| 92福利视频午夜1000合集在线观看| 国产成人av| 久久亚洲中文字幕无码| 国产麻豆精品久久一二三| 五月婷婷六月香| 色视频成人在线观看免| 三级网站免费观看| 久久这里有精品视频| 蜜桃久久一区二区三区| 伊人青青综合网站| 人狥杂交一区欧美二区| av成人在线电影| 亚洲午夜精品一区 二区 三区| 午夜免费高清视频| 久久精品一区二区三区不卡| 福利一区二区三区四区| 日韩你懂的电影在线观看| 国产区在线看| 成人亲热视频网站| 99国产精品一区二区| 亚洲77777| 国产欧美日本一区二区三区| 色一情一乱一伦| 国产网站欧美日韩免费精品在线观看 | 动漫av一区二区三区| 欧美成年人视频网站| 91麻豆精品一二三区在线| 一区二区三区av| 久久成人av少妇免费| 乱老熟女一区二区三区| 欧美日韩一区在线观看| 欧美r级在线| 国产综合在线观看视频| 色婷婷综合网| 日本77777| 亚洲精品日韩一| 丁香六月天婷婷| 91精品国产高清| 自拍亚洲一区| 日日噜噜噜噜久久久精品毛片| 国产精品免费免费| 国产精品久久久久久久久久久久久久久久久久 | 亚洲午夜国产成人av电影男同| free欧美| 亚洲第一精品区| 国产成人免费视频| 日本污视频在线观看| 亚洲精品97久久| 婷婷综合六月| 宅男av一区二区三区| 国产九九视频一区二区三区| 久久久久久久久久91| 亚洲精品美女在线| 欧美一区 二区 三区| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 亚洲欧美日韩网| 亚洲电影有码| 四虎永久免费网站| 成人小视频在线| 日韩人妻精品中文字幕| 亚洲一区www| www.成人| 5月婷婷6月丁香| 国产精品午夜在线观看| 国产chinasex对白videos麻豆| 高清一区二区三区四区五区| 伊人久久大香线蕉av不卡| 中文字幕成人在线视频| 亚洲午夜私人影院| 精品资源在线看| 亚洲最大福利网| 新67194成人永久网站| 中文字幕美女视频| 亚洲国产精品人久久电影| 四虎精品永久免费| 很污的网站在线观看| 亚洲国产电影在线观看| 性中国xxx极品hd| 国产精品久久久久久久电影 | 国产综合免费视频| 中文字幕亚洲在| 日韩精品一二| 99九九视频| 三级在线观看一区二区| 青青草成人免费| 一区二区欧美激情| 台湾色综合娱乐中文网| 激情在线观看视频| 91国模大尺度私拍在线视频| ****av在线网毛片|