HDFS在Linux中的资源调度机制与实现步骤
HDFS本身不直接负责资源调度,其资源管理与调度由Hadoop YARN(Yet Another Resource Negotiator)组件完成。YARN作为Hadoop的核心资源管理框架,负责集群资源的统一分配、任务调度及监控,确保HDFS及其他Hadoop应用(如MapReduce、Spark)高效运行。
YARN的资源调度通过以下组件协同完成:
YARN支持多种调度策略,适用于不同业务场景:
FIFO(先进先出)调度器
Capacity Scheduler(容量调度器)
root.queue1.capacity=30%),保证队列的最小资源使用权。当队列资源闲置时,可临时借用其他队列的资源(资源借用机制),提高集群利用率。Fair Scheduler(公平调度器)
JAVA_HOME环境变量;HADOOP_HOME环境变量。yarn-site.xml是YARN的核心配置文件,需设置以下关键参数:
<configuration>
<!-- 设置ResourceManager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>resourcemanager-hostname</value> <!-- 替换为ResourceManager节点的主机名 -->
</property>
<!-- 设置NodeManager资源限制 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value> <!-- 每个NodeManager可使用的最大内存(MB) -->
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</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.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> <!-- 可替换为FairScheduler -->
</property>
</configuration>
上述配置中,yarn.resourcemanager.scheduler.class决定了使用的调度器类型(如CapacityScheduler或FairScheduler)。
Capacity Scheduler:需创建capacity-scheduler.xml文件(位于etc/hadoop目录),配置队列及资源分配:
<configuration>
<!-- 定义根队列及子队列 -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,queue1,queue2</value> <!-- 根队列下的子队列 -->
</property>
<!-- 设置默认队列的资源比例 -->
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>50</value> <!-- 默认队列占集群资源的50% -->
</property>
<!-- 设置queue1的资源比例 -->
<property>
<name>yarn.scheduler.capacity.root.queue1.capacity</name>
<value>25</value> <!-- queue1占集群资源的25% -->
</property>
<!-- 设置queue2的资源比例 -->
<property>
<name>yarn.scheduler.capacity.root.queue2.capacity</name>
<value>25</value> <!-- queue2占集群资源的25% -->
</property>
</configuration>
Fair Scheduler:需创建fair-scheduler.xml文件(位于etc/hadoop目录),配置队列及公平策略:
<allocations>
<!-- 定义队列及资源限制 -->
<queue name="default">
<minResources>1 vcore, 1024 MB</minResources> <!-- 队列最小资源 -->
<maxResources>2 vcore, 2048 MB</maxResources> <!-- 队列最大资源 -->
</queue>
<queue name="queue1">
<minResources>1 vcore, 1024 MB</minResources>
<maxResources>2 vcore, 2048 MB</maxResources>
</queue>
<!-- 启用用户默认队列(未指定队列时,作业提交到用户同名队列) -->
<property>
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>true</value>
</property>
<!-- 启用资源抢占(可选) -->
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
</allocations>
同时,需在yarn-site.xml中指定fair-scheduler.xml的路径:
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/etc/hadoop/conf/fair-scheduler.xml</value>
</property>
hdfs namenode -format;start-dfs.sh;start-yarn.sh;yarn node -list查看NodeManager节点,通过yarn application -list查看运行中的应用。hdfs-site.xml中的dfs.datanode.hdfs-blocks-metadata.enabled参数优化;topology.script.file.name),将数据副本分布在不同机架(提高容错性与访问性能);