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

Hive數據傾斜案例講解

大數據
實際搞過離線數據處理的同學都知道,Hive SQL 的各種優化方法都是和數據傾斜密切相關的,所以我會先來聊一聊 “「數據傾斜」” 的基本概念,然后再在此基礎上為大家介紹各種場景下的 Hive 優化方案。

實際搞過離線數據處理的同學都知道,Hive SQL 的各種優化方法都是和數據傾斜密切相關的,所以我會先來聊一聊 “「數據傾斜」” 的基本概念,然后再在此基礎上為大家介紹各種場景下的 Hive 優化方案。

Hive 的優化分為 「join 相關的優化」 和 「join 無關的優化」 。

從項目實際來說, join 相關的優化其實占據了 Hive 優化的大部分內容,而 join 相關的優化又分為 mapjoin 可以解決的 join 優化和 mapjoin 無法解決的 join 優化。

一、離線數據的主要挑戰:“數據傾斜”

首先介紹 “數據傾斜” 的概念。

“傾斜”應該來自于統計學里的的偏態分布,數據處理中的傾斜和此相關。

對于分布式數據處理來說,我們希望數據平均分布到每個處理節點,但是實際上由于業務數據本身的問題或者分布算法的問題,每個節點分配到的數據量很可能并不是我們預想的那樣。

也就是說,只有待分到最多數據的節點處理完數據,整個數據處理任務才能完成,時分布式的意義就大打折扣 ,想想那個卡死的 99% 。

實際上,即使每個節點分配到的數據量大致相同,數據仍可能傾斜,比如考慮統計詞頻的極端問題,如果某個節點分配到的詞都是一個詞,那么顯此節點需要的耗時將很長,即使其數據量和其他節點的數據量相同。

Hive 的優化正是采用各種措施和方法對上述場景的傾斜問題進行優化和處理。

二、Hive 的優化

其實在實際 Hive SQL 開發的過程中, Hive SQL 性能的問題上實際只有一小部分和數據傾相關。

很多時候, Hive SQL 運行得慢是由開發人員對于使用的數據了解不夠以及一些不良的使用習慣引起的。

開發人員 要確定以下幾點:

  • 「需要計算的指標真的需要從數據倉庫的公共明細層來自行匯總么?」 是不是數據公共層團隊開發的公共匯總層已經可以滿足自己的需求?對于大眾的、 KPI 相關的指標等通常設計良好的數據倉庫公共層肯定已經包含了,直接使用即可。
  • 「真的需要掃描這么多分區么?」 比如對于銷售明細事務表來說,掃描一年的分區和掃描一周的分區所帶來的計算、 IO 開銷完全是兩個量級,所耗費的時間肯定也是不同的。作為開發人員,我們需要仔細考慮業務的需求,盡量不要浪費計算和存儲資源!
  • 「盡量不要使用 select * from your_table 這樣的方式,用到哪些列就指定哪些列。」 如 select coll, col2 from your_table ,另外, where 條件中也盡量添加過濾條件,以去掉無關的數據行,從而減少整個 MapReduce 任務中需要處理、分發的數據量
  • 「輸入文件不要是大量的小文件。」 Hive 的默認 Input Split 是 128MB (可配置),小文件可先合并成大文件。

在保證了上述幾點之后,有的時候發現 Hive SQL 還是要運行很長時間,甚至運行不出來, 這時就需要真正的 Hive 優化技術了!

三、Join 無關的優化

Hive SQL 性能問題基本上大部分都和 join 相關,對于和 join 無關的問題主要有 group by 相關的傾斜和 count distinct 相關的優化。

group by 引起的傾斜優化

group by 引起的傾斜主要是輸入數據行按照 「group by 列分布不均勻」 引起的。

比如,假設按照供應商對銷售明細事實表來統計訂單數,那么部分大供應商的訂單量顯然非常多,而多數供應商的訂單量就一般,由于 group by 的時候是按照供應商的 ID 分發到每個 Reduce Task ,那么此時分配到大供應商的 Reduce Task 就分配了更多的訂單,從而導致數據傾斜。

對于 group by 引起的傾斜,優化措施非常簡單,只需設置下面參數即可:

 

  1. set hive.map.aggr = true  
  2.    set hive.groupby.skewindata=true 

此時Hive 在數據傾斜的時候會進行負載均衡,生成的查詢計劃會有兩個 MapReduce Job。

  • 第一個 MapReduce Job 中,Map 的輸出結果集合會隨機分布到 Reduce 中,每個Reduce 做部分聚合操作并輸出結果。這樣處理的結果是相同的 GroupBy Key 有可能被分布到不同的 Reduce 中,從而達到負載均衡的目的;
  • 第二個 MapReduce Job 再根據預處理的數據結果,按照 GroupBy Key 分布到 Reduce 中(這過程可以保證相同的GroupBy Key被分布到同一個Reduce中),最后完成最終的聚合操作。

count distinct 優化

在 Hive 開發過程中,應該小心使用 count distinct ,因為很容易引起性能問題,比如下面的 SQL:

  1. select count(distinct userfrom some_table 

由于必須去重,因此 Hive 將會把 Map 階段的輸出全部分布到 Reduce Task 上,此時很容易引起性能問題。對于這種情況,可以通過先 group by 再 count 的方式來優化,優化后的 SQL 如下:

 

  1. select count(*) from ( 
  2.    select user  
  3.    from some_table  
  4.    group by user 
  5.    ) tmp; 

原理為:先利用 group by 去重,再統計 group by 的行數目。

四、大表 Join 小表優化

join 相關的優化主要分為 mapjoin 可以解決的優化 ( 即大表 join 小表) 和 mapjoin 無法解決的優化( 即大表 join 大表 )。大表 join 小表相對容易解決,大表 join 大表相對復雜和難以解決,但也不是不可解決的,只是相對比較麻煩而已。

首先介紹大表 join 小表優化 。仍以銷售明細事實表為例來說明大表 join 小表的場景。

假如供應商會進行評級,比如(五星、四星、 兩星、 一星),此時業務人員希望能夠分析各供應商星級的每天銷售情況及其占比。

開發人員一般會寫出如下 SQL:

 

  1. select Seller_srar, count(order_id) as ordre_cnt 
  2.    from ( 
  3.    select order_id,seller_id  
  4.        from dwd_sls_fact_detail_table 
  5.        where partition_value ='20170101' 
  6.    ) a 
  7.    Left outer join
  8.    select seller_id,seller_star 
  9.        from dim_seller 
  10.        where partition_value='20170101' 
  11.    ) b 
  12.    on a.seller_id = b.seller_id 
  13.    group by b.seller_star; 

但正如上述所言,現實世界的二八準則將導致訂單集中在部分供應商上,而好的供應商的評級通常會更高,此時更加劇了數據傾斜的程度。如果不加以優化,上述 SQL 將會耗費很長時間,甚至運行不出結果!

通常來說,供應商是有限的,比如上千家、上萬家,數據量不會很大,而銷售明細事實表比較大,這就是典型的大表 join 小表問題,可以通過 mapjoin 的方式來優化,只需添加 mapjoin hint 即可,優化后的 SQL 如下:

 

  1. select /*+mapjoin(b)*/ Seller_srar, count(order_id) as ordre_cnt 
  2. from ( 
  3. select order_id,seller_id  
  4.     from dwd_sls_fact_detail_table 
  5.     where partition_value ='20170101' 
  6. ) a 
  7. Left outer join
  8. select seller_id,seller_star 
  9.     from dim_seller 
  10.     where partition_value='20170101' 
  11. ) b 
  12. on a.seller_id = b.seller_id 
  13. group by b.seller_star; 

 

/*+mapjoin(b)*/ 即 mapjoin himt,如果需要 mapjoin 多個表,則格式為/*+mapjoin(b,c,d)*/ 。

Hive 對于 mapjoin 是默認開啟的,設置參數為:

  1. Set hive.auto.convert.join=ture; 

mapjoin 優化是在 Map 階段進行 join ,而不是像通常那樣在 Reduce 階段按照 join 列進行分發后在每個 Reduce 任務節點上進行 join ,不需要分發也就沒有傾斜的問題,相反 Hive 會將小表全量復制到每個 Map 任務節點(對于本例是 dim_seller ,當然僅全量復制 b表 sql 指定的列),然后每個 Map 任務節點執行 lookup 小表即可。

「從上述分析可以看出,小表不能太大,否則全量復制分發得不償失。」

  • 實際上 Hive 根據參數 hive.mapjoin.smalltable.filesize ( 0.11.0 本后是 hive.auto.convert.join.noconditionaltask.size )來確定小表的大小是否滿足條件(默認 25M)。
  • 實際中此參數值所允許的最大值可以修改,但是一般最大不能超過 1GB (太大的話 Map 任務所在的節點內存會撐爆, Hive 會報錯 。另外需要注意的是, HDFS 顯示的文件大小是壓縮后的大小, 當實際加載到內存的時候,容量會增大很多,很多場景下可能會膨脹 10 倍)。

五、大表 Join 大表優化

如果上述 mapjoin 中小表 dim_seller 很大呢?比如超過了 1GB 的大小?這種就是大表join 大表的問題 。

這類問題相對比較復雜,我們首先引入具體的問題場景,然后基于此介紹各種優化方案。

問題場景

我們先假設一個問題場景:

  • A 表為一個匯總表,匯總的是賣家買家最近 N 天交易匯總信息,即對于每個賣家最近 N 天,其每個買家共成交了多少單、總金額是多少,我們這里 N 先只取 90 天,匯總值僅取成交單數 。A 表的字段有:buyer_id 、seller_id 和 pay_cnt_90d 。
  • B 表為賣家基本信息表,其中包含賣家的一個分層評級信息,比如把賣家分為 6 個級別:S0、S1、S2、S3、S4、S5、S6 。

要獲得的結果是每個買家在各個級別賣家的成交比例信息,比如:

  • 某買家 S0:10%; S1:20%; S2:20%; S3:10%; S4:20%; S4:10%; S5:10%。
  • B表的字段有:seller_id 和 s_level。

正如 mapjoin 中的例子一樣,我們的第一反應是直接 join 表并統計:

 

  1. select  
  2. m.buyer_id  
  3. ,sum(pay_cnt_90d) as pay_cnt_90d  
  4. ,sum(case when m.s_level=O then pay_cnt_90d endas pay_cnt_90d_s0  
  5. ,sum(case when m.s_level=l then pay_cnt_90d endas pay_cnt_90d_sl  
  6. ,sum(case when m.s_level=2 then pay_cnt_90d endas pay_cnt_90d_s2  
  7. ,sum(case when m.s level=3 then pay cnt 90d endas pay_cnt_90d_s3 
  8. ,sum(case when m.s_level=4 then pay_cnt_90d endas pay_cnt_90d_s4  
  9. ,sum(case when m.s_level=S then pay_cnt_90d endas pay_cnt_90d_s5  
  10. from  
  11. select  
  12. a.buyer_id,a.seller_id,b.s_level,a.pay_cnt_90d  
  13. from  
  14. select buyer_id ,seller_id,pay_cnt_90d  
  15. from table A  
  16. ) a  
  17. join  
  18. select seller_id,s_level  
  19. from table B  
  20. ) b  
  21. on a.seller_id=b.seller_id  
  22. ) m  
  23. group by m.buyer_id 

但是此 SQL 會引起數據傾斜,原因在于賣家的二八準則。某些賣家 90 天內會有幾百萬甚至上千萬的買家,但是大部分賣家 90 天內的買家數目并不多, join table_A 和table_B 的時候 ODPS 會按照 Seller_id 進行分發, table_A 的大賣家引起了數據傾斜。

「但是本數據傾斜問題無法用 mapjoin table_B 解決,因為賣家有超過千萬條、文件大小幾個GB ,超過了 mapjoin 表最大 1GB 的限制。」

方案 1:轉化為 mapjoin

大表無法直接mapjoin,那么是否可以間接呢?實際上此思路有兩種途徑:限制行和限制列。

  • 限制行: 不需要join B全表,只需要join其在A表中存在的。對于本問題場景,就是過濾掉 90 天內沒有成交的賣家。
  • 限制列: 只取需要的字段。

 

  1. select  
  2.  m.buyer_id  
  3.  ,sum(pay_cnt_90d) as pay_cnt_90d  
  4.  ,sum(case when m.s_level=O then pay_cnt_90d endas pay_cnt_90d_s0  
  5.  ,sum(case when m.s_level=l then pay_cnt_90d endas pay_cnt_90d_sl  
  6.  ,sum(case when m.s_level=2 then pay_cnt_90d endas pay_cnt_90d_s2  
  7.  ,sum(case when m.s level=3 then pay cnt 90d endas pay_cnt_90d_s3 
  8.  ,sum(case when m.s_level=4 then pay_cnt_90d endas pay_cnt_90d_s4  
  9.  ,sum(case when m.s_level=S then pay_cnt_90d endas pay_cnt_90d_s5  
  10.  from  
  11.  ( 
  12.  select /*+mapjoin(b)*/ 
  13.  a.buyer_id,a.seller_id,b.s_level,a.pay_cnt_90d  
  14.  from  
  15.  ( 
  16.  select buyer_id ,seller_id,pay_cnt_90d  
  17.  from table_A  
  18.  ) a  
  19.  join  
  20.  ( 
  21.  select b0.seller id,s_level  
  22.  from table_B b0 
  23.      join 
  24.      (select seller_id from table_A group by seller_id) a0 
  25.      on b0.seller_id=a0.seller_id 
  26.  ) b  
  27.  on a.seller_id=b.seller_id  
  28.  ) m  
  29.  group by m.buyer_id 

此方案在一些情況下可以起作用,但很多時候還是無法解決上述問題,因為大部分賣家盡管 90 買家不多 ,但還是有一些的,過濾后的 B 表仍然很大。

方案 2:join 時用 case when 語句

應用場景為: 傾斜的值是明確的而且數量很少,比如null值引起的傾斜。

將這些引起傾斜的值隨機分發到Reduce,其主要核心邏輯在于 join 時對這些特殊值concat 隨機數,從而達到隨機分發的目的。核心邏輯如下:

 

  1. Select a.user_id,a.order_id,b.user_id  
  2.   From table_a a  
  3.   Join table_b b  
  4.   On (case when a.user_id is null then concat ('hive' ,rand()) else a.user_id end)=b.user_id 

Hive已對此進行了優化,不需要修改SQL,只需要設置參數;比如 table_B 的值 "0" 和 "1" 引起傾斜,只需要如下設置:

 

  1. set hive.optimize.skewinfo=table_B:(seller_id)[("0")("1")]; 
  2.    set hive.optimize.skewjoin=true

但是方案二還是不能解決上述問題,因為傾斜的賣家大量存在而且動態變化。

方案 3:倍數B表,再取模join

通用方案

是建立一個numbers表,其值只有一列int行,比如從1到10(具體根據傾斜程度確定),然后放大B表10倍,再取模join。

 

  1. select  
  2.   m,buer_id 
  3.   ,sum(pay_cnt_90d) as pay_cnt_90d  
  4.   ,sum(case when m.s_level=O then pay_cnt_90d endas pay cnt 90d so  
  5.   ,sum(case when m.s_level=l then pay cnt 90d endas pay cnt 90d_sl  
  6.   ,sum(case when m.s_level=2 then pay_cnt_90d endas pay_cnt_90d s2  
  7.   ,sum(case when m.s_level=3 then pay_cnt_90d endas pay_cnt_90d_s3  
  8.   ,sum(case when m.s_level=4 then pay_cnt_90d endas pay cnt 90d s4  
  9.   ,sum(case when m.s level=S then pay cnt 90d endas pay cnt 90d s5  
  10.   from  
  11.   ( 
  12.   select  
  13.   a.buyer_id,a.seller_id,b.s_level,a.pay_cnt_90d  
  14.   from 
  15.   ( 
  16.   select buyer_id,seller_id,pay_cnt_90d  
  17.   from table_A  
  18.   ) a  
  19.   JOin  
  20.   ( 
  21.   select /*+mapjoin(members)*/  
  22.   seller_id,s_level,member  
  23.   from table_B  
  24.   join  
  25.   numbers  
  26.   ) b  
  27.   on a.seller_id=b.seller_id  
  28.   and mod(a.pay_cnt_90d,10)+1=b.number  
  29.   ) m  
  30.   group by m.buyer_id 

思路核心在于:既然按照seller_id分發會傾斜,那么再人工增加一列進行分發,這樣之前傾斜的值的傾斜程度會減少為原來的1/10。可以通過配置numbers表修改放大倍數來降低傾斜程度,但弊端就是B表會膨脹N倍。

專有方案

通用方案思路是把B表的每條數據都放大了相同的倍數,實際上只需要把大賣家放大倍數即可。

首先需要知道大賣家的名單,即先建立一個臨時表動態存放每日最新的大賣家(比如dim_big_seller),同時此表的大賣家要膨脹預先設定的倍數(比如1000倍)。

在A表和 B表中分別新建一個 join 列,其邏輯為:如果是大賣家,那么 concat 一個隨 機分配正整數(0到預定義的倍數之間,本例為0~1000 );如果不是,保持不變。

 

Hive數據傾斜案例講解

相比通用方案,專用方案的運行效率明顯好了很多,因為只是將B表中大賣家的行數放大了 1000 倍,其他賣家的行數保持不變,但同時也可以看到代碼也復雜了很多,而且必須首先建立大賣家表。

方案 4:動態一分為二

實際上方案 2 和 3 都用到了一分為二的思想,但是都不徹底,對于 mapjoin 不能解決的 問題,終極解決方案就是動態一分為 ,即對傾斜的鍵值和不傾斜的鍵值分開處理,不傾 斜的正常 join 即可,傾斜的把它們找出來然后做 mapjoin ,最后 union all 其結果即可。

但是此種解決方案比較麻煩,代碼會變得復雜而且需要一個臨時表存放傾斜的鍵值。

 

Hive數據傾斜案例講解

- 對于 90 天買家數超過 10000 的賣家直接 map join ,對于其他賣家正常 join 即可

 

  1. - 對于 90 天買家數超過 10000 的賣家直接 map join ,對于其他賣家正常 join 即可 
  2. select  
  3. m.buyer_id  
  4. ,sum(pay_cnt_90d) as pay_cnt_90d  
  5. ,sum(case when rn.s_level=O then pay_cnt_90d endas pay_cnt_90d_s0  
  6. ,sum(case when rn.s_level=l then pay_cnt_90d endas pay_cnt_90d_sl  
  7. ,sum(case when rn.s_level=2 then pay_cnt_90d endas pay_cnt_90d_s2  
  8. ,sum(case when rn.s_level=3 then pay_cnt_90d endas pay_cnt_90d_s3  
  9. ,sum(case when rn.s_level=4 then pay_cnt_90d endas pay_cnt_90d_s4  
  10. ,sum(case when rn.s_level=S then pay_cnt_90d endas pay_cnt_90d_s5 
  11. from 
  12. select  
  13.     a.buyer_id,a.seller_id,b.s_level,a.pay_cnt_90d 
  14.     from 
  15.     ( 
  16.     select buyer_id,seller_id,pay_cnt_90d 
  17.         from table_A 
  18.     ) a 
  19.     join 
  20.     ( 
  21.      select seller_id ,a.s_level 
  22.         from table_A a 
  23.         left outer join tmp_table_B b 
  24.         on a.user_id = b.seller_id 
  25.         where b.seller_id is null 
  26.     ) b  
  27. on a.seller id=b.seller id  
  28. union all  
  29. select /*+mapjoin(b)*/  
  30. a.buyer_id,a.seller_id,b.s_level,a.pay_cnt_90d  
  31. from  
  32. select buyer_id,seller_id,pay_cnt_90d  
  33. from table A  
  34. ) a  
  35. join  
  36. select seller_id,s_level  
  37. from table B  
  38. ) b  
  39. on a.seller id=b.seller id 
  40. ) m group by m.buyer_id 
  41. ) m 
  42. group by m.byer_id 

總結起來,方案 1、2 以及方案 3 中的通用方案不能保證解決大表 join 大表問題,因為它們都存在種種不同的限制和特定的使用場景。

而方案 3 的專用方案和方案 4 是比較推薦的優化方案,但是它們都需要新建一個臨時表來存放每日動態變化的大賣家 。

相對方案 4 來說,方案 3 的專用方案不需要對代碼框架進行修改,但是 B 表會被放大,所以一定要是維度表,不然統計結果會是錯誤的 。方案 4 的解決方案最通用,自由度最高,但是對代碼的更改也最大,甚至需要更改代碼框架,可作為終極方案來使用。

責任編輯:未麗燕 來源: 云祁QI
相關推薦

2021-04-22 07:21:55

Hive數據傾斜

2021-08-04 07:21:31

Hive 數據排查

2023-05-06 07:20:27

HiveDDL管理表

2023-05-06 07:15:59

Hive內置函數工具

2023-05-11 00:17:44

分區HiveReduce

2025-09-15 09:33:52

2018-10-30 13:01:57

磁盤故障案例

2023-05-03 22:09:02

Hive分區工具,

2022-02-23 12:07:20

分布式Spark數據傾斜

2023-07-26 07:22:32

2009-09-29 14:03:14

Hibernate數據

2022-11-23 07:30:11

2010-06-18 15:01:12

SharePoint

2009-10-27 15:49:11

VB.NET分辯率

2009-10-28 17:23:19

linux配置MySQ

2023-11-26 00:13:16

開源數據Logstash

2022-12-12 08:13:27

Redis數據傾斜

2020-04-01 11:05:24

Spark數據傾斜Hadoop

2011-08-17 14:32:44

iOS開發繪制

2009-11-09 09:23:10

WCF數據契約
點贊
收藏

51CTO技術棧公眾號

亚洲黄页在线观看| 免费人成在线观看网站| 欧美1区免费| 精品国产乱码久久久久久久久| 先锋在线资源一区二区三区| 国产v片在线观看| 国产亚洲成人一区| 中文字幕亚洲精品| 好吊操视频这里只有精品| 日韩av女优在线观看| 最新日韩一区| 中文字幕亚洲成人| 国产亚洲精品美女久久久m| 看黄色一级大片| 欧美久久成人| 在线成人激情黄色| 日韩国产精品一区二区| 无码人妻精品一区二区50| 91影院成人| 精品一区二区亚洲| 最新天堂中文在线| 国产免费拔擦拔擦8x高清在线人| 麻豆精品在线视频| 日本亚洲精品在线观看| 国产精品第1页| 一级网站在线观看| 污视频网站在线免费| 久久久久久久久久久电影| 久久精品视频中文字幕| 性色av蜜臀av色欲av| 免费精品一区| 欧美综合色免费| 亚洲不卡中文字幕无码| 国产乱码精品一区二三区蜜臂| 91精品99| 亚洲国产高清福利视频| 缅甸午夜性猛交xxxx| 国产伦精品一区二区三区免.费| 欧美国产高清| 亚洲精品日韩久久久| 成人国产精品久久久久久亚洲| 狠狠干视频网站| 中文字幕精品无码亚| 国产日韩一区| 69av成年福利视频| 精品在线视频免费| 欧美三级不卡| 欧美久久精品一级黑人c片| 黄色国产在线播放| 精品av一区二区| 亚洲欧美日韩区| 丝袜美腿中文字幕| 亚洲电影一级片| 亚洲欧美国产一本综合首页| 一本加勒比波多野结衣| 国产伦精品一区二区三区在线播放| 欧美一区二区三区在| 福利片一区二区三区| 久久精品国产精品亚洲毛片| 欧美日韩一区不卡| 亚洲一区二区三区观看| 日韩精品 欧美| 69久久精品| 国产日韩欧美电影| 日日骚一区二区网站| 国产一级片在线播放| 国产欧美视频在线观看| 日本在线视频一区| 四虎久久免费| 亚洲男人的天堂在线aⅴ视频| 国产又粗又爽又黄的视频| 国产三区视频在线观看| 玉米视频成人免费看| 中文精品无码中文字幕无码专区| 欧美日韩在线视频免费观看| 亚洲成人tv网| 北条麻妃在线观看| 亚洲成人va| 欧美一区日本一区韩国一区| 特黄特色免费视频| 日本中文字幕在线一区| 亚洲欧洲日本专区| 五月婷婷综合激情网| 中文无码久久精品| 97在线视频免费看| 中文字幕天堂在线| 国产精品一区二区三区乱码| 国产欧美亚洲日本| 黄色av免费在线观看| 国产精品国产三级国产有无不卡| 女人床在线观看| 女厕盗摄一区二区三区| 欧美亚洲综合久久| wwwxxxx在线观看| 私拍精品福利视频在线一区| 中文字幕日韩在线观看| 九九精品在线观看视频| 香蕉久久夜色精品国产| 国产精品永久免费观看| 日本黄色大片视频| 久久婷婷国产综合国色天香| 亚洲综合av一区| 黄色在线免费播放| 9l视频自拍九色9l视频成人| 精品一区二区三区电影| 日韩一区二区不卡视频| 亚洲美女一区| 成人夜晚看av| 欧美日韩伦理片| 亚洲精品中文在线观看| 亚洲国产精品久久久久爰色欲| 亚洲午夜国产成人| 精品视频久久久久久| 黄色录像一级片| 麻豆9191精品国产| 不卡视频一区二区| 成年人视频网站在线| 亚洲成在线观看| 亚洲理论中文字幕| 黄色不卡一区| 韩国美女主播一区| 国产视频aaa| 国产日产欧美一区| 国产 福利 在线| 精品午夜视频| 日韩中文字幕免费看| 久久精品视频1| 不卡的av电影| 一级性生活视频| 亚洲伦理网站| 最近中文字幕2019免费| 黄色污污网站在线观看| 91免费在线看| 拔插拔插海外华人免费| 日本精品视频| 麻豆国产va免费精品高清在线| 国产成人自拍偷拍| 国产日本一区二区| 国产黄色特级片| 日韩欧美四区| 911国产网站尤物在线观看| 国产自产一区二区| 亚洲影院理伦片| 久久久久亚洲av无码麻豆| 国产精品99久久精品| 国产精品视频区1| 国产h视频在线观看| 色综合久久久久网| 中出视频在线观看| 国产欧美日韩亚洲一区二区三区| 国产精品大全| heyzo一区| 精品国产免费人成电影在线观看四季| 日本妇女毛茸茸| 国产高清不卡一区| 黄色一级片黄色| 大伊香蕉精品在线品播放| 欧美精品第一页在线播放| 丰满熟妇乱又伦| 亚洲成人资源在线| 亚洲av无码国产精品久久| 久久精品日韩欧美| 亚洲国产精品一区二区第四页av| 国产精品99精品一区二区三区∴| 中文字幕欧美精品日韩中文字幕| 亚洲自拍偷拍另类| 亚洲精选一二三| 国产人成视频在线观看| 性久久久久久| 亚洲一区二区三区午夜| 精品国产一区二| 午夜欧美不卡精品aaaaa| 天堂成人在线| 欧美亚洲禁片免费| 日韩一级片大全| 岛国精品一区二区| 欧美私人情侣网站| 日韩激情图片| 99r国产精品视频| 国产伦子伦对白在线播放观看| 日韩av一区在线| 欧美成人一区二区视频| 亚洲品质自拍视频| 国产精品嫩草69影院| 国产模特精品视频久久久久| 亚洲开发第一视频在线播放| 国产一区二区av在线| 午夜精品国产精品大乳美女| 成人综合影院| 日韩欧美123| 无码人妻一区二区三区免费 | www.久久com| 好吊一区二区三区| 女女同性女同一区二区三区91| 国产精品亚洲成在人线| 久久免费视频在线观看| av网站无病毒在线| 亚洲第一av在线| 又色又爽又黄无遮挡的免费视频| 亚洲自拍与偷拍| 欧美成人另类视频| 成人久久久精品乱码一区二区三区 | 国产精品九九九| 久久久久黄久久免费漫画| 伊人久久久久久久久久久| 亚洲第一成年人网站| 在线免费观看日本欧美| 精品亚洲永久免费| 国产精品久久久久久亚洲伦 | 欧美理伦片在线播放| 91精品久久久久久久| 色网在线免费观看| 欧美老少配视频| 成a人v在线播放| 日韩精品福利在线| 亚洲精品久久久蜜桃动漫| 欧美日本一区二区在线观看| 国产无套丰满白嫩对白| 亚洲国产美国国产综合一区二区| 久久久久久久久久97| 久久久精品影视| 亚洲欧美日本一区| 成人一级片在线观看| 能看毛片的网站| 精品一区二区三区免费观看 | 日韩大片免费在线观看| 亚洲欧美另类图片小说| 国产又粗又猛又爽又黄的视频小说| 久久综合色综合88| 三级男人添奶爽爽爽视频| 高清不卡在线观看av| a级大片免费看| 久久99国内精品| 2025韩国理伦片在线观看| 久久久久久亚洲精品杨幂换脸| 国产96在线 | 亚洲| 欧美日本国产| 久久久久久久久影视| 99re6这里只有精品| 视频在线精品一区| 精品高清久久| 日韩av免费电影| 国产一区二区精品福利地址| 日本精品免费| jlzzjlzz亚洲女人| 色噜噜狠狠一区二区三区| 成人在线一区| 中文字幕av日韩精品| 香蕉久久网站| 青青草视频在线视频| 精品91久久久久| 国产人妻777人伦精品hd| 亚洲精品女人| 欧美成人xxxxx| 天堂久久一区二区三区| 熟妇人妻无乱码中文字幕真矢织江| 久久久夜精品| 色一情一区二区| 国产乱人伦偷精品视频不卡| 人妻精品久久久久中文字幕69| 国产精品一区二区在线播放| 中国黄色片视频| 久久这里只有精品视频网| 免费看污片的网站| 国产精品久久久久久久久免费丝袜| 2014亚洲天堂| 亚洲国产精品欧美一二99| 草久久免费视频| 91福利区一区二区三区| 91久久精品国产91性色69| 欧美日韩国产首页| 亚洲精品成人电影| 日韩精品视频在线观看网址| 超碰免费在线观看| 久久99国产综合精品女同| 午夜影院在线播放| 国产欧美精品一区二区三区-老狼| 9999精品视频| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 成人一区二区在线| 色婷婷av一区二区三区丝袜美腿| 日本精品一区二区三区不卡无字幕| 日韩不卡一区| 亚洲 欧美 综合 另类 中字| 久久久夜夜夜| 久久久男人的天堂| 久久久久久**毛片大全| 成熟的女同志hd| 一本久道中文字幕精品亚洲嫩| 国产精品久久久久久免费| 亚洲国产精品电影在线观看| 午夜老司机在线观看| 国产做受高潮69| 中文幕av一区二区三区佐山爱| 国产偷国产偷亚洲高清97cao| 欧美一区二区三区激情视频| 菠萝蜜视频在线观看入口| 日韩激情av在线| 国产人成视频在线观看| 中文字幕一区三区| 九九热在线免费观看| 91精品国产综合久久久久久久久久| 熟妇高潮一区二区高潮| 久久精品91久久香蕉加勒比| 亚洲欧美韩国| 成人精品水蜜桃| 图片小说视频色综合| 国产精品无码专区av在线播放| 成人一区二区视频| 日韩三级在线观看视频| 日本高清免费不卡视频| 免费观看黄色av| 久久综合九色九九| 91p九色成人| 久久久亚洲综合网站| 欧美日韩理论| 色呦色呦色精品| 国产欧美一区二区在线| 日韩污视频在线观看| 精品久久一区二区三区| 快射视频在线观看| 国产精品一区=区| 神马电影久久| 国产亚洲欧美在线视频| 成人福利视频网站| 久草视频免费在线播放| 91麻豆精品国产91| 欧美成人三区| 国产精品自产拍高潮在线观看| 国产精品一区二区三区av麻| 91九色在线观看视频| 成人av在线播放网站| 久久亚洲国产成人精品性色| 日韩一级片在线观看| 免费黄色电影在线观看| 国产女人精品视频| 波多野结衣在线播放一区| 久久精品一区二| 国产日韩亚洲欧美综合| 手机av免费观看| 亚洲人av在线影院| 快播电影网址老女人久久| 日本在线成人一区二区| 日韩精彩视频在线观看| 欧美18—19性高清hd4k| 欧美性一二三区| 在线激情网站| 91精品视频播放| 中文字幕乱码亚洲无线精品一区| 五月天开心婷婷| 亚洲色图欧洲色图婷婷| 99精品视频免费看| 欧美夫妻性生活xx| 好吊妞视频这里有精品| 国产老熟妇精品观看| 91美女精品福利| 成人黄色三级视频| www.亚洲免费视频| 亚洲一二av| 毛片在线播放视频| 久久久亚洲精品石原莉奈| 91视频久久久| 久久久999精品| 99ri日韩精品视频| 中文字幕无码精品亚洲35| 久久女同精品一区二区| 中文字幕在线日亚洲9| 久久这里只有精品99| 欧美日韩看看2015永久免费 | 做爰高潮hd色即是空| 国产精品中文字幕一区二区三区| 免费网站看av| 精品伊人久久97| av日韩久久| 自拍日韩亚洲一区在线| 欧美激情一区不卡| 精品黑人一区二区三区在线观看| 韩剧1988免费观看全集| 欧美日一区二区| 农村末发育av片一区二区 | 色中色综合影院手机版在线观看 | 极品少妇xxxx精品少妇偷拍| 久久中文字幕无码| 亚洲一区二区久久| 免费精品一区二区三区在线观看| 波多野结衣家庭教师在线| 国产精品视频一二三| 黄色www视频| 国产精品免费福利| 亚洲福利一区| 女人裸体性做爰全过| 亚洲成人久久一区| 成人国产激情| 欧美 日韩 亚洲 一区| 国产精品麻豆一区二区 | 中文字幕亚洲一区| 欧美韩一区二区| 中文字幕55页| 欧美性受极品xxxx喷水| 97人人爽人人澡人人精品|