YARN是Hadoop的資源管理核心,其調度器決定了任務資源的分配邏輯。Hadoop自帶三種主流調度器,需根據集群場景選擇:
yarn.scheduler.capacity.root.default.capacity
)為不同團隊/項目分配固定資源池,保證資源隔離和公平性。yarn.scheduler.fair.allocation.file
配置公平策略),適合小任務快速響應與大任務穩定運行的混合場景。根據作業特性調整調度器參數,提升資源利用率:
yarn.scheduler.capacity.root.<queue>.minimum-user-limit-percent
(容量調度器)或yarn.scheduler.fair.user-as-default-queue
(公平調度器)為關鍵作業預留資源,避免低優先級任務占用核心資源。yarn.scheduler.capacity.root.<queue>.priority
(容量調度器)或mapreduce.job.priority
(作業級別),確保重要作業(如實時分析)優先執行。mapreduce.map.memory.mb
(Map任務內存)、mapreduce.reduce.memory.mb
(Reduce任務內存)及yarn.scheduler.maximum-allocation-mb
(NodeManager最大分配內存),避免資源浪費或溢出。數據本地化(Task在數據所在節點執行)能大幅減少網絡傳輸開銷,提升任務效率:
dfs.blocksize
(如128MB或256MB),大文件采用大塊減少尋址時間,小文件采用小塊避免資源浪費。dfs.replication
(如3副本),平衡存儲成本與讀取性能(副本越多,讀取時本地化概率越高)。dfs.network.script
配置機架感知,讓Task優先調度到數據所在機架的節點,減少跨機架網絡傳輸。通過調整MapReduce參數,減少任務執行時間和資源消耗:
mapreduce.job.combine.class
設置org.apache.hadoop.mapreduce.Reduce
),減少Reduce階段的數據量。mapreduce.shuffle.file.buffer
(Shuffle緩沖區大小,默認128KB,可增至256MB)、mapreduce.reduce.shuffle.merge.percent
(Shuffle合并閾值),提升Shuffle效率。mapreduce.speculative.execution
(默認true),對慢任務啟動備份任務,避免因節點故障或資源不足導致的長尾任務。優化Linux內核參數,提升Hadoop集群的I/O和網絡性能:
swapoff -a
關閉Swap,避免內存不足時任務頻繁換頁(可將vm.swappiness
設置為0,徹底禁用Swap)。/etc/security/limits.conf
,增加nofile
(文件描述符)和nproc
(進程數)限制(如* soft nofile 65536
、* hard nofile 65536
),避免大量文件讀寫或任務并發導致的進程崩潰。noop
(無調度)或deadline
(低延遲),HDD使用cfq
(完全公平隊列),提升磁盤讀寫效率。blockdev --setra 1024 /dev/sdX
(如/dev/sda
)增大磁盤預讀取緩沖區(默認128KB,可增至1MB),減少磁盤尋道時間。通過監控工具實時跟蹤集群狀態,動態調整調度策略:
yarn logs -applicationId <appId>
),定位任務失敗原因(如資源不足、數據傾斜),針對性調整調度參數。yarn.scheduler.capacity.root.<queue>.maximum-capacity
),適應業務增長需求。mapreduce.speculative.execution.slowTaskThreshold
(慢任務閾值,默認10分鐘),避免過度啟動備份任務(增加集群負載)。