hive 針對一些小表(維度表)查詢而已不必使用mr進行計算的,例如:select userid,username from dw_use;這種情況下,hive可以簡單的讀取表所在hdfs下的儲存檔案,並輸出到控制台。通過使用設定引數 hive.fetch.task.conversion 來決定是否使用mr處理。
或者修改 hadoop 的配置檔案 hive-site.xml 直接將引數設定成more。
注:高版本的引數是預設開啟的。
大多數hadoop job 需要經過很長的流程來處理大量的資料集,有時候對於較小的資料集,為了查詢而觸發的任務可能比實際執行job任務的事件還要長。對於這種情況hive 可以在單台機器上完成任務,從使較小的資料集處理事件明顯減少。
如果不指定mapjoin或者不符合mapjoin的條件,那麼hive的解析操作會在reduce階段完成join,容易發生資料傾斜,可用mapjoin把小表全部載入到內存在map端進行join,避免reduce處理。
資料傾斜:由於mr處理資料的reduceshuffle階段的檔案合併在reducetask,操作時mr任務始終卡在99%在處理資料的機器分部資料分布不均導致的流程過長的現象。
資料傾斜的原因:hql語句問題,關聯表的字段資料分布不均,關聯欄位的存在null值,表本身問題等
對於少量資料無所謂,但在資料量巨大的情況下 count(distinct)巨大的資料量僅有乙個reducetask完成會增加mr處理資料的難度。一般對大量的資料count(distinct)一般是先group by 再進行 count
如 select count(distinct userid) from dw_use;
select count(userid ) from (select userid from dw_use group by userid ) a;
盡量避免笛卡爾積,即避免join的時候不加on條件,或者無效的on條件,hive只能使用1個 reducer來完成笛卡爾積。
注:高版本的預設開啟了嚴格模式對使用者的hql進行檢驗。
hive提供了乙個嚴格模式,可以防止使用者執行那些可能意向不到的不好的影響的查詢。通過設定屬性hive.mapred.mode值為預設是非嚴格模式nonstrict 。開啟嚴格模式需要修改hive.mapred.mode值為strict,開啟嚴格模式可以禁止3種型別的查詢。
筆者第一次發文章,也是在工作和面試中學到的比較重點的內容,希望大佬勇於批評和指正!
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...