Ubuntu環境下HDFS資源調度的核心流程與配置
HDFS的資源調度主要由YARN(Yet Another Resource Negotiator)負責,其核心是通過資源管理器(ResourceManager)統一分配集群資源(內存、CPU),并通過調度器(如Capacity Scheduler、Fair Scheduler)實現資源的公平或優先級分配。以下是Ubuntu下配置HDFS資源調度的具體步驟:
在Ubuntu上配置HDFS資源調度前,需完成Hadoop基礎環境的搭建:
sudo apt-get install openjdk-8-jdk安裝OpenJDK 8,并通過java -version驗證安裝。/usr/local/目錄,執行tar -xzvf hadoop-3.3.1.tar.gz -C /usr/local/。~/.bashrc文件,添加以下內容(替換為實際路徑):export HADOOP_HOME=/usr/local/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
執行source ~/.bashrc使變量生效。YARN的資源調度功能通過yarn-site.xml(位于$HADOOP_HOME/etc/hadoop/目錄)實現,需調整以下關鍵參數:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>your-resourcemanager-host</value> <!-- 如localhost(單機環境)或集群IP -->
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value> <!-- 單個NodeManager可用內存(MB) -->
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>8</value> <!-- 單個NodeManager可用CPU核心數 -->
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value> <!-- 單個容器最小內存(MB) -->
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value> <!-- 單個容器最大內存(MB) -->
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value> <!-- 單個容器最小CPU核心數 -->
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>8</value> <!-- 單個容器最大CPU核心數 -->
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
YARN支持多種調度器,需在yarn-site.xml中通過yarn.resourcemanager.scheduler.class參數指定,常見調度器及配置如下:
適用于多租戶環境,通過隊列劃分資源,保證各隊列的最小資源配額,支持資源搶占。
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
capacity-scheduler.xml(位于$HADOOP_HOME/etc/hadoop/)中定義隊列及資源比例:<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,hive_queue,mapreduce_queue</value> <!-- 定義隊列 -->
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>50</value> <!-- default隊列占集群50%資源 -->
</property>
<property>
<name>yarn.scheduler.capacity.root.hive_queue.capacity</name>
<value>30</value> <!-- hive_queue隊列占30%資源 -->
</property>
<property>
<name>yarn.scheduler.capacity.root.mapreduce_queue.capacity</name>
<value>20</value> <!-- mapreduce_queue隊列占20%資源 -->
</property>
適用于追求公平性的場景,動態調整各作業的資源分配,確保所有作業獲得相近的資源。
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
fair-scheduler.xml中定義隊列及權重:<allocations>
<queue name="default">
<weight>1.0</weight> <!-- 權重,數值越大分配資源越多 -->
</queue>
<queue name="hive_queue">
<weight>2.0</weight>
</queue>
<queue name="mapreduce_queue">
<weight>1.5</weight>
</queue>
</allocations>
配置完成后,啟動HDFS和YARN服務:
# 啟動HDFS(NameNode、DataNode)
start-dfs.sh
# 啟動YARN(ResourceManager、NodeManager)
start-yarn.sh
驗證服務狀態:
hdfs dfsadmin -report(查看NameNode、DataNode信息)。yarn node -list(查看NodeManager列表)。http://your-resourcemanager-host:8088(查看資源分配情況)。使用yarn jar命令提交MapReduce作業,指定隊列(如hive_queue):
yarn jar /path/to/hadoop-mapreduce-examples-3.3.1.jar pi -Dmapreduce.job.queuename=hive_queue 10 100
通過ResourceManager Web UI查看作業的資源分配情況,確認調度策略生效。
通過以上步驟,即可在Ubuntu環境下完成HDFS的資源調度配置,實現集群資源的合理分配與管理。需根據實際集群規模(節點數量、硬件配置)和業務需求(多租戶、公平性)調整參數,以達到最佳性能。