hive小結

自動化 MapJoin

set hive.auto.convert.join=true;

自動化了 MapJoin,以後咱們就不須要在 query 中再寫了。MapJoin 用於小表 Join 大表的場景,在大表經過 Mapper 時,小表會被徹底放入內存中,Hive 會在 map 端進行鏈接,由於 Hive 能夠和內存中的小表進行逐一匹配,從而省略掉 reduce 過程。sql

任務並行

set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=100;

參數 hive.exec.parallel 控制着同一個 sql 中是否容許並行執行,默認爲 false,設置爲 true 則開啓任務的並行執行。並經過設置 hive.exec.parallel.thread.number 來指定同一個 sql 容許並行運行的最大線程數。app

設置超時時間

set mapred.task.timeout=600000000;

這裏設置的是 Job 運行多久後會因超時而被 kill 掉,根據數據量而定。我目前工做中處理的數據有上億條,維度近千,因此設置得比較大。oop

「健康監測」

set mapred.healthChecker.script.timeout=600000000;

這個參數的做用是,若檢測到腳本在必定時間內無響應,那麼 NodeHealthCheckerService 線程會將該節點的監控狀態標註爲 「unhealthy」。但 Hadoop 2.x 之後,參數 mapred.healthChecker.script.timeout 的名字已經改成 mapreduce.tasktracker.healthchecker.script.timeout,雖然原名還可用,最好仍是使用新的參數名。線程

設置容量大小

set hive.tez.container.size=10240;

Tez 是 YARN 的做業模式,hive.tez.container.size 參數可設置堆的大小,即增大內存容量。因爲 D12 計算機具備 28GB 內存,所以咱們常使用 10GB (10240MB) 大小的容器。code

設置彙集操做執行時機

set hive.map.aggr=false;

若將該參數設置爲 true,則會在 mapper 端先進行 group by,而後執行 merge 操做,減小 reduce 要處理的數據量,效率更高但須要更多內存。若將該參數設置爲 false,則把前面的步驟放在了 reduce 階段再進行。設置 reduce 個數set mapred.reduce.tasks=500;該參數用於設置 reduce 的任務個數,設置爲500,即生成500個文件。根據具體數據量進行調整,使得單個 map 能處理合適的數據量。ip

相關文章
相關標籤/搜索