hive效能調優及問題排查

2021-09-24 15:25:25 字數 1775 閱讀 2017

軟體環境:hive1.2.1 /hadoop2.6.4 ;直接使用hive cli模式執行;

1. 設定執行引擎

set hive.execution.engine=mr;

set hive.execution.engine=spark;

如果設定執行引擎為mr,那麼就會呼叫hadoop的maprecude來執行需要執行job的程式;如果設定執行引擎為spark,那麼就會呼叫spark來執行任務。有條件的話,就設定執行引擎為spark,因為實在是執行的比hadoop的mapreduce快了很多。

2. 針對mr調優,可以設定引數(針對map端):

set mapred.max.split.size=1000000;

這個設定每個map處理的資料大小,如果現在有乙個10m的資料,那麼設定引數如上,執行可以有多少個map任務呢?

10個 =   10 m / 1000000

mapreduce.map.memory.mb=4096 // 設定申請map資源  記憶體

mapreduce.map.cpu.vcores=1 //設定申請cpu資源(useless)

第乙個引數是設定map申請的記憶體大小,單位是m,這是設定也就是4g;第二個引數設定是map的cpu資源,不過這個設定沒有效果(在實驗的過程中因為在yarn的配置中並沒有做這個配置,所以導致失效,也就是不管設定為多少其占用都是1個;如果要觀察到實驗效果,那麼可以考慮配置集群yarn相關配置);

那假設現在有144個map任務,集群資源為:3子節點*8g記憶體*8核cpu,啟動hive的mr任務,同時會有多少個任務在執行呢?

要回答這個問題,就需要梳理下mapreduce執行任務時,yarn資源分配的流程;

2) 接下來怎麼判斷可以同時執行多少個map任務呢?

現在集群還剩資源= 22g記憶體+23核cpu ,如果map任務配置記憶體為4g,核心為1核那麼,能同時執行:

5 = min(22g/4g = 5  , 23/ 1 = 23 )

也就是同時執行5個map任務,如下:

3)那這時集群還剩多少資源呢?

(3*8g記憶體 + 3*8核cpu )-   (1核cpu,2g記憶體) - 5 * (4g記憶體,1核cpu) =   (2g記憶體,18核cpu)

驗證一下:

3. 針對mr調優,可以設定引數(針對reduce端),這個暫時沒有實驗,暫時給出乙個參考:

mapreduce.job.reduces=2(可手工設定)

hive.exec.reducers.max (hive設定的最大可用reducer)

hive.exec.reducers.bytes.per.reducer (hive預設每1g檔案分配乙個reduce)

分配演算法

num_reduce_tasks=min[maxreucers,input.size/perreducer]

原文: 

hive程式報failed: execution error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.mapredtask

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實戰效能調優

hive是乙個資料倉儲基礎工具在hadoop中用來處理結構化資料。它架構在hadoop之上,總歸為大資料,並使得查詢和分析方便。並提供簡單的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行。hive 構建在基於靜態批處理的hadoop 之上,hadoop 通常都有較高的延遲並且在...