mapreduce复制连接的代码_我的 Hive 为什么跑不起来/跑得慢?看看是不是少了这几行代码?...
《飲食男女》開頭說:“人生不能像做菜,把所有的料都準備好了才下鍋。”
但做大數據挖掘不一樣,MapReduce 不同于人生,一定要把準備工作做好了,才能順利運行后面的步驟。如果你的 HiveQL 代碼沒毛病,卻一運行就出現 Fail 提示,可以看看,是不是少了下面哪項準備工作?
指定隊列
set在 HADOOP 中,隊列的組織是一切的基礎,決定了隊列管理和資源分配,一定要在程序開頭指定一個隊列,注意任務和資源的平衡。
自動化 MapJoin
set這是一步優化操作,自動化了 MapJoin,之后我們就不需要在 query 中再寫了。MapJoin 用于小表 Join 大表的場景,在大表通過 Mapper 時,小表會被完全放入內存中,Hive 會在 map 端進行連接,因為 Hive 可以和內存中的小表進行逐一匹配,從而省略掉 reduce 過程。
任務并行
set參數 hive.exec.parallel 控制著同一個 sql 中是否允許并行執行,默認為 false,設置為 true 則開啟任務的并行執行。并通過設置 hive.exec.parallel.thread.number 來指定同一個 sql 允許并行運行的最大線程數。
設置超時時間
set這里設置的是 Job 運行多久后會因超時而被 kill 掉,根據數據量而定。我目前工作中處理的數據有上億條,維度近千,所以設置得比較大。
“健康監測”
set這個參數的作用是,若檢測到腳本在一定時間內無響應,那么 NodeHealthCheckerService 線程會將該節點的監控狀態標注為 “unhealthy”。但 Hadoop 2.x 以后,參數 mapred.healthChecker.script.timeout 的名字已經改為 mapreduce.tasktracker.healthchecker.script.timeout,雖然原名還可用,最好還是使用新的參數名。
設置容量大小
setTez 是 YARN 的作業模式,hive.tez.container.size 參數可設置堆的大小,即增大內存容量。由于 D12 計算機具有 28GB 內存,因此我們常使用 10GB (10240MB) 大小的容器。
設置聚集操作執行時機
set若將該參數設置為 true,則會在 mapper 端先進行 group by,然后執行 merge 操作,減少 reduce 要處理的數據量,效率更高但需要更多內存。若將該參數設置為 false,則把前面的步驟放在了 reduce 階段再進行。
設置 reduce 個數
set該參數用于設置 reduce 的任務個數,設置為500,即生成500個文件。根據具體數據量進行調整,使得單個 map 能處理合適的數據量。
在海量數據真正跑起來前,一般需要設置的幾個參數就是以上提到的啦,具體每個參數需要設置成什么值,還要根據具體的數據量和時間、設備等條件來定,可以反復嘗試進行優化。
歡迎大家關注微信公眾號【數據池塘】:
總結
以上是生活随笔為你收集整理的mapreduce复制连接的代码_我的 Hive 为什么跑不起来/跑得慢?看看是不是少了这几行代码?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios弧形进度条_iOS如何实现环形进度
- 下一篇: 国家八大战略新兴产业有哪些 一文让你知道