Ubuntu下Hadoop運行慢的優化方案
硬件是Hadoop運行的基礎,需根據集群規模滿足以下要求:
yarn.nodemanager.resource.memory-mb
設置為8GB以上),并為Map/Reduce任務分配合理內存(mapreduce.map.memory.mb
建議4GB+,mapreduce.reduce.memory.mb
建議8GB+)。dfs.datanode.data.dir
指向SSD掛載目錄);若成本有限,可選擇高性能SATA SSD。yarn.nodemanager.resource.cpu-vcores
匹配CPU核心數。/etc/sysctl.conf
優化系統性能,例如降低vm.swappiness
(如設為10)減少交換分區使用,提升I/O效率。dfs.blocksize=268435456
),減少元數據操作和Map任務數量。dfs.replication=2
),減少網絡傳輸和存儲開銷。dfs.namenode.handler.count=64
、dfs.datanode.handler.count=64
)。mapreduce.map.output.compress=true
、mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
)。mapreduce.job.maps
約為CPU核心數的1.5倍,mapreduce.job.reduces
約為CPU核心數的1倍)。job.setCombinerClass(WordCountReducer.class)
)。yarn.nodemanager.resource.memory-mb
、yarn.nodemanager.resource.cpu-vcores
),避免資源浪費。yarn-site.xml
中配置yarn.resourcemanager.scheduler.class
),提升資源利用率。數據本地化是減少網絡傳輸的關鍵,需確保任務運行在數據所在節點:
mapreduce.job.locality.wait
參數(如設為300000ms,即5分鐘),讓調度器等待任務分配到數據節點;/etc/sysctl.conf
中的net.core.somaxconn
(如設為1024)、net.ipv4.tcp_max_syn_backlog
(如設為8192),增強網絡吞吐能力。mapreduce.map.output.compress=true
、mapreduce.output.fileoutputformat.compress=true
),推薦使用Snappy(速度快)或LZO(壓縮率高)編解碼器。mapreduce.reduce.java.opts=-Xmx8192m
),避免頻繁Full GC。-XX:+UseG1GC
),減少GC停頓時間。distributed.cache
)存放頻繁訪問的小文件(如配置文件、字典),減少重復加載時間。