硬件是性能基礎,需根據集群角色分配資源:
通過系統參數調整提升Hadoop運行效率:
sudo swapoff -a
臨時關閉,修改/etc/fstab
永久禁用。/etc/sysctl.conf
,增加以下配置以提升并發處理能力:net.core.somaxconn = 32767 # 網絡連接隊列長度
fs.file-max = 800000 # 最大文件描述符數
net.core.rmem_default = 67108864 # TCP接收緩沖區默認大小
net.core.wmem_default = 67108864 # TCP發送緩沖區默認大小
net.core.rmem_max = 67108864 # TCP接收緩沖區最大值
net.core.wmem_max = 67108864 # TCP發送緩沖區最大值
執行sudo sysctl -p
使配置生效。/etc/sysctl.conf
中的vm.overcommit_memory
為2(限制內存超額分配),vm.overcommit_ratio
為2(超額分配比率為2%),避免內存耗盡導致OOM。針對HDFS、YARN、MapReduce三大組件調整參數,優化資源利用率:
20 * log2(集群節點數)
,提升NameNode處理DataNode心跳的能力。memory-mb=6144
(預留2G給系統)、cpu-vcores=6
(預留2核給系統)。minimum-allocation-mb=1024
、maximum-allocation-mb=8192
,避免資源碎片化。yarn-site.xml
中設置yarn.nodemanager.vmem-check-enabled=false
,解決JDK與YARN虛擬內存檢測的兼容性問題。mapreduce.job.reduces=2
)。job.setCombinerClass()
)合并相同key的數據,減少Map與Reduce之間的數據傳輸量。優化JVM垃圾回收(GC)與內存分配,減少Full GC導致的停頓:
hadoop-env.sh
中設置JVM堆內存,例如NameNode可配置為-Xmx4g
(最大堆內存4GB),DataNode可配置為-Xmx2g
(根據節點內存調整)。-XX:+UseG1GC
(G1GC)、-XX:+UseParallelGC
(并行GC)。-XX:MaxGCPauseMillis=200
),平衡吞吐量與延遲。通過壓縮減少磁盤存儲與網絡傳輸開銷:
mapred-site.xml
中配置:<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
mapreduce.map.output.compress=true
、mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
,壓縮Map任務的輸出數據,減少Shuffle階段的網絡傳輸。提升數據與計算的協同效率,減少網絡傳輸:
hdfs-site.xml
中啟用機架感知(dfs.network.script
指向機架感知腳本),讓Hadoop優先將數據存儲在同一機架的節點上,減少跨機架傳輸。dfs.replication
配合機架感知),確保數據冗余的同時提升本地化讀取率。通過監控工具識別性能瓶頸,持續優化:
TestDFSIO
(測試HDFS讀寫性能)、TeraSort
(測試MapReduce排序性能)進行基準測試,驗證優化效果。