hive案例調優

2021-09-12 11:03:19 字數 1024 閱讀 9420

無效id在關聯時的資料傾斜問題

問題:日誌中常會出現資訊丟失,比如每日約為 20 億的全網日誌,其中的 user_id 為主 鍵,在日誌收集過程中會丟失,出現主鍵為 null 的情況,如果取其中的 user_id 和 bmw_users 關聯,就會碰到資料傾斜的問題。原因是 hive 中,主鍵為 null 值的項會被當做相同的 key 而分配進同乙個計算 map。

解決方法 1:user_id 為空的不參與關聯,子查詢過濾 null

select * from log a

join bmw_users b on a.user_id is not null and a.user_id=b.user_id

union all select * from log a where a.user_id is null

解決方法 2 如下所示:函式過濾 null

select * from log a left outer

join bmw_users b on

case when a.user_id is null then concat(『dp_hive』,rand()) else a.user_id end =b.user_id;

調優結果:原先由於資料傾斜導致執行時長超過 1 小時,解決方法 1 執行每日平均時長 25 分鐘,解決方法 2 執行的每日平均時長在 20 分鐘左右。優化效果很明顯。

我們在工作中總結出:解決方法2比解決方法1效果更好,不但io少了,而且作業數也少了。解決方法1中log讀取兩次,job 數為2。解決方法2中 job 數是1。這個優化適合無效 id(比如-99、 『』,null 等)產生的傾斜問題。把空值的 key 變成乙個字串加上隨機數,就能把傾斜的 資料分到不同的reduce上,從而解決資料傾斜問題。因為空值不參與關聯,即使分到不同 的 reduce 上,也不會影響最終的結果。附上 hadoop 通用關聯的實現方法是:關聯通過二次排序實現的,關聯的列為 partion key,關聯的列和表的 tag 組成排序的 group key,根據 pariton key分配reduce。同一reduce內根據group key排序。

hive效能調優

原文 limit 限制調整 因為使用 limit 語句時候,是先執行整個查詢語句,然後再返回部分結果的 set hive.limit.optimize.enable true set hive.limit.row.max.size 10000 set hive.limit.optimize.limi...

Hive效能調優

軟體環境 hive1.2.1 hadoop2.6.4 直接使用hive cli模式執行 1.設定執行引擎 set hive.execution.engine mr set hive.execution.engine spark 如果設定執行引擎為mr,那麼就會呼叫hadoop的maprecude來執...

Hive引數調優

一 map 階段的優化 1.map數的計算公式為 num map tasks max min mapred.min.spilt.size 指的是資料的最小分割單元大小 預設為1b mapred.max.split.size 指的是資料的最大分割單元大小 預設為 256mb dfs.block.siz...