1. 硬件配置優化
2. 操作系統調優
sysctl.conf
設置vm.swappiness=0
,徹底關閉Swap;若必須使用,可將值設為1(最低優先級)。/etc/security/limits.conf
,增加nofile
(同時打開文件數)和nproc
(進程數)的限制,例如:hadoop hard nofile 65536
、hadoop hard nproc 65536
,避免因文件描述符不足導致任務失敗。/etc/sysctl.conf
中調整TCP緩沖區大?。ㄈ?code>net.core.rmem_default=67108864、net.core.wmem_default=67108864
)和最大連接數(如net.core.somaxconn=8192
),提高網絡傳輸效率和并發處理能力。3. HDFS配置優化
dfs.block.size
(默認64MB),大文件(如日志、視頻)建議設置為256MB或512MB,減少元數據數量,提高并行讀取效率;小文件(如小于128MB)可保持默認或適當增大,避免過多塊導致NameNode壓力過大。dfs.replication
(默認3),熱數據(頻繁訪問)保持3副本以保證可靠性,冷數據(很少訪問)可降低至2副本,節省存儲空間和網絡開銷;通過機架感知策略(dfs.network.script
)將副本分布在不同機架,提高數據本地化率。dfs.namenode.name.dir
(如/data/nn1,/data/nn2
),為DataNode設置多個dfs.datanode.data.dir
(如/data/dn1,/data/dn2
),提高數據存儲可靠性和讀寫并行度。4. MapReduce配置優化
mapred-site.xml
中設置mapreduce.map.output.compress=true
,并選擇高效壓縮算法(如mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
),減少Map到Reduce階段的網絡傳輸量(可降低30%-50%的網絡開銷)。mapreduce.job.reduces
(默認1),通常設置為Map任務數的1/3-1/2(如100個Map任務設置30-50個Reduce任務),避免Reduce任務過少導致并行度不足,或過多導致資源競爭。job.setCombinerClass(SumCombiner.class)
)對中間結果進行局部聚合,減少Reduce階段的數據量(如WordCount任務中,Combiner可將Map輸出的單詞計數合并,減少網絡傳輸)。5. YARN配置優化
yarn-site.xml
中設置yarn.nodemanager.resource.memory-mb
(節點總內存)和yarn.nodemanager.resource.cpu-vcores
(節點CPU核心數),例如8GB內存、4核CPU的節點可設置為memory-mb=8192
、vcores=4
,避免資源過度分配導致節點崩潰。yarn.scheduler.minimum-allocation-mb
(最小容器內存,如1GB)和yarn.scheduler.maximum-allocation-mb
(最大容器內存,如8GB),防止任務占用過多內存導致OOM(Out of Memory)錯誤;同時設置yarn.nodemanager.vmem-pmem-ratio
(虛擬內存與物理內存的比值,如2.1),允許適量虛擬內存使用。CapacityScheduler
)適合多租戶共享集群(支持隊列資源配額),公平調度器(FairScheduler
)適合保證小作業的公平性(動態分配資源),在yarn-site.xml
中配置yarn.resourcemanager.scheduler.class
。6. JVM參數調優
hadoop-env.sh
中設置HADOOP_OPTS
,合理分配JVM堆內存(如-Xmx4g -Xms4g
,堆最大值與初始值相等,避免頻繁擴容),NameNode建議分配服務器內存的1/3-1/2(如8GB內存分配4GB),DataNode建議分配2-4GB。-XX:+UseG1GC
),它在高吞吐量和低延遲之間取得平衡,適合大規模數據處理;避免使用SerialGC(單線程,不適合多核環境)或ParallelGC(吞吐量高但延遲大)。-XX:MaxGCPauseMillis
(最大GC停頓時間,如200ms)和-XX:G1HeapRegionSize
(G1區域大小,如32MB)調整GC行為,減少GC對任務的影響(如避免長時間Full GC導致任務停滯)。7. 數據存儲與訪問優化
core-site.xml
中設置io.compression.codecs
,選擇Snappy(速度快,適合MapReduce、Spark)或LZO(壓縮比高,適合長期存儲)算法,例如io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.LzoCodec
,減少數據存儲空間和傳輸時間。dfs.replication
)和機架感知(dfs.network.script
),提高數據本地化率(即任務在數據所在節點執行的概率),減少網絡傳輸(數據本地化處理的性能比遠程處理高3-5倍)。8. 性能監控與持續調優
TestDFSIO
測試HDFS讀寫性能、TeraSort
測試MapReduce排序性能),定期評估集群性能(如每月一次),根據測試結果調整配置(如增加DataNode內存、調整Map任務數)。