`

hadoop计算能力调度器配置

 
阅读更多
问题出现
hadoop默认调度器是FIFO,其原理就是先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业。
比如有两个作业job1和job2,job1提交了一个优先级比较高的作业,而且独占资源时间特别长,这时候来了一个job2作业,就需要等待job1完成释放后才能执行。
解决方法
hadoop有facebook贡献的一个计算能力调度器(Capacity Scheduler), 支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。

修改hadoop的配置文件mapred-site.xml:
<property> 
  <name>mapred.jobtracker.taskScheduler</name> 
  <value>org.apache.hadoop.mapred.CapacityTaskScheduler</value> 
  <description>计算能力调度器实现类</description>
</property> 
<property> 
  <name>mapred.queue.names</name> 
  <value>default,hive,pig</value>
  <description>队列名称</description>
</property>


在capacity-scheduler.xml文件中填写如下内容:

<property>
    <name>mapred.capacity-scheduler.queue.hive.capacity</name>
    <value>40</value>
    <description>队列容量</description>    
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.hive.maximum-capacity</name>
    <value>-1</value>
    <description>队列的资源使用上限(百分比)</description>    
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.hive.supports-priority</name>
    <value>true</value>
    <description></description>
  </property>
  
    <property>
    <name>mapred.capacity-scheduler.queue.hive.minimum-user-limit-percent</name>
    <value>100</value>
    <description>t:每个用户最低资源保障(百分比)</description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.hive.user-limit-factor</name>
    <value>3</value>
    <description>设置queue中用户可占用queue容量的系数,默认为1</description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.hive.maximum-initialized-active-tasks</name>
    <value>200000</value>
    <description></description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.hive.maximum-initialized-active-tasks-per-user</name>
    <value>100000</value>
    <description></description>
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.hive.init-accept-jobs-factor</name>
    <value>10</value>
    <description></description>
  </property>
  
<!-- pig -->
<property>
    <name>mapred.capacity-scheduler.queue.pig.capacity</name>
    <value>30</value>
    <description></description>    
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.pig.maximum-capacity</name>
    <value>-1</value>
    <description></description>    
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.pig.supports-priority</name>
    <value>true</value>
    <description>If true, priorities of jobs will be taken into 
      account in scheduling decisions.
    </description>
  </property>
  
    <property>
    <name>mapred.capacity-scheduler.queue.pig.minimum-user-limit-percent</name>
    <value>100</value>
    <description></description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.pig.user-limit-factor</name>
    <value>4</value>
    <description>The multiple of the queue capacity which can be configured to
    allow a single user to acquire more slots.
    </description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.pig.maximum-initialized-active-tasks</name>
    <value>200000</value>
    <description></description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.pig.maximum-initialized-active-tasks-per-user</name>
    <value>100000</value>
    <description></description>
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.pig.init-accept-jobs-factor</name>
    <value>10</value>
    <description></description>
  </property>

<!-- default --> 
  <property>
    <name>mapred.capacity-scheduler.queue.default.capacity</name>
    <value>30</value>
    <description></description>    
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.default.maximum-capacity</name>
    <value>-1</value>
    <description></description>    
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.default.supports-priority</name>
    <value>true</value>
    <description></description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.default.minimum-user-limit-percent</name>
    <value>100</value>
    <description></description>
  </property>
  
  <property>
    <name>mapred.capacity-scheduler.queue.default.user-limit-factor</name>
    <value>4</value>
    <description></description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.default.maximum-initialized-active-tasks</name>
    <value>200000</value>
    <description></description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.default.maximum-initialized-active-tasks-per-user</name>
    <value>100000</value>
    <description></description>
  </property>

  <property>
    <name>mapred.capacity-scheduler.queue.default.init-accept-jobs-factor</name>
    <value>10</value>
    <description></description>
  </property>



mapred.capacity-scheduler.queue.<queue-name>.user-limit-factor:设置queue中用户可占用queue容量的系数,默认为1表示,queue中每个用户最多只能占有queue的容量(即mapred.capacity-scheduler.queue.<queue-name>.capacity),因此,需要注意的是,如果queue中只有一个用户提交job,且希望用户在集群不繁忙时候可扩展到mapred.capacity-scheduler.queue.<queue-name>.maximum-capacity指定的slots数,则必须相应调大user-limit-factor这个系数。

java中的使用
conf.setQueueName("hive");



动态更新集群队列和容量
生产环境中,队列及其容量的修改在现实中是不可避免的,而每次修改,需要重启集群,这个代价很高,如果修改队列及其容量的配置不重启呢:
1.在主节点上根据具体需求,修改好mapred-site.xml和capacity-scheduler.xml
2.把配置同步到所有节点上
3.使用hadoop用户执行命令:hadoop mradmin -refreshQueues
这样就可以动态修改集群的队列及其容量配置,不需要重启了,刷新mapreduce的web管理控制台可以看到结果。

注意:如果配置没有同步到所有的节点,一些队列会无法启用。
分享到:
评论

相关推荐

    Hadoop任务调度器

    Hadoop任务调度器是Hadoop分布式计算框架中的核心组件之一,负责管理和分配集群资源,以实现任务的高效执行。Hadoop的作业调度过程可以划分为几个主要阶段,这些阶段涉及到从作业提交到任务分配的各个环节。下面详细...

    hadoop 容量调度器

    总结,Hadoop容量调度器通过精细的配置和调度策略,实现了多用户、多任务的公平资源分配,保障了集群的高效运行。理解并合理配置这些参数,对于优化Hadoop集群的性能和利用率至关重要。在实际操作中,应根据业务需求...

    Hadoop 中的调度

    调度器在Hadoop中扮演着分配计算资源的角色,确保多任务并行执行时的公平性和效率。传统的Hadoop调度器采用的是First In First Out(FIFO)策略,即按作业提交的顺序分配资源,但这种方法并不适用于复杂的工作负载和...

    Hadoop集群作业的调度算法

    YARN中的调度器可以根据应用程序的不同需求灵活配置。 #### 五、作业调度算法的设计原则 1. **公平性**:确保每个作业都有机会获得所需的资源。 2. **效率**:最小化作业完成时间,提高资源利用率。 3. **灵活性**...

    hadoop调度指南

    综上所述,Hadoop的公平调度器通过引入资源池、最小保障资源、优先级处理和资源抢占等机制,为Hadoop集群提供了更为灵活和高效的资源管理能力,尤其是在多用户、多任务的复杂场景下,能够显著提升资源利用率和作业...

    Hadoop公平调度器指南.pdf

    3. **优先级与权重**:公平调度器支持作业优先级与权重的概念,优先级类似于权重,用于决定每个作业能够获取的整体计算时间的比例。 4. **资源池管理**: - 默认情况下,每个用户有一个独立的资源池,确保用户无论...

    关于Hadoop集群作业调度算法的探讨.pdf

    本文主要探讨了Hadoop集群中的三种默认调度算法——FIFO(先进先出)、公平份额调度和计算能力调度,并涉及了在异构集群环境下的作业调度策略。 首先,FIFO调度算法是最简单的调度策略,类似于操作系统中的进程调度...

    hadoop的默认配置文件

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在廉价硬件上处理大量数据,提供了高可靠性、高扩展性和高效能的数据存储与处理能力。Hadoop的核心组件包括HDFS(Hadoop Distributed File System)、...

    Hadoop调优之调度算法详解一

    在大数据处理领域,Hadoop是不可或缺的核心组件,它提供了分布式存储和计算的能力。调度算法作为Hadoop中的关键部分,对于优化整个集群的性能至关重要。本文将深入探讨Hadoop调优中的调度算法,帮助理解其工作原理,...

    hadoop2.8.2安装的配置文件

    在分布式计算领域,Hadoop是一个不可或缺的关键组件,它提供了可靠的数据存储和大规模数据处理能力。在Hadoop 2.8.2版本中,为了确保系统能够正常运行,我们需要正确配置四个核心的配置文件。这些配置文件是Hadoop...

    HadoopHA集群配置文件

    3. `mapred-site.xml`: MapReduce是Hadoop的并行计算框架,`mapred-site.xml`中主要配置MapReduce与HDFS的交互,比如`mapreduce.framework.name`设置为`yarn`表示使用YARN作为资源管理器。此外,还可以配置...

    Hadoop3.1.3 配置文件

    在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。Hadoop3.1.3是Hadoop的一个稳定版本,包含了多个优化和改进,使得它在处理大规模数据时更加高效和可靠。本文将深入探讨Hadoop...

    hadoop配置文件默认配置

    在Hadoop生态系统中,配置文件是管理和优化...这些配置参数可以根据实际需求进行调整,以优化集群性能、提高安全性或者满足特定的存储和计算需求。在Hadoop集群的日常管理和维护中,理解和掌握这些配置是非常必要的。

    hadoop 大数据集群配置文件

    在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。本文将详细解析提供的几个关键配置文件,这些配置文件对于理解和优化Hadoop大数据集群的性能至关重要。 首先,`profile`文件...

    hadoop config 配置文件

    YARN是Hadoop的资源调度器,`yarn-site.xml`配置了节点管理器、资源管理器的参数,如内存分配、CPU分配策略等。`yarn.nodemanager.resource.memory-mb`定义每个节点上可用的内存资源。 5. **mapred-site.xml** ...

    搭建hadoop集群的全部配置文件

    - **yarn-site.xml**:在Hadoop 2.x版本后,MapReduce被YARN(Yet Another Resource Negotiator)取代,此文件配置了YARN的资源调度器和节点管理器等。 3. **集群通信**:配置文件中包含了节点间的通信参数,如RPC...

    hadoop公平调度算法解析

    公平调度器,作为Hadoop生态系统中的一种重要调度策略,旨在解决多用户共享集群环境下的资源分配问题,确保资源的合理与公平利用。相较于传统的先进先出(FIFO)调度方式,公平调度器在吞吐率上表现更优,尤其适用于...

Global site tag (gtag.js) - Google Analytics