Hive效能調優

2021-08-03 06:53:38 字數 1735 閱讀 9986

軟體環境: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效能調優

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

Hive實戰效能調優

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

hive效能調優總結

1.fetch抓取 hive.fetch.task.conversion more 在某些情況下不必要使用mr計算。hive預設是minimal,該屬性修改為more以後,在全域性查詢 字段查詢 limit查詢等都不走mapreduce。2.本地模式 hive在進行集群作業時多台機器上協調執行,解決...