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

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

存儲 存儲軟件 Spark
在使用 Spark 進行計算時,我們經常會碰到作業 (Job) Out Of Memory(OOM) 的情況,而且很大一部分情況是發生在 Shuffle 階段。

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

[[271957]]

一、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-06-06 15:22:07

SparkShuffle內存

2020-10-09 08:15:11

JsBridge

2025-02-14 09:53:50

2021-06-30 00:20:12

Hangfire.NET平臺

2023-05-12 08:19:12

Netty程序框架

2021-08-12 14:19:14

Slice數組類型內存

2019-04-17 15:16:00

Sparkshuffle算法

2023-05-08 08:21:15

JavaNIO編程

2023-07-28 07:14:13

2021-03-09 14:04:01

JavaScriptCookie數據

2021-09-27 09:18:30

ListIterato接口方法

2021-01-26 23:46:32

JavaScript數據結構前端

2020-12-08 08:09:49

SVG圖標Web

2024-01-30 13:47:45

2023-07-30 15:18:54

JavaScript屬性

2021-02-26 20:01:57

SVG濾鏡元素

2021-05-18 08:30:42

JavaScript 前端JavaScript時

2023-09-06 14:57:46

JavaScript編程語言

2024-04-19 14:23:52

SwitchJavaScript開發

2021-06-24 09:05:08

JavaScript日期前端
點贊
收藏

51CTO技術棧公眾號

欧美黄色录像片| 欧美人与动牲性行为| 蜜桃av综合| 久久精品中文字幕免费mv| 苍井空张开腿实干12次| 在线播放高清视频www| 国产视频视频一区| 成人高h视频在线| 日本中文字幕免费观看| 国产精品一线天粉嫩av| 91精品久久久久久蜜臀| 国产乱子伦农村叉叉叉| eeuss影院www在线播放| 成人午夜免费av| 国产精品久久久久久久av电影| 亚洲摸下面视频| 国产av熟女一区二区三区| 青青草在线免费视频| 国产一区二区在线免费观看| 7777免费精品视频| 顶臀精品视频www| 深爱激情综合| 亚洲国产日韩精品在线| 欧美在线aaa| 黑森林国产精品av| 亚洲精品成人a在线观看| 欧美日韩天天操| 亚洲精品无amm毛片| 秋霞午夜av一区二区三区| 欧美精品videossex88| 女教师淫辱の教室蜜臀av软件| 天天久久夜夜| 精品久久久久一区| 永久免费黄色片| 免费成人黄色网| 91国偷自产一区二区使用方法| 色欲色香天天天综合网www| 老司机99精品99| 国产亚洲视频系列| 欧美一二三区| 亚洲日本在线播放| 成人一道本在线| 成人动漫在线视频| av观看在线免费| 国产一区高清在线| 成人免费大片黄在线播放| 一级久久久久久| 性一交一乱一区二区洋洋av| 97精品一区二区三区| 久久精品一级片| 欧美在线日韩| 九九热精品视频| 欧美日韩国产精品综合| 亚洲电影影音先锋| 久久综合伊人77777尤物| 黄色录像免费观看| 小小影院久久| 国产精品人妖ts系列视频| 日韩小视频在线观看专区| 毛片一区二区三区四区| 韩国成人动漫| 色婷婷久久综合| 色欲av无码一区二区人妻| 美女的胸无遮挡在线观看 | 日本韩国一区二区三区| 亚洲国产精品久久久久爰色欲| 瑟瑟视频在线看| 色哟哟在线观看一区二区三区| 国产极品美女高潮无套久久久| 成人影院av| 欧美色国产精品| 亚洲精品视频三区| www.成人网| 日韩国产在线播放| 成人免费无遮挡无码黄漫视频| 91网在线播放| 久久九九久久九九| 亚洲一区二区三区四区中文| 老司机免费在线视频| 一区二区三区四区激情| 免费看国产曰批40分钟| 欧美特大特白屁股xxxx| 欧美日韩一级黄| wwwxxxx在线观看| 韩国精品福利一区二区三区| 精品在线欧美视频| 日韩精品久久久久久久的张开腿让| 久久综合av| 欧美黑人性视频| 亚洲天堂一区在线| 久久成人综合网| 成人在线免费观看一区| 欧美少妇另类| 亚洲欧美一区二区久久| 亚洲不卡中文字幕无码| 国产一区二区色噜噜| 日韩欧美你懂的| 亚洲永久无码7777kkk| 久久国产成人精品| 久久久噜噜噜久噜久久| www.久久久| 亚洲图片欧美在线| 成人综合婷婷国产精品久久| 蜜桃视频在线观看91| 麻豆tv入口在线看| 精品欧美一区二区三区| 午夜久久福利视频| 日韩精品免费一区二区夜夜嗨| 一区二区三区日韩在线| 国产亚洲色婷婷久久99精品| 日本女优在线视频一区二区| 国产高清在线一区| 1024免费在线视频| 疯狂做受xxxx欧美肥白少妇| 视频免费1区二区三区| 精品久久ai电影| 久久精品视频亚洲| 无码人妻一区二区三区线| 国产成人精品在线看| 日韩一区国产在线观看| 韩国精品一区| 精品日韩99亚洲| 少妇高潮一区二区三区喷水| 国产精品女主播一区二区三区| 成人网中文字幕| 成年人视频免费在线观看| 亚洲成年人影院| 日韩av影视大全| 成人网18免费网站| 日本精品久久久久影院| 狠狠躁夜夜躁av无码中文幕| ...av二区三区久久精品| 国产日韩一区二区在线观看| 国产伦精品一区二区三区在线播放 | 国产精品女上位| av免费观看国产| 欧美日本三级| 久久在线免费视频| 一级片aaaa| 国产精品欧美久久久久一区二区| 91国视频在线| 黄色欧美在线| 久久免费在线观看| 丰满岳乱妇国产精品一区| 日本不卡网站| 国产精品国模大尺度视频| 黄色a级片免费| 一本久久青青| 国产91对白在线播放| 三级视频在线看| 亚洲一二三区在线观看| 午夜性福利视频| 国模大胆一区二区三区| 国产精品美女黄网| 白白色在线观看| 亚洲精品一区二区三区蜜桃下载| 九九热精品在线观看| 国产在线精品视频| 成人在线观看毛片| 成人福利免费在线观看| 91精品国产91久久久久久久久| 日本黄色三级视频| 激情懂色av一区av二区av| 国产国语老龄妇女a片| 精品成人久久| 久久精品日产第一区二区三区乱码 | 久久九九全国免费| 日本999视频| 久久在线播放| 91视频在线免费观看| 丁香花在线高清完整版视频| 欧美不卡激情三级在线观看| 国产精品theporn动漫| 91麻豆免费看| wwww.国产| 午夜激情一区| 久久久综合香蕉尹人综合网| 欧美日韩亚洲国产| 色视频www在线播放国产成人| 国产农村妇女毛片精品| 亚洲午夜一区二区三区| 在线免费看黄视频| 久国产精品韩国三级视频| 欧美另类videosbestsex日本| 97久久亚洲| 日韩女在线观看| 成人在线免费看片| 日韩国产高清视频在线| 怡红院男人的天堂| 亚洲综合色在线| 国产在线观看h| 国产高清无密码一区二区三区| 欧美日韩国产一区| 黄色片网站在线播放| 国产精品18久久久| 那种视频在线观看| 欧美一区二区三区另类| 久久综合伊人77777麻豆| 色噜噜成人av在线| 97色在线观看| 日本在线视频网| 亚洲国产成人久久| 一卡二卡三卡在线观看| 午夜电影网亚洲视频| 青青青视频在线播放| 成人看片黄a免费看在线| 免费激情视频在线观看| 亚洲午夜精品久久久久久app| 蜜桃麻豆www久久国产精品| 精品中文字幕一区二区三区| 日本午夜精品理论片a级appf发布| 免费av在线播放| 亚洲美女av网站| 午夜精品在线播放| 欧美日韩一区中文字幕| 久久国产精品系列| 亚洲女人****多毛耸耸8| 一级黄色性视频| 波多野洁衣一区| 中文字幕精品一区二区三区在线| 性欧美暴力猛交另类hd| 精品成在人线av无码免费看| 欧美国产一级| 日产精品高清视频免费| 欧美日韩麻豆| 成人免费在线看片| 国产视频一区二| 国产精品一久久香蕉国产线看观看| 韩国精品一区| 97久久超碰福利国产精品…| av中文字幕在线观看| 中文字幕欧美日韩va免费视频| 亚洲aaaaaaa| 亚洲国产成人精品久久| 亚洲精品无amm毛片| 日韩一区二区在线观看视频播放| 一级黄色a毛片| 欧美日韩一区三区四区| 色av性av丰满av| 欧美三级xxx| 亚洲高清毛片一区二区| 五月婷婷激情综合| 国产精品第108页| 亚洲电影在线播放| 日本系列第一页| 香蕉av福利精品导航| 国产在线视频99| 青草av在线| 亚洲精品日韩在线| 日本在线视频1区| 亚洲欧美日韩中文在线| 手机看片福利在线观看| 日韩av网站导航| 色av男人的天堂免费在线 | 国产在线视频福利| 亚洲人成亚洲人成在线观看| 免费福利在线观看| 一本大道亚洲视频| 1769在线观看| 久久电影一区二区| 欧美xxxxhdvideosex| 午夜精品福利在线观看| mm视频在线视频| 91av国产在线| 粉嫩一区二区三区| 国产精品久久久久久久久影视| 国产亚洲人成a在线v网站| 91精品视频一区| 亚洲精品a区| 精品久久一区二区三区蜜桃| 日本成人中文| 天天爽天天狠久久久| 99久精品视频在线观看视频| 异国色恋浪漫潭| 国产专区一区| 人妻熟女一二三区夜夜爱| 琪琪一区二区三区| 久草福利在线观看| 91丨porny丨蝌蚪视频| 婷婷色一区二区三区| √…a在线天堂一区| 欧美一级高潮片| 色呦呦国产精品| 国产青青草视频| 亚洲精品国产美女| 自拍视频在线播放| 欧美黄色免费网站| 欧美成人ⅴideosxxxxx| 91精品视频免费观看| 国产乱论精品| 一区二区三区我不卡| 激情视频一区| 一区二区三区入口| 国产在线日韩欧美| 中文字幕免费看| 国产精品你懂的| www.youjizz.com亚洲| 一本一道波多野结衣一区二区| 国产又黄又粗又硬| 日韩精品在线视频| gogo在线高清视频| 国产91在线播放九色快色| 精品一区二区三区视频在线播放| 久久青青草综合| 欧美一区综合| 九色porny91| 唐人社导航福利精品| 亚洲国产另类 国产精品国产免费| 香蕉视频黄在线观看| www.久久撸.com| 三级成人黄色影院| 国产精品乱子乱xxxx| 久久人体视频| 久久久免费视频网站| 国产黄色精品网站| 波多野结衣一二三四区| 婷婷亚洲久悠悠色悠在线播放| 国产精品视频久久久久久| 亚洲人成在线免费观看| 国内老司机av在线| 91精品国产综合久久香蕉最新版 | 亚洲福利视频二区| 嫩草在线视频| 国产91精品最新在线播放| 国产精品zjzjzj在线观看| 中文字幕超清在线免费观看| 久久美女性网| jlzzjizz在线播放观看| 亚洲激情图片一区| 一级黄色片在线观看| 国产一区二区精品丝袜| 免费h在线看| 精品日本一区二区| 亚洲激情欧美| 国产精品久久久久久亚洲av| 亚洲精品ww久久久久久p站| 国产精品国产三级国产aⅴ| 在线电影欧美日韩一区二区私密| 欧美极品影院| 日韩av电影免费播放| 久久成人亚洲| 深爱五月激情网| 欧美日韩一区二区在线播放| 日本美女一级视频| 欧美极品第一页| 超碰成人在线观看| av在线com| www.亚洲人| 日本在线播放视频| 亚洲女同精品视频| 亚洲承认视频| 日韩一区二区三区资源| 日韩二区三区在线观看| 色欲AV无码精品一区二区久久| 一本久久精品一区二区| 暖暖视频在线免费观看| 国产精品av在线播放| 欧美手机在线| 亚洲欧美日韩综合网| 自拍视频在线观看一区二区| 国产视频手机在线观看| 欧美黑人国产人伦爽爽爽| 国产乱人伦丫前精品视频| 久草资源站在线观看| 国产亚洲1区2区3区| 中文字幕无码乱码人妻日韩精品| 深夜福利国产精品| 国产精品毛片无码| 欧美久久在线观看| 99re热这里只有精品免费视频| 亚洲免费黄色网址| 中文字幕亚洲欧美日韩在线不卡| 一区二区三区无毛| 日本国产中文字幕| 91在线视频免费观看| 啪啪小视频网站| 伦伦影院午夜日韩欧美限制| 视频精品一区| 乱妇乱女熟妇熟女网站| 国产日韩欧美a| av高清一区二区| 青青草原一区二区| 久久免费精品视频在这里| wwwww在线观看| 激情综合久久| 亚洲综合网中心| 国产精品白丝av| 高清乱码免费看污| 久久久www成人免费精品| 国产一区丝袜| 色婷婷成人在线| 亚洲国产欧美另类丝袜| 国产午夜在线视频| 亚洲永久免费观看| 天堂成人国产精品一区| 国产尤物在线播放| 日韩精品视频在线| 欧美1区2区3| 久久9精品区-无套内射无码| 亚洲精品乱码久久久久久日本蜜臀|