日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hivesql优化的深入解析

發布時間:2023/12/6 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hivesql优化的深入解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:https://www.csdn.net/article/2015-01-13/2823530

一個Hive查詢生成多個Map Reduce Job,一個Map Reduce Job又有Map,Reduce,Spill,Shuffle,Sort等多個階段,所以針對Hive查詢的優化可以大致分為針對MR中單個步驟的優化(其中又會有細分),針對MR全局的優化,和針對整個查詢(多MR Job)的優化,下文會分別闡述。


在開始之前,先把MR的流程圖帖出來(摘自Hadoop權威指南),方便后面對照。另外要說明的是,這個優化只是針對Hive 0.9版本,而不是后來Hortonwork發起Stinger項目之后的版本。相對應的Hadoop版本是1.x而非2.x。


Map階段的優化(Map phase)

Map階段的優化,主要是確定合適的Map數。那么首先要了解Map數的計算公式:

num_Map_tasks = max[${Mapred.min.split.size},min(${dfs.block.size}, ${Mapred.max.split.size})]
  • Mapred.min.split.size指的是數據的最小分割單元大小。
  • Mapred.max.split.size指的是數據的最大分割單元大小。
  • dfs.block.size指的是HDFS設置的數據塊大小。

一般來說dfs.block.size這個值是一個已經指定好的值,而且這個參數Hive是識別不到的:

Hive> set dfs.block.size; dfs.block.size is undefined

所以實際上只有Mapred.min.split.size和Mapred.max.split.size這兩個參數(本節內容后面就以min和max指代這兩個參數)來決定Map數量。在Hive中min的默認值是1B,max的默認值是256MB:

Hive> set Mapred.min.split。size; Mapred.min.split.size=1 Hive> set Mapred.max.split。size; Mapred.max.split.size=256000000

所以如果不做修改的話,就是1個Map task處理256MB數據,我們就以調整max為主。通過調整max可以起到調整Map數的作用,減小max可以增加Map數,增大max可以減少Map數。需要提醒的是,直接調整Mapred.Map.tasks這個參數是沒有效果的。

調整大小的時機根據查詢的不同而不同,總的來講可以通過觀察Map task的完成時間來確定是否需要增加Map資源。如果Map task的完成時間都是接近1分鐘,甚至幾分鐘了,那么往往增加Map數量,使得每個Map task處理的數據量減少,能夠讓Map task更快完成;而如果Map task的運行時間已經很少了,比如10-20秒,這個時候增加Map不太可能讓Map task更快完成,反而可能因為Map需要的初始化時間反而讓Job總體速度變慢,這個時候反而需要考慮是否可以把Map的數量減少,這樣可以節省更多資源給其他Job。

Reduce階段的優化(Reduce phase)

這里說的Reduce階段,是指前面流程圖中的Reduce phase(實際的Reduce計算)而非圖中整個Reduce task。Reduce階段優化的主要工作也是選擇合適的Reduce task數量,跟上面的Map優化類似。

與Map優化不同的是,Reduce優化時,可以直接設置Mapred。Reduce。tasks參數從而直接指定Reduce的個數。當然直接指定Reduce個數雖然比較方便,但是不利于自動擴展。Reduce數的設置雖然相較Map更靈活,但是也可以像Map一樣設定一個自動生成規則,這樣運行定時Job的時候就不用擔心原來設置的固定Reduce數會由于數據量的變化而不合適。

Hive估算Reduce數量的時候,使用的是下面的公式:

num_Reduce_tasks = min[${Hive.exec.Reducers.max}, (${input.size} / ${ Hive.exec.Reducers.bytes.per.Reducer})]

也就是說,根據輸入的數據量大小來決定Reduce的個數,默認Hive.exec.Reducers.bytes.per.Reducer為1G,而且Reduce個數不能超過一個上限參數值,這個參數的默認取值為999。所以我們可以調整Hive.exec.Reducers.bytes.per.Reducer來設置Reduce個數。

設置Reduce數同樣也是根據運行時間作為參考調整,并且可以根據特定的業務需求、工作負載類型總結出經驗,所以不再贅述。

Map與Reduce之間的優化(Spill, copy, Sort phase)

Map phase和Reduce phase之間主要有3道工序。首先要把Map輸出的結果進行排序后做成中間文件,其次這個中間文件就能分發到各個Reduce,最后Reduce端在執行Reduce phase之前把收集到的排序子文件合并成一個排序文件。這個部分可以調的參數挺多,但是一般都是不要調整的,不必重點關注。

Spill 與 Sort

在Spill階段,由于內存不夠,數據可能沒辦法在內存中一次性排序完成,那么就只能把局部排序的文件先保存到磁盤上,這個動作叫Spill,然后Spill出來的多個文件可以在最后進行merge。如果發生Spill,可以通過設置io.Sort.mb來增大Mapper輸出buffer的大小,避免Spill的發生。另外合并時可以通過設置io.Sort.factor來使得一次性能夠合并更多的數據。調試參數的時候,一個要看Spill的時間成本,一個要看merge的時間成本,還需要注意不要撐爆內存(io.Sort.mb是算在Map的內存里面的)。Reduce端的merge也是一樣可以用io.Sort.factor。一般情況下這兩個參數很少需要調整,除非很明確知道這個地方是瓶頸。

Copy

copy階段是把文件從Map端copy到Reduce端。默認情況下在5%的Map完成的情況下Reduce就開始啟動copy,這個有時候是很浪費資源的,因為Reduce一旦啟動就被占用,一直等到Map全部完成,收集到所有數據才可以進行后面的動作,所以我們可以等比較多的Map完成之后再啟動Reduce流程,這個比例可以通Mapred.Reduce.slowstart.completed.Maps去調整,他的默認值就是5%。如果覺得這么做會減慢Reduce端copy的進度,可以把copy過程的線程增大。tasktracker.http.threads可以決定作為server端的Map用于提供數據傳輸服務的線程,Mapred.Reduce.parallel.copies可以決定作為client端的Reduce同時從Map端拉取數據的并行度(一次同時從多少個Map拉數據),修改參數的時候這兩個注意協調一下,server端能處理client端的請求即可。

文件格式的優化

文件格式方面有兩個問題,一個是給輸入和輸出選擇合適的文件格式,另一個則是小文件問題。小文件問題在目前的Hive環境下已經得到了比較好的解決,Hive的默認配置中就可以在小文件輸入時自動把多個文件合并給1個Map處理,輸出時如果文件很小也會進行一輪單獨的合并,所以這里就不專門討論了。相關的參數可以在這里找到。

關于文件格式,Hive0.9版本有3種,textfile,sequencefile和rcfile。總體上來說,rcfile的壓縮比例和查詢時間稍好一點,所以推薦使用。

關于使用方法,可以在建表結構時可以指定格式,然后指定壓縮插入:

create table rc_file_test( col int ) stored as rcfile; set Hive.exec.compress.output = true; insert overwrite table rc_file_test select * from source_table;

另外時也可以指定輸出格式,也可以通過Hive。default。fileformat來設定輸出格式,適用于create table as select的情況:

set Hive.default.fileformat = SequenceFile; set Hive.exec.compress.output = true; /*對于sequencefile,有record和block兩種壓縮方式可選,block壓縮比更高*/ set Mapred.output.compression.type = BLOCK; create table seq_file_test as select * from source_table;

上面的文件格式轉換,其實是由Hive完成的(也就是插入動作)。但是也可以由外部直接導入純文本(可以按照這里的做法預先壓縮),或者是由MapReduce Job生成的數據。

值得注意的是,Hive讀取sequencefile的時候,是把key忽略的,也就是直接讀value并且按照指定分隔符分隔字段。但是如果Hive的數據來源是從mr生成的,那么寫sequencefile的時候,key和value都是有意義的,key不能被忽略,而是應該當成第一個字段。為了解決這種不匹配的情況,有兩種辦法。一種是要求凡是結果會給Hive用的mr Job輸出value的時候帶上key。但是這樣的話對于開發是一個負擔,讀寫數據的時候都要注意這個情況。所以更好的方法是第二種,也就是把這個源自于Hive的問題交給Hive解決,寫一個InputFormat包裝一下,把value輸出加上key即可。以下是核心代碼,修改了RecordReader的next方法:

public synchronized boolean next(K key, V value) throws IOException {Text tKey = (Text) key;Text tValue = (Text) value;if (!super.next(innerKey, innerValue)) return false;Text inner_key = (Text) innerKey; //在構造函數中用createKey()生成Text inner_value = (Text) innerValue; //在構造函數中用createValue()生成tKey.set(inner_key);tValue.set(inner_key.toString() + '\t' + inner_value.toString()); // 分隔符注意自己定義return true; }

Job整體優化

有一些問題必須從Job的整體角度去觀察。這里討論幾個問題:Job執行模式(本地執行v.s.分布式執行)、JVM重用、索引、Join算法、數據傾斜。

Job執行模式

Hadoop的Map Reduce Job可以有3種模式執行,即本地模式,偽分布式,還有真正的分布式。本地模式和偽分布式都是在最初學習Hadoop的時候往往被說成是做單機開發的時候用到。但是實際上對于處理數據量非常小的Job,直接啟動分布式Job會消耗大量資源,而真正執行計算的時間反而非常少。這個時候就應該使用本地模式執行mr Job,這樣執行的時候不會啟動分布式Job,執行速度就會快很多。比如一般來說啟動分布式Job,無論多小的數據量,執行時間一般不會少于20s,而使用本地mr模式,10秒左右就能出結果。

設置執行模式的主要參數有三個,一個是Hive.exec.mode.local.auto,把他設為true就能夠自動開啟local mr模式。但是這還不足以啟動local mr,輸入的文件數量和數據量大小必須要控制,這兩個參數分別為Hive.exec.mode.local.auto.tasks.max和Hive.exec.mode.local.auto.inputbytes.max,默認值分別為4和128MB,即默認情況下,Map處理的文件數不超過4個并且總大小小于128MB就啟用local mr模式。

JVM重用

正常情況下,MapReduce啟動的JVM在完成一個task之后就退出了,但是如果任務花費時間很短,又要多次啟動JVM的情況下(比如對很大數據量進行計數操作),JVM的啟動時間就會變成一個比較大的overhead。在這種情況下,可以使用jvm重用的參數:

set Mapred.Job.reuse.jvm.num.tasks = 5;

他的作用是讓一個jvm運行多次任務之后再退出。這樣一來也能節約不少JVM啟動時間。

索引

總體上來說,Hive的索引目前還是一個不太適合使用的東西,這里只是考慮到敘述完整性,對其進行基本的介紹。

Hive中的索引架構開放了一個接口,允許你根據這個接口去實現自己的索引。目前Hive自己有一個參考的索引實現(CompactIndex),后來在0.8版本中又加入位圖索引。這里就講講CompactIndex。

CompactIndex的實現原理類似一個lookup table,而非傳統數據庫中的B樹。如果你對table A的col1做了索引,索引文件本身就是一個table,這個table會有3列,分別是col1的枚舉值,每個值對應的數據文件位置,以及在這個文件位置中的偏移量。通過這種方式,可以減少你查詢的數據量(偏移量可以告訴你從哪個位置開始找,自然只需要定位到相應的block),起到減少資源消耗的作用。但是就其性能來說,并沒有很大的改善,很可能還不如構建索引需要花的時間。所以在集群資源充足的情況下,沒有太大必要考慮索引。

CompactIndex的還有一個缺點就是使用起來不友好,索引建完之后,使用之前還需要根據查詢條件做一個同樣剪裁才能使用,索引的內部結構完全暴露,而且還要花費額外的時間。具體看看下面的使用方法就了解了:

/*在index_test_table表的id字段上創建索引*/ create index idx on table index_test_table(id) as 'org.apache.Hadoop.Hive.ql.index.compact.CompactIndexHandler' with deferred rebuild; alter index idx on index_test_table rebuild;/*索引的剪裁。找到上面建的索引表,根據你最終要用的查詢條件剪裁一下。*/ /*如果你想跟RDBMS一樣建完索引就用,那是不行的,會直接報錯,這也是其麻煩的地方*/ create table my_index as select _bucketname, `_offsets` from default__index_test_table_idx__ where id = 10;/*現在可以用索引了,注意最終查詢條件跟上面的剪裁條件一致*/ set Hive.index.compact.file = /user/Hive/warehouse/my_index; set Hive.input.format = org.apache.Hadoop.Hive.ql.index.compact.HiveCompactIndexInputFormat; select count(*) from index_test_table where id = 10;

Join算法

處理分布式join,一般有兩種方法:

  • replication join:把其中一個表復制到所有節點,這樣另一個表在每個節點上面的分片就可以跟這個完整的表join了;
  • repartition join:把兩份數據按照join key進行hash重分布,讓每個節點處理hash值相同的join key數據,也就是做局部的join。

這兩種方式在M/R Job中分別對應了Map side join和Reduce side join。在一些MPP DB中,數據可以按照某列字段預先進行hash分布,這樣在跟這個表以這個字段為join key進行join的時候,該表肯定不需要做數據重分布了,這種功能是以HDFS作為底層文件系統的Hive所沒有的。

在默認情況下,Hive的join策略是進行Reduce side join。當兩個表中有一個是小表的時候,就可以考慮用Map join了,因為小表復制的代價會好過大表Shuffle的代價。使用Map join的配置方法有兩種,一種直接在sql中寫hint,語法是/*+MapJOIN (tbl)*/,其中tbl就是你想要做replication的表。另一種方法是設置Hive.auto.convert.join = true,這樣Hive會自動判斷當前的join操作是否合適做Map join,主要是找join的兩個表中有沒有小表。至于多大的表算小表,則是由Hive.smalltable.filesize決定,默認25MB。

但是有的時候,沒有一個表足夠小到能夠放進內存,但是還是想用Map join怎么辦?這個時候就要用到bucket Map join。其方法是兩個join表在join key上都做hash bucket,并且把你打算復制的那個(相對)小表的bucket數設置為大表的倍數。這樣數據就會按照join key做hash bucket。小表依然復制到所有節點,Map join的時候,小表的每一組bucket加載成hashtable,與對應的一個大表bucket做局部join,這樣每次只需要加載部分hashtable就可以了。

然后在兩個表的join key都具有唯一性的時候(也就是可做主鍵),還可以進一步做Sort merge bucket Map join。做法還是兩邊要做hash bucket,而且每個bucket內部要進行排序。這樣一來當兩邊bucket要做局部join的時候,只需要用類似merge Sort算法中的merge操作一樣把兩個bucket順序遍歷一遍即可完成,這樣甚至都不用把一個bucket完整的加載成hashtable,這對性能的提升會有很大幫助。

然后這里以一個完整的實驗說明這幾種join算法如何操作。

首先建表要帶上bucket:

create table Map_join_test(id int) clustered by (id) Sorted by (id) into 32 buckets stored as textfile;

然后插入我們準備好的800萬行數據,注意要強制劃分成bucket(也就是用Reduce劃分hash值相同的數據到相同的文件):

set Hive.enforce.bucketing = true; insert overwrite table Map_join_test select * from Map_join_source_data;

這樣這個表就有了800萬id值(且里面沒有重復值,所以可以做Sort merge),占用80MB左右。

接下來我們就可以一一嘗試Map join的算法了。首先是普通的Map join:

select /*+Mapjoin(a) */count(*) from Map_join_test a join Map_join_test b on a.id = b.id;

然后就會看到分發hash table的過程:

2013-08-31 09:08:43 Starting to launch local task to process Map join; maximum memory = 1004929024 2013-08-31 09:08:45 Processing rows: 200000 Hashtable size: 199999 Memory usage: 38823016 rate: 0.039 2013-08-31 09:08:46 Processing rows: 300000 Hashtable size: 299999 Memory usage: 56166968 rate: 0.056 …… 2013-08-31 09:12:39 Processing rows: 4900000 Hashtable size: 4899999 Memory usage: 896968104 rate: 0.893 2013-08-31 09:12:47 Processing rows: 5000000 Hashtable size: 4999999 Memory usage: 922733048 rate: 0.918 Execution failed with exit status: 2 Obtaining error informationTask failed! Task ID:Stage-4

不幸的是,居然內存不夠了,直接做Map join失敗了。但是80MB的大小為何用1G的heap size都放不下?觀察整個過程就會發現,平均一條記錄需要用到200字節的存儲空間,這個overhead太大了,對于Map join的小表size一定要好好評估,如果有幾十萬記錄數就要小心了。雖然不太清楚其中的構造原理,但是在互聯網上也能找到其他的例證,比如這里和這里,平均一行500字節左右。這個明顯比一般的表一行占用的數據量要大。不過Hive也在做這方面的改進,爭取縮小hash table,比如Hive-6430。

所以接下來我們就用bucket Map join,之前分的bucket就派上用處了。只需要在上述sql的前面加上如下的設置:

set Hive。optimize。bucketMapjoin = true;

然后還是會看到hash table分發:

2013-08-31 09:20:39 Starting to launch local task to process Map join; maximum memory = 1004929024 2013-08-31 09:20:41 Processing rows: 200000 Hashtable size: 199999 Memory usage: 38844832 rate: 0.039 2013-08-31 09:20:42 Processing rows: 275567 Hashtable size: 275567 Memory usage: 51873632 rate: 0.052 2013-08-31 09:20:42 Dump the hashtable into file: file:/tmp/Hadoop/Hive_2013-08-31_21-20-37_444_1135806892100127714/-local-10003/HashTable-Stage-1/MapJoin-a-10-000000_0。hashtable 2013-08-31 09:20:46 Upload 1 File to: file:/tmp/Hadoop/Hive_2013-08-31_21-20-37_444_1135806892100127714/-local-10003/HashTable-Stage-1/MapJoin-a-10-000000_0。hashtable File size: 11022975 2013-08-31 09:20:47 Processing rows: 300000 Hashtable size: 24432 Memory usage: 8470976 rate: 0.008 2013-08-31 09:20:47 Processing rows: 400000 Hashtable size: 124432 Memory usage: 25368080 rate: 0.025 2013-08-31 09:20:48 Processing rows: 500000 Hashtable size: 224432 Memory usage: 42968080 rate: 0.043 2013-08-31 09:20:49 Processing rows: 551527 Hashtable size: 275960 Memory usage: 52022488 rate: 0.052 2013-08-31 09:20:49 Dump the hashtable into file: file:/tmp/Hadoop/Hive_2013-08-31_21-20-37_444_1135806892100127714/-local-10003/HashTable-Stage-1/MapJoin-a-10-000001_0。hashtable ……

這次就會看到每次構建完一個hash table(也就是所對應的對應一個bucket),會把這個hash table寫入文件,重新構建新的hash table。這樣一來由于每個hash table的量比較小,也就不會有內存不足的問題,整個sql也能成功運行。不過光光是這個復制動作就要花去3分半的時間,所以如果整個Job本來就花不了多少時間的,那這個時間就不可小視。? ??

最后我們試試Sort merge bucket Map join,在bucket Map join的基礎上加上下面的設置即可:

set Hive.optimize.bucketMapjoin.Sortedmerge = true; set Hive.input.format = org.apache.Hadoop.Hive.ql.io.BucketizedHiveInputFormat;

Sort merge bucket Map join是不會產生hash table復制的步驟的,直接開始做實際Map端join操作了,數據在join的時候邊做邊讀。跳過復制的步驟,外加join算法的改進,使得Sort merge bucket Map join的效率要明顯好于bucket Map join。

關于join的算法雖然有這么些選擇,但是個人覺得,對于日常使用,掌握默認的Reduce join和普通的(無bucket)Map join已經能解決大多數問題。如果小表不能完全放內存,但是小表相對大表的size量級差別也非常大的時候也可以試試bucket Map join,不過其hash table分發的過程會浪費不少時間,需要評估下是否能夠比Reduce join更高效。而Sort merge bucket Map join雖然性能不錯,但是把數據做成bucket本身也需要時間,另外其發動條件比較特殊,就是兩邊join key必須都唯一(很多介紹資料中都不提這一點。強調下必須都是唯一,哪怕只有一個表不唯一,出來的結果也是錯的。當然,其實這點完全可以根據其算法原理推敲出來)。這樣的場景相對比較少見,“用戶基本表 join 用戶擴展表”以及“用戶今天的數據快照 join 用戶昨天的數據快照”這類場景可能比較合適。

這里順便說個題外話,在數據倉庫中,小表往往是維度表,而小表Map join這件事情其實用udf代替還會更快,因為不用單獨啟動一輪Job,所以這也是一種可選方案。當然前提條件是維度表是固定的自然屬性(比如日期),只增加不修改(比如網站的頁面編號)的情況也可以考慮。如果維度有更新,要做緩慢變化維的,當然還是維表好維護。至于維表原本的一個主要用途OLAP,以Hive目前的性能是沒法實現的,也就不需要多慮了。

數據傾斜

所謂數據傾斜,說的是由于數據分布不均勻,個別值集中占據大部分數據量,加上Hadoop的計算模式,導致計算資源不均勻引起性能下降。下圖就是一個例子:


還是拿網站的訪問日志說事吧。假設網站訪問日志中會記錄用戶的user_id,并且對于注冊用戶使用其用戶表的user_id,對于非注冊用戶使用一個user_id=0代表。那么鑒于大多數用戶是非注冊用戶(只看不寫),所以user_id=0占據了絕大多數。而如果進行計算的時候如果以user_id作為group by的維度或者是join key,那么個別Reduce會收到比其他Reduce多得多的數據——因為它要接收所有user_id=0的記錄進行處理,使得其處理效果會非常差,其他Reduce都跑完很久了它還在運行。

傾斜分成group by造成的傾斜和join造成的傾斜,需要分開看。

group by造成的傾斜有兩個參數可以解決,一個是Hive.Map.aggr,默認值已經為true,意思是會做Map端的combiner。所以如果你的group by查詢只是做count(*)的話,其實是看不出傾斜效果的,但是如果你做的是count(distinct),那么還是會看出一點傾斜效果。另一個參數是Hive.groupby. skewindata。這個參數的意思是做Reduce操作的時候,拿到的key并不是所有相同值給同一個Reduce,而是隨機分發,然后Reduce做聚合,做完之后再做一輪MR,拿前面聚合過的數據再算結果。所以這個參數其實跟Hive.Map.aggr做的是類似的事情,只是拿到Reduce端來做,而且要額外啟動一輪Job,所以其實不怎么推薦用,效果不明顯。

如果說要改寫SQL來優化的話,可以按照下面這么做:

/*改寫前*/ select a, count(distinct b) as c from tbl group by a; /*改寫后*/ select a, count(*) as c from (select distinct a, b from tbl) group by a;

join造成的傾斜,就比如上面描述的網站訪問日志和用戶表兩個表join:

select a.* from logs a join users b on a。user_id = b.user_id;

Hive給出的解決方案叫skew join,其原理把這種user_id = 0的特殊值先不在Reduce端計算掉,而是先寫入hdfs,然后啟動一輪Map join專門做這個特殊值的計算,期望能提高計算這部分值的處理速度。當然你要告訴Hive這個join是個skew join,即:

set Hive.optimize.skewjoin = true;

還有要告訴Hive如何判斷特殊值,根據Hive.skewjoin.key設置的數量Hive可以知道,比如默認值是100000,那么超過100000條記錄的值就是特殊值。

skew join的流程可以用下圖描述:


另外對于特殊值的處理往往跟業務有關系,所以也可以從業務角度重寫sql解決。比如前面這種傾斜join,可以把特殊值隔離開來(從業務角度說,users表應該不存在user_id = 0的情況,但是這里還是假設有這個值,使得這個寫法更加具有通用性):

select a.* from ( select a.* from (select * from logs where user_id = 0) a join (select * from users where user_id = 0) b on a。user_id = b。user_id union all select a.* from logs a join users b on a。user_id <> 0 and a。user_id = b.user_id )t;

數據傾斜不僅僅是Hive的問題,其實是share nothing架構下必然會碰到的數據分布問題,對此學界也有專門的研究,比如skewtune。

SQL整體優化

前面對于單個Job如何做優化已經做過詳細討論,但是Hive查詢會生成多個Job,針對多個Job,有什么地方需要優化?

Job間并行

首先,在Hive生成的多個Job中,在有些情況下Job之間是可以并行的,典型的就是子查詢。當需要執行多個子查詢union all或者join操作的時候,Job間并行就可以使用了。比如下面的代碼就是一個可以并行的場景示意:

select * from (select count(*) from logs where log_date = 20130801 and item_id = 1union all select count(*) from logs where log_date = 20130802 and item_id = 2union all select count(*) from logs where log_date = 20130803 and item_id = 3 )t

設置Job間并行的參數是Hive.exec.parallel,將其設為true即可。默認的并行度為8,也就是最多允許sql中8個Job并行。如果想要更高的并行度,可以通過Hive.exec.parallel. thread.number參數進行設置,但要避免設置過大而占用過多資源。

減少Job數

另外在實際開發過程中也發現,一些實現思路會導致生成多余的Job而顯得不夠高效。比如這個需求:查詢某網站日志中訪問過頁面a和頁面b的用戶數量。低效的思路是面向明細的,先取出看過頁面a的用戶,再取出看過頁面b的用戶,然后取交集,代碼如下:

select count(*) from (select distinct user_id from logs where page_name = ‘a’) a join (select distinct user_id from logs where blog_owner = ‘b’) b on a.user_id = b.user_id;

這樣一來,就要產生2個求子查詢的Job,一個用于關聯的Job,還有一個計數的Job,一共有4個Job。

但是我們直接用面向統計的方法去計算的話(也就是用group by替代join),則會更加符合M/R的模式,而且生成了一個完全不帶子查詢的sql,只需要用一個Job就能跑完:

select count(*) from logs group by user_id having (count(case when page_name = ‘a’ then 1 end) > 0and count(case when page_name = ‘b’ then 1 end) > 0)

第一種查詢方法符合思考問題的直覺,是工程師和分析師在實際查數據中最先想到的寫法,但是如果在目前Hive的query planner不是那么智能的情況下,想要更加快速的跑出結果,懂一點工具的內部機理也是必須的。

?

總結

以上是生活随笔為你收集整理的hivesql优化的深入解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品白浆 | 在线观看电影av | 国产精品九九热 | 成人免费在线视频观看 | 亚洲精品中文在线观看 | 天堂av在线网站 | 欧美激情h | 97在线免费视频 | 久久国产高清视频 | 98超碰在线观看 | 日本久久电影网 | 一本之道乱码区 | 波多野结衣综合网 | 国产精品12 | 欧美日韩精品免费观看视频 | 日韩三级.com | 国产婷婷在线观看 | 国产色在线视频 | 中文在线| 国产亚洲精品久久19p | 亚洲伦理中文字幕 | 久久在视频 | 四虎成人精品永久免费av九九 | 国产日韩欧美在线观看 | 精品国产综合区久久久久久 | 毛片一级免费一级 | 久久久国产影视 | 国产18精品乱码免费看 | 久久婷婷丁香 | 91中文在线观看 | 91视频最新网址 | 天天干夜夜夜操天 | 插久久| 天天摸天天弄 | 91中文视频 | 亚洲国产精品va在线看 | 久久久久久久久久久久久久免费看 | 日本高清免费中文字幕 | 日日夜夜骑 | 午夜精品一区二区三区在线观看 | 99久久精品午夜一区二区小说 | 日韩电影一区二区在线观看 | 中文字幕资源在线观看 | 国语精品久久 | 久久伊人色综合 | 久 久久影院 | 亚洲精品国产日韩 | 视频在线观看国产 | 国产精品久久婷婷六月丁香 | 亚洲九九爱| 亚洲综合成人专区片 | 国产999在线观看 | 日韩欧美国产免费播放 | 日韩一级电影网站 | 五月天久久| 国产精品免费一区二区 | 亚洲精品欧洲精品 | 黄av免费在线观看 | 国产精品午夜在线观看 | 一区精品在线 | 久久久婷 | 欧美黄色高清 | 色老板在线 | 免费韩国av| 国产高清在线观看av | 国产成在线观看免费视频 | 日韩av一卡二卡三卡 | 成人av在线一区二区 | 国产在线观看你懂得 | 高清不卡一区二区三区 | 国产午夜精品一区二区三区四区 | 免费看成人片 | 亚洲精品视频免费在线 | 黄色国产成人 | 国产黄色美女 | 天天曰天天爽 | 国产精品网在线观看 | 91私密保健 | 免费视频一区 | 午夜精品影院 | 国产精品久久 | 精品人人人人 | 99久久精品网 | 一区二区三区免费在线观看视频 | av中文在线影视 | 在线观看免费观看在线91 | 亚洲国产精品一区二区尤物区 | 国产成人一区二区三区影院在线 | 国产精品99久久久久人中文网介绍 | 亚洲精品午夜国产va久久成人 | 深夜免费网站 | av免费试看 | 成人中文字幕+乱码+中文字幕 | 天天操操 | 在线观看视频一区二区三区 | 99精品视频在线观看视频 | av在线精品 | 97视频免费| 丰满少妇一级片 | 欧美一级裸体视频 | 狠狠综合久久av | 91pony九色丨交换 | 国产精品女 | www.夜夜夜 | 色橹橹欧美在线观看视频高清 | 亚洲三级在线播放 | 国产精选在线 | 九九久久久 | 国产一区二区成人 | 91爱爱免费观看 | 国产亚洲精品无 | 人人干人人上 | 一区二区视频网站 | 九九免费在线观看视频 | 婷婷免费在线视频 | 欧美日韩中文视频 | 日韩在线色视频 | 久草久草视频 | av超碰在线 | 日韩在线第一 | 国产视频999| 国产传媒一区在线 | 国产91精品一区二区麻豆亚洲 | 黄色不卡av | 日韩专区 在线 | 国产免费视频一区二区裸体 | 国产原厂视频在线观看 | 精品在线视频一区二区三区 | 一区二区伦理电影 | 婷婷久久一区 | www.狠狠操.com| 欧美va日韩va | 韩国一区视频 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 美女av免费| 成人永久在线 | av资源网在线播放 | 久久久久久久久免费视频 | 中国一区二区视频 | 免费亚洲婷婷 | 色wwww| 99精品视频在线免费观看 | 国产在线一线 | www.天天成人国产电影 | 久久av观看| 黄色片毛片 | 免费精品视频 | 欧美色图一区 | 亚洲 欧洲 国产 精品 | av电影在线观看完整版一区二区 | 91久久精品一区二区二区 | av免费在线观 | 国产一区二区免费在线观看 | 国产精品视频观看 | 奇米影视四色8888 | 天天艹| 国产一区在线免费观看 | 精品国产一区二区三区久久久 | 97视频免费在线看 | 欧美精品在线一区二区 | 免费久久网 | 24小时日本在线www免费的 | 免费av视屏 | 日韩大片在线观看 | 国产精品一区二区三区观看 | 99热手机在线观看 | 二区三区在线观看 | 国产精品一区二区三区观看 | 91视频久久久久久 | 天天舔夜夜操 | 日日日爽爽爽 | 97色综合| 精品麻豆入口免费 | 日韩理论电影在线 | 国产在线观看免 | 中文字幕91视频 | 在线观看免费成人av | 日韩精品免费一区二区 | 国产精品一区二区在线 | 五月婷婷在线观看 | 天天射网站 | 人人舔人人爱 | av在线不卡观看 | 中文字幕久久久精品 | 五月天亚洲精品 | 女女av在线 | 精品久久久久久久久久久久久久久久久久 | 婷婷激情在线 | 丁香av | 亚洲不卡123| 亚洲激情在线视频 | 9999精品| 超碰公开在线 | av手机版 | 毛片永久新网址首页 | 国产精品美女网站 | 日韩免费三区 | 国产丝袜美腿在线 | 四虎在线免费观看 | 精品五月天 | 亚洲一区美女视频在线观看免费 | 最新av网址在线 | 国产理论一区二区三区 | 国产麻豆视频在线观看 | 亚洲午夜久久久久久久久 | 91精品国产91p65 | 免费看片日韩 | 视频一区久久 | 亚洲精品99久久久久中文字幕 | 亚洲美女精品区人人人人 | 欧美视屏一区二区 | 欧美日韩激情视频8区 | 久久九九精品 | 久久久久久久久久久久影院 | 亚洲国产精品免费 | 国产美女精品视频 | 国产精品婷婷 | 干干日日 | 97色婷婷成人综合在线观看 | 久久高清片| 一区二区中文字幕在线播放 | 午夜视频一区二区 | 国产日韩欧美在线播放 | 久久免费国产 | 久久久久国产精品视频 | 夜夜夜夜爽 | 亚洲专区免费观看 | 国产午夜精品久久久久久久久久 | 四虎永久国产精品 | 亚洲精品久久激情国产片 | 国产精品com | 欧美日韩一级在线 | 国产18精品乱码免费看 | 久久人人爽爽人人爽人人片av | 视频91在线 | 99在线精品视频在线观看 | 国产一区免费看 | 日韩高清黄色 | 中文字幕中文字幕在线中文字幕三区 | 国产一在线精品一区在线观看 | 成人av网址大全 | 国产精品免费成人 | 天天爱天天操天天爽 | 欧美调教网站 | 欧美欧美 | 中文字幕在线影院 | 夜夜爽88888免费视频4848 | 四虎免费在线观看 | 97视频在线观看成人 | 97人人模人人爽人人喊网 | 丁香五香天综合情 | 99热最新地址 | 在线观看激情av | 日韩电影在线观看中文字幕 | 国产精品久久久久久久久久了 | 涩涩资源网 | 五月婷婷六月丁香在线观看 | 国产精品成人av电影 | 亚洲电影自拍 | 99久高清在线观看视频99精品热在线观看视频 | 欧美成人69av| 久久www免费视频 | 91在线小视频 | 天天干,天天射,天天操,天天摸 | 天天干天天射天天插 | 波多野结衣视频一区二区三区 | av7777777| 91精品啪在线观看国产81旧版 | 9在线观看免费高清完整版在线观看明 | 久久免费观看少妇a级毛片 久久久久成人免费 | 毛片随便看 | 色婷婷国产在线 | 在线免费观看国产精品 | 国产一级片不卡 | 国产成人精品999在线观看 | 国产精品福利小视频 | 日韩com| 欧美久久久影院 | 中文字幕国产 | 亚洲国产精品激情在线观看 | 999久久久久久久久6666 | 在线观看91久久久久久 | 国产在线专区 | 中文亚洲欧美日韩 | av中文字幕免费在线观看 | 97在线观看视频 | 成人av午夜 | 久久久久久久久久久久国产精品 | 久久综合中文色婷婷 | 337p日本大胆噜噜噜噜 | 久久免费高清 | 婷婷色在线播放 | 欧美另类人妖 | 免费在线日韩 | 国产第一二区 | 丁香电影小说免费视频观看 | 成人av一级片 | 亚洲精品免费观看视频 | 天天综合天天做 | 免费一级片在线观看 | 久久精品中文字幕少妇 | 国产三级视频在线 | 亚洲美女免费精品视频在线观看 | 黄色一级在线观看 | 婷婷伊人网 | 视频国产区 | 96久久精品| 91成人短视频在线观看 | av成人免费观看 | 国产精品久久久区三区天天噜 | 玖玖在线免费视频 | 成人sm另类专区 | 九九激情视频 | 欧美成人精品欧美一级乱黄 | 91精品国自产在线偷拍蜜桃 | 中文av在线免费观看 | 国产精品久久9 | 亚洲一区二区视频在线 | 欧美日韩中文在线观看 | 狠狠色综合网站久久久久久久 | 99精品国产99久久久久久福利 | 玖玖玖精品 | 久久精品成人 | www.日本色| 99色视频| 欧美激情精品久久久久 | 欧美高清成人 | www.xxxx变态.com| 天天综合导航 | 国产精品久久久久9999吃药 | 摸bbb搡bbb搡bbbb| a在线观看视频 | a天堂最新版中文在线地址 久久99久久精品国产 | 91 在线视频| 国产精品免费一区二区三区在线观看 | 欧美亚洲国产一卡 | 午夜日b视频 | 亚洲1区在线 | 美女性爽视频国产免费app | 日日躁天天躁 | 日韩亚洲在线 | 久久黄色小说 | 日本一区二区三区免费观看 | 天天天干| 精品久久91 | 天天做天天射 | 国产va精品免费观看 | 激情丁香综合五月 | 亚洲人成人天堂h久久 | 国产精品久久久久久久久免费看 | 日韩av不卡在线 | 麻豆视频在线免费 | 成人免费视频免费观看 | 国产精品国内免费一区二区三区 | 亚洲国内精品视频 | 免费成人av在线看 | 国产中文字幕三区 | 久久精品毛片基地 | 99视屏 | 精品久久久久久久久久久久久久久久 | 国产91精品看黄网站 | 97电影院网 | 日日弄天天弄美女bbbb | 日韩av一卡二卡三卡 | 久久69精品久久久久久久电影好 | 久久久鲁| 亚洲 欧洲 国产 精品 | 99麻豆视频 | 久久久久久久久久影视 | 色婷婷丁香 | 久久99国产精品自在自在app | 婷婷激情欧美 | 亚洲成人资源在线 | 免费观看av网站 | 涩涩网站在线 | 黄色av成人在线 | 日韩va欧美va亚洲va久久 | 黄色软件在线观看视频 | 久久久久久久久黄色 | 欧美日韩高清在线一区 | 中文有码在线视频 | av中文字幕在线播放 | 日韩成人精品在线观看 | 国产免码va在线观看免费 | 人人干人人艹 | 国产在线观看91 | 公开超碰在线 | 国产99久久精品一区二区永久免费 | 一区二区三区www | 97精品国产97久久久久久 | 久久成人午夜 | 国产在线欧美 | 一区二区三区在线免费观看视频 | 欧美日韩高清国产 | 成人欧美一区二区三区在线观看 | 久久这里只有精品视频99 | 国产香蕉视频 | 日韩一区二区三 | 国产欧美日韩精品一区二区免费 | 国产自偷自拍 | 日韩电影一区二区三区 | 久久理论电影网 | 伊人婷婷网 | 精品自拍sae8—视频 | 伊人官网| 国产精品综合久久久久久 | 日韩欧美视频在线观看免费 | 亚洲激情在线 | 欧美一级电影在线观看 | 国产精品永久免费在线 | 最近日本韩国中文字幕 | 日韩精品久久久久久久电影竹菊 | 亚洲影院天堂 | 国产精品一区二区免费视频 | 91亚洲精品久久久蜜桃借种 | 色婷婷综合久久久中文字幕 | 国内精品久久久久影院男同志 | 久久99免费视频 | 国产精品无av码在线观看 | 日韩av网页| 精品一区二区免费 | 国产精品一区二区av日韩在线 | 免费a视频在线观看 | 91久久爱热色涩涩 | 91插插插网站 | 亚洲国产精品第一区二区 | 91视频免费网站 | 日韩高清成人 | 日韩视频在线观看免费 | 久久免费av电影 | 国产理伦在线 | 一区二区三区在线影院 | 日日干影院| 操一草| 日本精品中文字幕在线观看 | 国产原创av片 | 91精品久久久久久久久久久久久 | 久久再线视频 | 人人射人人 | 最近免费中文字幕mv在线视频3 | 久久av一区二区三区亚洲 | 免费观看www7722午夜电影 | 国产99久久久国产精品成人免费 | 日韩欧美视频在线免费观看 | 色国产精品| 蜜臀aⅴ国产精品久久久国产 | 日韩有码在线观看视频 | 国产一区视频在线播放 | 欧美人人爱 | 人人天天夜夜 | 欧美日韩视频免费 | 日产乱码一二三区别免费 | 欧美一级片在线免费观看 | 国产第一二区 | 国产日韩中文在线 | 日韩国产高清在线 | 国产精品久久一区二区三区, | 青青视频一区 | 欧美久久久久久久久中文字幕 | 97人人模人人爽人人喊中文字 | 久久精品中文字幕一区二区三区 | 伊人精品在线 | 在线免费高清视频 | 日日天天av | 伊人国产视频 | 国产精品视频永久免费播放 | 91中文字幕在线播放 | 日韩免费不卡av | 亚洲成人免费 | 国产一区二区视频在线 | 色综合久久久网 | 另类老妇性bbwbbw高清 | 99精品国产一区二区三区不卡 | 天天干夜夜爱 | 99国产在线| 亚洲精品小区久久久久久 | 精品在线观看一区二区三区 | 久久久精品视频网站 | 国产资源在线视频 | 伊人天天狠天天添日日拍 | 黄色国产成人 | 欧美激情精品 | 精品一区精品二区 | 欧美一二三视频 | 免费色视频网址 | 国产精品久久电影观看 | 国产亚洲免费观看 | www.亚洲精品在线 | 日韩黄在线观看 | 久久人人97超碰国产公开结果 | 深爱婷婷网 | 96精品高清视频在线观看软件特色 | 成片视频在线观看 | 日韩久久精品一区二区三区 | 一区二区三区高清不卡 | 97电影在线看视频 | 精品在线看 | 亚洲欧美观看 | 日韩影视在线观看 | 在线国产视频观看 | 成人免费网站视频 | 国产伦精品一区二区三区无广告 | 国产精品乱码久久久久久1区2区 | 日韩精品一区二区久久 | 久草视频免费在线播放 | 成人影片在线播放 | 久久这里有 | 伊人中文在线 | 成人黄色av网站 | 成人小电影在线看 | 91久久久久久国产精品 | 日韩欧美网址 | 日日日操操 | 久久久久综合网 | 欧美一级片在线 | 国产高清免费视频 | 91久久人澡人人添人人爽欧美 | 九热精品 | 毛片永久免费 | 在线视频一区观看 | 国产精品美女久久久网av | 五月婷婷爱 | av在线播放国产 | 亚洲国产偷 | 91自拍视频在线 | 久久精品—区二区三区 | 免费高清在线观看成人 | 最近高清中文在线字幕在线观看 | 日韩在线观看三区 | 国产一级电影网 | 国产高清精 | 天天干中文字幕 | 国产精品欧美久久 | av国产在线观看 | 麻豆免费视频 | 婷婷色网址 | 九九久久在线看 | av一级在线| 91福利在线导航 | 国产精品视频最多的网站 | 九九热在线播放 | 在线免费观看麻豆 | 激情五月婷婷综合网 | 成年人黄色免费视频 | 成年人免费在线观看 | 日本性生活一级片 | 激情九九 | 91传媒激情理伦片 | 99热在线精品观看 | 日韩午夜精品福利 | 国产美女视频 | 国产在线超碰 | 国产成人精品久久久久蜜臀 | 亚洲天天看 | 综合色中色 | 五月婷婷一区 | 日韩欧美在线高清 | 五月婷婷综合在线观看 | 成人在线免费观看网站 | 国产婷婷一区二区 | 欧美亚洲专区 | 亚洲精品国产综合99久久夜夜嗨 | 在线观看av国产 | a精品视频| 久久黄色影院 | 亚洲国产精品va在线看黑人动漫 | 少妇18xxxx性xxxx片 | 91精品久久久久久久久久入口 | 国产一区自拍视频 | 91在线日本| 中文字幕在线观看视频免费 | 欧美亚洲专区 | 九九精品久久久 | 欧美精品中文字幕亚洲专区 | 亚洲激情网站免费观看 | 国产91国语对白在线 | 久久99热精品这里久久精品 | 亚洲欧洲国产日韩精品 | 日韩欧美在线观看一区二区 | 亚洲精品在线视频 | 久久999久久 | 色www精品视频在线观看 | 波多野结衣视频一区二区三区 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 亚洲成人午夜av | 国产不卡在线 | 激情综合五月 | 亚洲免费在线播放视频 | 狠狠干免费| 久久精品香蕉 | 大片网站久久 | www色综合 | 国产精品区二区三区日本 | 国产福利91精品一区 | 黄色美女免费网站 | 在线观看视频免费播放 | 久久久久免费精品国产 | 九九热免费视频在线观看 | 国产精品亚洲片在线播放 | 天天人人综合 | 久久成人久久 | 天天操综 | 黄色美女免费网站 | 欧美精品久久天天躁 | 五月天天色| 欧美黄污视频 | 午夜在线国产 | 在线免费高清一区二区三区 | 日日操天天操狠狠操 | 在线看片一区 | 毛片美女网站 | 天天综合网久久综合网 | www.色com | 美女视频黄频大全免费 | 精品a级片| 97免费中文视频在线观看 | 色香蕉在线视频 | 婷婷综合视频 | 四虎国产 | 色视频在线免费观看 | 精品麻豆入口免费 | 国产精品免费视频久久久 | 久草在线视频网 | 色综合久久综合网 | 日韩久久视频 | 99精品久久精品一区二区 | 日本三级国产 | 色精品视频 | 国产成人精品久久 | 国产日韩欧美视频在线观看 | 国产成人精品免高潮在线观看 | 天操夜夜操 | 韩国av在线播放 | 一级性av | 国产成人精品一区二区三区免费 | 国产成人精品综合 | 黄色av网站在线免费观看 | 日本久久久亚洲精品 | 成人激情开心网 | 国产精品久久久久999 | 在线看黄色的网站 | 人人澡人摸人人添学生av | 色吊丝在线永久观看最新版本 | 国产91精品高清一区二区三区 | 久久99视频| 欧美成人精品三级在线观看播放 | 四虎www com| 91精品国产网站 | 欧美在线aa| 国产在线精品一区二区不卡了 | 午夜10000| 久久 地址 | 日日夜夜噜 | 免费三级骚 | 日本精品视频在线播放 | 久久久久久久久久网 | 又大又硬又黄又爽视频在线观看 | 久久精品亚洲一区二区三区观看模式 | 精品国产伦一区二区三区观看说明 | 国产片免费在线观看视频 | 久久国产精品偷 | 婷婷综合激情 | 日韩视频一二三区 | 久久免费高清视频 | av在线短片 | 国产特级毛片 | 日韩精品一区二区在线观看视频 | 黄色av成人在线 | 久久久国内精品 | 久草久草在线 | 探花视频免费在线观看 | 亚洲专区路线二 | 热久久视久久精品18亚洲精品 | 五月婷婷在线视频观看 | 午夜精品成人一区二区三区 | 国产精品嫩草影院123 | 久久av免费 | www.久久久久 | 日韩有色 | 成年人视频在线免费播放 | 亚洲天天在线 | 国产精品小视频网站 | 麻花天美星空视频 | 精品国产乱码久久久久久三级人 | 久久99在线 | 夜夜躁日日躁狠狠久久88av | av在线播放一区二区三区 | 免费观看日韩av | av丝袜天堂 | 久久久久久久久爱 | 国产一区福利在线 | av线上免费观看 | 国产黄在线看 | 黄色大全免费观看 | 欧美精品久久久久久久久久久 | 精品乱码一区二区三四区 | 97精品在线观看 | 亚洲精品女 | 国模一区二区三区四区 | 国产精品日韩久久久久 | 99国产精品久久久久久久久久 | 免费在线一区二区 | 午夜在线免费视频 | 欧美日韩一区三区 | 亚洲精品久久久久久久不卡四虎 | 久久久久久久久毛片精品 | 久久有精品 | 日日夜夜人人精品 | 在线视频专区 | 国产麻豆精品免费视频 | 久久免费国产视频 | 天天插天天 | 黄色精品一区二区 | 欧美 日韩 成人 | 中国一级片免费看 | 国产美女主播精品一区二区三区 | 成人av免费在线看 | 日日夜夜免费精品视频 | 亚洲国产精品500在线观看 | 亚洲精品字幕在线观看 | 日韩欧美大片免费观看 | 一区二区三区在线观看免费视频 | 福利一区二区在线 | 国产精品中文字幕av | 97在线免费 | 亚洲天堂视频在线 | 国产视频网站在线观看 | 五月婷婷欧美视频 | 国产a级片免费观看 | 又粗又长又大又爽又黄少妇毛片 | 久草在线在线精品观看 | 黄色免费网站 | 黄色资源在线 | 福利片视频区 | 伊人国产在线观看 | 日韩欧美在线视频一区二区 | 三级a毛片 | 四虎免费av | 国产综合香蕉五月婷在线 | 最近乱久中文字幕 | 狠狠色综合欧美激情 | 国产在线91在线电影 | av三级在线看 | 久久97超碰 | 九九在线视频免费观看 | 久久黄页| 免费成人在线观看 | 美女一级毛片视频 | 久久精品aaa | 国产69久久久欧美一级 | 日本大片免费观看在线 | 亚洲一区视频免费观看 | 天天干天天草天天爽 | 国产精品成人在线 | 久久国语露脸国产精品电影 | 久久一本综合 | 日韩理论在线视频 | 在线观看国产日韩 | 久久黄页 | 国产成人99久久亚洲综合精品 | 日韩电影久久 | 亚洲一区二区精品 | 亚洲精品字幕 | 国产精品videossex国产高清 | 免费a视频在线 | 久久久久久久久久久久久国产精品 | 日日操日日干 | 日韩欧美xxxx| 亚洲一级电影在线观看 | 麻豆传媒在线视频 | 国产超碰97 | 中文字幕日韩av | 在线观看亚洲成人 | 探花系列在线 | 成人午夜电影久久影院 | av7777777| 亚洲最新视频在线 | 91视频久久久久久 | 四虎影视成人精品国库在线观看 | 中文字幕av在线播放 | 免费观看性生活大片3 | 99热精品国产一区二区在线观看 | 亚洲日本韩国一区二区 | 久久亚洲私人国产精品va | 超级碰碰免费视频 | 日韩视频一区二区三区 | 中文字幕电影网 | 又爽又黄又无遮挡网站动态图 | 免费看的av片 | 国产精品久久久久久久久久ktv | 天天操人| 国产成人久久精品77777综合 | 日韩三级免费观看 | 久久99精品久久久久久久久久久久 | 麻豆手机在线 | 久久国产精品99久久久久久丝袜 | 精品国产1区2区 | 992tv又爽又黄的免费视频 | 99色99| 日韩av在线高清 | 高清av免费一区中文字幕 | 久久夜夜爽 | 黄色av成人在线观看 | 色综合www| 亚洲黄色免费在线看 | 欧美日韩一区二区三区在线观看视频 | 欧美日韩激情视频8区 | 中文字幕影片免费在线观看 | 日韩欧美视频一区二区 | 美女精品久久 | 午夜国产一区二区三区四区 | 亚洲专区视频在线观看 | 国产成人精品一区二区三区在线 | 亚洲精品国产精品久久99热 | 亚洲作爱 | 久久久国产影院 | 高清日韩一区二区 | 久久男人中文字幕资源站 | 99草视频 | av电影免费 | 国产精品视频永久免费播放 | 国产福利91精品张津瑜 | 4438全国亚洲精品在线观看视频 | 狠狠色丁香婷综合久久 | 四虎最新入口 | 日韩大片在线看 | 亚洲在线黄色 | 91九色porny在线 | 麻豆视频在线 | 最新中文字幕在线资源 | 国产伦理久久精品久久久久_ | 久久久久久久久电影 | 午夜在线观看影院 | 国产精品永久免费在线 | 五月天久久综合 | 久久精品爱爱视频 | 91成年人在线观看 | 欧美视频日韩 | 国产1区在线| 4438全国亚洲精品观看视频 | 婷婷婷国产在线视频 | 日韩在线高清 | 99久久久国产免费 | 婷婷网站天天婷婷网站 | 久久免费视频在线观看6 | 色婷婷狠 | 久久新视频| 成人黄大片 | 亚洲天天在线日亚洲洲精 | 99久高清在线观看视频99精品热在线观看视频 | 91香蕉视频黄| 久久国内精品 | 欧美一级片在线免费观看 | 免费日韩视 | 91香蕉视频色版 | 国内精品一区二区 | 亚洲精品理论片 | www欧美色 | 亚洲精品字幕 | 探花系列在线 | 一区二区欧美日韩 | 成人免费网站视频 | 夜夜操天天干 | 日韩在线一区二区免费 | 五月天激情视频在线观看 | 欧美性极品xxxx娇小 | 激情中文在线 | 国产黄色片免费 | 五月天精品视频 | 爱av在线网 | 激情综合网五月激情 | 中文在线免费看视频 | 国产一在线精品一区在线观看 | 亚洲精品中文字幕在线 | 久草干 | 色综合国产 | 亚洲成人免费 | 精品国产中文字幕 | 国产福利在线不卡 | 日日骑 | 欧美国产高清 | 国内精品久久久久久久影视简单 | 国产一级免费在线观看 | 97av.com | 久久久久久高清 | 久久综合精品一区 | 成人黄色小说视频 | 欧美性性网 | 日韩在线观看不卡 | 国产五月天婷婷 | 久久人人爽av | 一区二区三区日韩视频在线观看 | 免费亚洲视频 | av超碰在线观看 | 国产精品成人一区二区 | 国产又粗又长又硬免费视频 | 国产精品va最新国产精品视频 | 97超级碰碰 | 亚洲色视频| 国产精品欧美久久久久三级 | 丰满少妇一级 | 夜夜天天干 | 91成人在线视频 | 亚洲精品xxx | 国产在线观看地址 | 欧美一二三四在线 | 美女黄网站视频免费 | 欧美一级免费在线 | 人人澡人 | 美女网站色在线观看 | 天天干天天在线 | 在线亚洲观看 | 日韩免费一级电影 | 在线观看一级片 | 婷婷网在线 | 极品国产91在线网站 | 日韩免费在线一区 | 91在线中字 | 国产在线观看你懂得 | 午夜在线国产 | 免费高清无人区完整版 | 日韩中文在线观看 | 天天操天天操天天操天天操天天操天天操 | 日韩久久久久久久久久久久 | a级国产乱理伦片在线观看 亚洲3级 | 色综合欧洲 | 欧美激情视频免费看 | 中文av资源站| 国产高清成人 | 天天操天天爽天天干 | 视频一区二区国产 | 亚州精品天堂中文字幕 | 99精品国产一区二区 | 久草在线视频看看 | 国产特级毛片 | 婷婷在线资源 | 99精品热 | 午夜精品久久久久99热app | 2019国产精品 | 日韩中文三级 | 久久精品爱爱视频 | 久草在线免费看视频 | 亚洲综合视频在线观看 | 免费日韩 精品中文字幕视频在线 | 日韩在线高清 | 国产成人一区二区啪在线观看 | www久久99 | 亚洲视频一区二区三区在线观看 | 97色免费视频 | 在线91精品 | 日韩免费 | 久久视频免费在线观看 | 亚洲欧美日韩一二三区 | 激情综合中文娱乐网 | 91视频在线看 | av色影院 | 欧美日韩中文在线观看 | 久久这里只有精品9 | 欧美成人区 | 在线成人免费电影 | 亚洲精品免费播放 | 天天干天天玩天天操 | 一级黄色免费网站 | 天天干,夜夜操 | 新av在线 | 香蕉久久久久 | 伊人国产女 | 伊色综合久久之综合久久 | a久久久久| 国内精品久久久久久 | 日本在线观看黄色 | 午夜国产福利视频 | 九九免费精品视频在线观看 | 激情久久综合网 | 久久免费中文视频 | 午夜美女福利直播 | 国产特级毛片aaaaaaa高清 | 人人干干人人 | 国产尤物视频在线 | 国产一级三级 | 天天操夜夜操夜夜操 | 日韩专区中文字幕 | 五月天久久婷 | 国产一区高清在线 | 免费久久片| 亚洲国产午夜视频 | 成人午夜精品福利免费 | 成人av电影在线观看 | 中日韩欧美精彩视频 | 久久精品视频网 | 国产精品一区二区久久精品爱涩 | 久久国产成人午夜av影院潦草 | 欧美日韩不卡一区二区 | 久久久久久国产精品久久 | 午夜久久久久久久久久久 | 久久免费精品国产 | 国产精品久久久久久a | 99综合电影在线视频 |