Debian下Hadoop性能調優技巧
/etc/security/limits.conf
,增加用戶進程可打開的文件描述符數量(如* soft nofile 65536; * hard nofile 65536
);編輯/etc/sysctl.conf
,優化網絡連接設置(net.core.somaxconn = 32767
、net.ipv4.tcp_max_syn_backlog = 2048
、net.ipv4.ip_local_port_range = 1024 65535
),提升集群網絡并發處理能力。sysctl vm.swappiness=0
或修改/etc/sysctl.conf
永久禁用Swap,避免Hadoop進程因內存不足而頻繁交換數據到磁盤,導致性能驟降。dfs.block.size
(默認128MB,大文件處理可增至256MB或512MB),減少元數據數量,提升并行處理效率。dfs.replication
(默認3,非關鍵數據可降至2,節省存儲空間與網絡傳輸開銷)。dfs.namenode.handler.count
(如20 * log2(集群節點數)
),提升NameNode處理DataNode心跳的能力,避免因心跳堆積導致元數據管理延遲。mapreduce.map.memory.mb
(如2048MB)、mapreduce.reduce.memory.mb
(如4096MB),避免內存不足引發頻繁GC;同時設置yarn.scheduler.minimum-allocation-mb
(如1024MB)和yarn.scheduler.maximum-allocation-mb
(如8192MB),匹配YARN資源調度策略。mapreduce.job.maps
(默認由InputFormat決定)和mapreduce.job.reduces
(如0.95 * 集群Reduce Slot總數
)調整任務數量,避免任務過細(啟動開銷大)或過粗(負載不均衡)。job.setCombinerClass(SumCombiner.class)
),減少Map與Reduce之間的中間數據傳輸量,提升整體作業效率。yarn.nodemanager.resource.memory-mb
(如集群總內存的80%)和yarn.nodemanager.resource.cpu-vcores
(如集群總CPU核心數的80%),合理分配節點資源給YARN應用。CapacityScheduler
適合多租戶共享集群,公平調度器FairScheduler
適合保證小作業公平性),并通過yarn.scheduler.capacity.root.queues
配置隊列資源分配策略。hadoop-env.sh
中的HADOOP_HEAPSIZE
(如8GB),并為NameNode單獨設置更大堆內存(如HADOOP_NAMENODE_OPTS="-Xmx16g"
),避免因堆內存不足導致OOM錯誤。-XX:+UseG1GC
),并設置-XX:MaxGCPauseMillis=200
(目標最大GC停頓時間),減少GC對應用的影響;避免使用CMS收集器(已逐漸被淘汰)。dfs.datanode.data.dir
配置DataNode本地磁盤路徑,確保任務優先在數據所在節點執行(減少網絡傳輸);若無法本地化,可配置機架感知策略(dfs.network.script
),提升跨機架數據傳輸效率。mapred-site.xml
中設置mapreduce.map.output.compress=true
(啟用Map輸出壓縮)、mapreduce.output.fileoutputformat.compress=true
(啟用最終輸出壓縮),并選擇Snappy(壓縮快、壓縮比適中)或LZO(壓縮比高、需額外安裝)算法,平衡壓縮效率與性能。TestDFSIO
(測試HDFS讀寫性能)、TeraSort
(測試MapReduce排序性能)等工具進行基準測試,對比優化前后的性能變化,驗證調優效果。