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的资源调度配置,实现集群资源的合理分配与管理。需根据实际集群规模(节点数量、硬件配置)和业务需求(多租户、公平性)调整参数,以达到最佳性能。