hive.groupby.skewindata=true注意點


和SQL一樣,HiveQL中同樣支持DISTINCT操作,如下示例:
(1) SELECT
count(DISTINCT uid) FROM log
(2) SELECT ip, count(DISTINCT uid) FROM log GROUP BY ip
(3) SELECT ip, count(DISTINCT uid, uname) FROMlog GROUP BY ip
(4) SELECT ip, count(DISTINCTuid), count(DISTINCT uname) FROMlog GROUP BY ip

當我們使用Hive QL中的去重關鍵字DISTINCT時,需要注意的一點是:

在多個列上進行的去重操作與hive環境變量hive.groupby.skewindata存在關系。
當hive.groupby.skewindata=true時,hive不支持多列上的去重操作
,並報錯:
Error in semantic analysis: DISTINCT on different columns notsupported with skew in data.
注意:上面示例中的(3)不屬於多列上的DISTINCT操作。

Group By 語句
• Map 端部分聚合:
• 並不是所有的聚合操作都需要在 Reduce 端完成,很多聚合操作都可以先在 Map 端進行部分聚合,最后在 Reduce端得出最終結果。
• 基於 Hash
• 參數包括:
• hive.map.aggr = true 是否在 Map 端進行聚合,默認為True
• hive.groupby.mapaggr.checkinterval =100000 在 Map 端進行聚合操作的條目數目

• 有數據傾斜的時候進行負載均衡
• hive.groupby.skewindata = false
• 當選項設定為 true,生成的查詢計划會有兩個 MR Job。第一個 MR Job 中,Map 的輸出結果集合會隨機分布到Reduce 中,每個 Reduce 做部分聚合操作,並輸出結果,這樣處理的結果是相同的 Group By Key有可能被分發到不同的 Reduce 中,從而達到負載均衡的目的;第二個 MR Job 再根據預處理的數據結果按照 Group ByKey 分布到 Reduce 中(這個過程可以保證相同的 Group By Key 被分布到同一個 Reduce中),最后完成最終的聚合操作。

hive.groupby.skewindata變量
從上面groupby語句可以看出,這個變量是用於控制負載均衡的。當數據出現傾斜時,如果該變量設置為true,那么Hive會自動進行負載均衡。

HIVE-2416
Currently when multiple distinct function is used,hive.groupby.skewindata optimization parameter shall be set false,or else an exception is raised:
Error in semantic analysis: DISTINCT on different columns not supported with skew in data
Skew groupby should support multiple distinct function


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM