1.HDFS調優
a.設置合理的塊大小(dfs.block.size)
b.將中間結果目錄設置為分布在多個磁盤以提升寫入速度(mapred.local.dir)
c.設置DataNode處理RPC的線程數(默認為3),大集群可適當加大點(dfs.datanode.handler.count)
d.設置NameNode能同時處理請求數(dfs.namenode.handler.count)為集群規模的自然對數lnN的20倍
2.YRAN調優
Yarn的資源表示模型Container,Container將資源抽象為兩個維度,內存和虛擬CPU核(vcore)
map slot 與 reduce slot,任務槽不能混用,數量一定,不能動態分配資源
Yarn-Container兼容各種計算框架,動態分配資源,減少資源浪費
容器內存-yarn.nodemanager.resource.memory-mb
最小容器內存-yarn.scheduler.minimum-allocation-mb
容器內存增量-yarn.scheduler.increment-allocation-mb
最大容器內存-yarn.scheduler.maximum-allocation-mb
根據實際情況靈活調整,如物理機為128GB,那么容器內存要為100GB
容器虛擬CPU內核yarn.nodemanager.resource.cpu-vcores ---總量要考慮硬件,如雙路四核,這里可以設置為10
最小容器虛擬CPU內核數量yarn.scheduler.minimum-allocation-vcores
容器虛擬CPU內核增量yarn.scheduler.increment-allocation-vcores
最大容器虛擬CPU內核數量yarn.scheduler.maximum-allocation-vcores
3.MapReduce調優
調優三大原則
a.增大作業並行程度---改變輸入分片(input spilt)的大小,輸入分片是個邏輯概念,是一個map Task的輸入。在調優過程中,盡量讓輸入分片與塊大小一樣,這樣就能實現計算本地化,減少不必要的網絡傳輸。
計算公式為max(mapred.min.spilt.size,min(mapred.max.spilt.size,dfs.block.size))
mapred.min.spilt.size=1 ---最小分片大小
mapred.max.split.size=9223372036854775807 ---最大分片大小
dfs.block.size為塊大小
b.給每個任務足夠的資源
Map任務內存:mapreduce.map.memory.mb
Reduce任務內存:mapreduce.reduce.memory.mb
Map任務最大堆棧:mapreduce.map.java.opts.max.heap
Reduce任務最大堆棧:mapreduce.reduce.java.opts.max.heap
ApplicationMaster內存:yarn.app.mapreduce.am.resource.mb
c.在滿足前兩個條件下,盡可能地給shuffle(數據混洗-輸入到輸出整個過程)預留資源
最大洗牌連接:mapreduce.shuffle.max.connections
I/O排序內存緩存(MiB):mapreduce.task.io.sort.mb
I/O排序因子:mapreduce.task.io.sort.factor
洗牌期間並行傳輸的默認數量:mapreduce.reduce.shuffle.parallelcopies
壓縮Map輸出:mapreduce.map.output.compress
備注:其他調優參數參考官網hadoop默認配置,hadoop調優要深刻理解mapreduce