Hive 企業級優化技巧

2021-10-04 16:11:42 字數 2211 閱讀 1868

注意:在資料量很大的情況下,先使用group by去重再count()計數,效率要高於count(distinct *)

1、grouping sets():在group by查詢中,根據不同的維度組合進行聚合,等價於

將不同維度的group by結果集進行union all。聚合規則在括號中進行指定。

注意:聚合結果均在同一列,分類欄位用不同列來進行區分

--性別、城市、等級使用者分布-- 

select ***,

city,

level

,count

(distinct user_id)

from user_info

group

by ***,city,

level

grouping sets (***,city,

level

);

2、cube:根據group by 維度的所有組合進行聚合

--性別、城市、等級的各種組合的使用者分布-- 

select ***,

city,

level

,count

(distinct user_id)

from user_info

group

by ***,city,

level

with cube;

3、rollup:以最左側的維度為主,進行層級聚合,是cube的子集。

select

year

(dt)

asyear

,month

(dt)

asmonth

,sum

(pay_amount)

from user_trade

where dt>

'0'group

byyear

(dt)

,month

(dt)

with rollup

;

引數設定:set hive.exec.parallel=true

可以並行的任務較多時,開啟併發執行,可以提高執行效率。

user_goods_category 列名

舉例user_name

使用者名稱category_detail

使用者購買過的品類列表,用逗號進行分割

--每個品類的購買使用者數--

select b.category,

count

(distinct a.user_name)

from user_goods_category a

lateral view explode(split(category_detail,

',')

)b as category

group

by b.category;

split():字串分割函式

explode:行轉列函式

小表在前,大表在後

hive假定查詢中最後的乙個表是大表,它會將其它表快取起來,然後掃瞄

最後那個表。

使用相同的連線鍵

當對3個或者更多個表進行join連線時,如果每個on子句都使用相同的連線

鍵的話,那麼只會產生乙個mapreduce job。

盡早的過濾資料

減少每個階段的資料量,對於分割槽表要加分割槽,同時只選擇需要使用到的

字段。邏輯過於複雜時,引入中間表

資料傾斜的表現:

任務進度長時間維持在99%(或100%),檢視任務監控頁面,發現只有少量(1個或幾個)reduce子任務未完成。因為其處理的資料量和其他reduce差異過大。

資料傾斜的原因與解決辦法:

1、空值產生的資料傾斜

解決:如果兩個表連線時,使用的連線條件有很多空值,建議在連線條件中增加過濾

例如:on a.user_id=b.user_id and a.user_id is not null

2、大小表連線(其中一張表很大,另一張表非常小)

解決:將小表放到記憶體裡,在map端做join

3、兩個表連線條件的字段資料型別不一致

解決:將連線條件的字段資料型別轉換成一致的

例如:on a.user_id=cast(b.user_id as string)

Hive之企業級引數優化

3.使用vectorization vectorized查詢執行會提高操作效能,例如scans aggregations filters和joins,通過一次執行1024行提高效能。該屬性在hive 0.13版本引入,該屬性能夠提高查詢執行的時間。通過設定以下兩個引數 code language s...

Hive企業級調優

對sql語句的優化 統計個數使用count 1 不要使用count 查詢字段不要select 使用select 字段 使用特殊的儲存格式 列式儲存 orc,parquet 建表的時候 stored as orc 小表join大表 mr程式中的map端 jojn 小表是個小檔案可以分布式的快取到集群的...

Hive企業級調優(五)

推測執行 在分布式集群環境下,因為程式bug 包括hadoop本身的bug 負載不均衡或者資源分布不均等原因,會造成同乙個作業的多個任務之間執行速度不一致,有些任務的執行速度可能明顯慢於其他任務 比如乙個作業的某個任務進度只有50 而其他所有任務已經執行完畢 則這些任務會拖慢作業的整體執行進度。為了...