從以下6個方面著手考慮:
map端資料輸入時主要需要考慮的是小檔案(因為hadoop預設的切片原則是按檔案進行的)的問題:
針對小檔案的問題我們有如下兩種解決方案:
(1)合併小檔案:在map讀取資料任務開始前,可以人工的對小檔案進行乙個合併,合併成乙個大檔案。
(2)採用combinetextinputformat的方式讀取檔案。
關於該機制的介紹如下:
hadoop框架預設的textinputformat切片機制是對任務按檔案規劃切片,不管檔案多小,都會是乙個單獨的切片,都會交給乙個maptask,這樣如果有大量小檔案,就會產生大量的maptask,處理效率極其低下。
虛擬儲存切片最大值設定
combinetextinputformat.setmaxinputsplitsize(job, 4194304);// 4m
注意:虛擬儲存切片最大值設定最好根據實際的小檔案大小情況來設定具體的值。
切片機制
生成切片過程包括:虛擬儲存過程和切片過程二部分。
自我總結:
先有乙個虛擬儲存過程,並不是真正的切塊。
在虛擬存錯過程中,分為如下情況:
1、當乙個檔案的大小大於兩倍所設定的最大的切片大小時setmaxinputsplitsize,先在邏輯上切分出設定的最大的分片大小,然後對剩餘大小的塊在進行判斷
while(flag)
if(是否大於一倍小於兩倍)
if(是否小於一倍)
2、在虛擬儲存之後,進行真正的切片過程:
while(對每乙個虛擬儲存過程後形成的塊進行迴圈判斷)
}else(不大於的話)
map階段的優化主要從以下三個方面:
reduce階段的優化主要從以下四個方面:
i/o傳輸過程中的優化從以下兩個方面考慮:
其中第乙個方面是我上個部落格中所講述的壓縮方式的比較和選擇。
< >
資料傾斜問題:
個人理解:資料傾斜通常是分割槽不恰當造成的,因為乙個reducetask負責處理乙個分割槽的任務,當資料分布不均時,可能有些分割槽中有很多的資料,另一些分割槽中的資料極少,這就造成了某乙個或介個reducetask處理的資料過多了。
資料傾斜問題的解決:
(1)資源相關引數
以下引數是在使用者自己的mr應用程式中配置就可以生效。
配置引數
引數說明
mapreduce.map.memory.mb
乙個maptask可使用的資源上限(單位:mb),預設為1024。如果maptask實際使用的資源量超過該值,則會被強制殺死。
mapreduce.reduce.memory.mb
乙個reducetask可使用的資源上限(單位:mb),預設為1024。如果reducetask實際使用的資源量超過該值,則會被強制殺死。
mapreduce.map.cpu.vcores
每個maptask可使用的最多cpu core數目,預設值: 1
mapreduce.reduce.cpu.vcores
每個reducetask可使用的最多cpu core數目,預設值: 1
mapreduce.reduce.shuffle.parallelcopies
每個reduce去map中取資料的並行數。預設值是5
mapreduce.reduce.shuffle.merge.percent
buffer中的資料達到多少比例開始寫入磁碟。預設值0.66
mapreduce.reduce.shuffle.input.buffer.percent
buffer大小佔reduce可用記憶體的比例。預設值0.7
mapreduce.reduce.input.buffer.percent
指定多少比例的記憶體用來存放buffer中的資料,預設值是0.0
以下的 應該在yarn啟動之前就配置在伺服器的配置檔案中才能生效(yarn-default.xml)
配置引數
引數說明
yarn.scheduler.minimum-allocation-mb
給應用程式container分配的最小記憶體,預設值:1024
yarn.scheduler.maximum-allocation-mb
給應用程式container分配的最大記憶體,預設值:8192
yarn.scheduler.minimum-allocation-vcores
每個container申請的最小cpu核數,預設值:1
yarn.scheduler.maximum-allocation-vcores
每個container申請的最大cpu核數,預設值:32
yarn.nodemanager.resource.memory-mb
給containers分配的最大物理記憶體,預設值:8192
shuffle效能優化的關鍵引數,應在yarn啟動之前就配置好(mapred-default.xml)
配置引數
引數說明
mapreduce.task.io.sort.mb
shuffle的環形緩衝區大小,預設100m
mapreduce.map.sort.spill.percent
環形緩衝區溢位的閾值,預設80%
(2)容錯相關引數(mapreduce效能優化)
配置引數
引數說明
mapreduce.map.maxattempts
每個map task最大重試次數,一旦重試次數超過該值,則認為map task執行失敗,預設值:4。
mapreduce.reduce.maxattempts
每個reduce task最大重試次數,一旦重試次數超過該值,則認為map task執行失敗,預設值:4。
MapReduce優化方法
mapreduce 程式效率取決於以下幾點 1.計算機效能 cpu 記憶體 磁碟健康 網路 2.i o 操作優化 1 資料傾斜 2 map 和 reduce 數設定不合理 3 map 執行時間太長,導致 reduce 等待過久 4 小檔案過多 5 大量的不可分塊的超大檔案 6 spill 次數過多 ...
大資料優化方案 MapReduce優化方法
無意中發現了乙個巨牛的人工智慧教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看 一樣!覺得太牛了,所以分享給大家。點這裡可以跳轉到教程。大資料面試寶典目錄,一 mapreduce 程式效率的瓶頸在於兩點 1 計算機效能 cpu 記憶體 磁碟健康 網路 2 i o 操作優...
Mapreduce的優化策略
1 combiner優化 在之前的shuffle過程中的map端生成最終溢寫檔案時,例如 aaa 1,aaa 1 這樣的資料會被合併為 而我們可以通過給每個map顯示的設定combiner,來將這個節點的輸出優化,即如前面的例如,如果他們是同一節點的資料,他們會合併為,combiner相當於小型的r...