问题出现
hadoop默认调度器是FIFO,其原理就是先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业。
比如有两个作业job1和job2,job1提交了一个优先级比较高的作业,而且独占资源时间特别长,这时候来了一个job2作业,就需要等待job1完成释放后才能执行。
解决方法
hadoop有facebook贡献的一个计算能力调度器(Capacity Scheduler), 支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。
修改hadoop的配置文件mapred-site.xml:
在capacity-scheduler.xml文件中填写如下内容:
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中的使用
动态更新集群队列和容量
生产环境中,队列及其容量的修改在现实中是不可避免的,而每次修改,需要重启集群,这个代价很高,如果修改队列及其容量的配置不重启呢:
1.在主节点上根据具体需求,修改好mapred-site.xml和capacity-scheduler.xml
2.把配置同步到所有节点上
3.使用hadoop用户执行命令:hadoop mradmin -refreshQueues
这样就可以动态修改集群的队列及其容量配置,不需要重启了,刷新mapreduce的web管理控制台可以看到结果。
注意:如果配置没有同步到所有的节点,一些队列会无法启用。
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管理控制台可以看到结果。
注意:如果配置没有同步到所有的节点,一些队列会无法启用。
发表评论
-
Sort-based Shuffle的设计与实现
2016-03-15 08:49 812原文 http://www.cnblogs.com/hsea ... -
spark的几个重要概念
2015-12-04 14:09 0本节主要记录以下几个概念 一:RDD的五大特点 二:RDD 窄 ... -
spark部署安装调试
2015-12-02 11:28 739本节记录spark下载-->编译-->安装--&g ... -
spark基本概念
2015-11-12 10:45 790记录一下课堂笔记: ... -
HBase在各大应用中的优化和改进
2015-10-28 14:59 698Facebook之前曾经透露过Facebook的hbase架构 ... -
一篇很好的解决系统问题过程描述文章
2015-09-23 08:40 503在网上看到的一篇解决h ... -
通过GeoHash核心原理来分析hbase rowkey设计
2015-09-08 15:49 3522注:本文是结合hbase ... -
从OpenTsdb来分析rowkey设计
2015-09-06 16:04 4950讨论此问题前,先理解 ... -
HBase中asynchbase的使用方式
2015-08-25 10:32 8200Hbase的原生java 客户端是完全同步的,当你使用原生AP ... -
Mapreduce优化的点滴
2015-07-16 15:18 833注:转载 1. 使用自定义Writable 自带的Text ... -
hadoop 如何自定义类型
2015-07-15 09:37 1240记录一下hadoop 数据类型章节的笔记,以便后期使用,本文是 ... -
napreduce shuffle 过程记录
2015-07-10 11:23 763在我看来 hadoop的核心是mapre ... -
ZooKeeper伪分布式集群安装及使用
2015-02-13 08:29 9231. zookeeper介绍 ZooKeeper是一个为分 ... -
hadoop-mahout 核心算法总结
2015-02-07 10:08 1558其实大家都知道hadoop为我们提供了一个大的框架,真正的 ... -
推荐引擎内部原理--mahout
2015-01-22 11:11 573转载自:https://www.ibm.com/devel ... -
hadoop 动态添加删除节点
2015-01-20 13:39 671转自:http://www.cnblogs.com/rill ... -
hbase hadoop zookeeper
2015-01-19 14:47 0hadoop 部署手册 http://www.iteblo ... -
mapreduce 开发以及部署
2015-01-16 13:56 842前面几篇文章的梳理让我对hadoop新yarn 框架有了一 ... -
hadoop yarn几个问题的记录
2015-01-13 11:48 659本文主要介绍以下几 ... -
hadoop集群部署时候的几个问题记录
2015-01-13 10:24 742本章部署一个hadoop 集群 ...
相关推荐
Hadoop任务调度器是Hadoop分布式计算框架中的核心组件之一,负责管理和分配集群资源,以实现任务的高效执行。Hadoop的作业调度过程可以划分为几个主要阶段,这些阶段涉及到从作业提交到任务分配的各个环节。下面详细...
总结,Hadoop容量调度器通过精细的配置和调度策略,实现了多用户、多任务的公平资源分配,保障了集群的高效运行。理解并合理配置这些参数,对于优化Hadoop集群的性能和利用率至关重要。在实际操作中,应根据业务需求...
调度器在Hadoop中扮演着分配计算资源的角色,确保多任务并行执行时的公平性和效率。传统的Hadoop调度器采用的是First In First Out(FIFO)策略,即按作业提交的顺序分配资源,但这种方法并不适用于复杂的工作负载和...
YARN中的调度器可以根据应用程序的不同需求灵活配置。 #### 五、作业调度算法的设计原则 1. **公平性**:确保每个作业都有机会获得所需的资源。 2. **效率**:最小化作业完成时间,提高资源利用率。 3. **灵活性**...
综上所述,Hadoop的公平调度器通过引入资源池、最小保障资源、优先级处理和资源抢占等机制,为Hadoop集群提供了更为灵活和高效的资源管理能力,尤其是在多用户、多任务的复杂场景下,能够显著提升资源利用率和作业...
3. **优先级与权重**:公平调度器支持作业优先级与权重的概念,优先级类似于权重,用于决定每个作业能够获取的整体计算时间的比例。 4. **资源池管理**: - 默认情况下,每个用户有一个独立的资源池,确保用户无论...
本文主要探讨了Hadoop集群中的三种默认调度算法——FIFO(先进先出)、公平份额调度和计算能力调度,并涉及了在异构集群环境下的作业调度策略。 首先,FIFO调度算法是最简单的调度策略,类似于操作系统中的进程调度...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在廉价硬件上处理大量数据,提供了高可靠性、高扩展性和高效能的数据存储与处理能力。Hadoop的核心组件包括HDFS(Hadoop Distributed File System)、...
在大数据处理领域,Hadoop是不可或缺的核心组件,它提供了分布式存储和计算的能力。调度算法作为Hadoop中的关键部分,对于优化整个集群的性能至关重要。本文将深入探讨Hadoop调优中的调度算法,帮助理解其工作原理,...
在分布式计算领域,Hadoop是一个不可或缺的关键组件,它提供了可靠的数据存储和大规模数据处理能力。在Hadoop 2.8.2版本中,为了确保系统能够正常运行,我们需要正确配置四个核心的配置文件。这些配置文件是Hadoop...
3. `mapred-site.xml`: MapReduce是Hadoop的并行计算框架,`mapred-site.xml`中主要配置MapReduce与HDFS的交互,比如`mapreduce.framework.name`设置为`yarn`表示使用YARN作为资源管理器。此外,还可以配置...
在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。Hadoop3.1.3是Hadoop的一个稳定版本,包含了多个优化和改进,使得它在处理大规模数据时更加高效和可靠。本文将深入探讨Hadoop...
在Hadoop生态系统中,配置文件是管理和优化...这些配置参数可以根据实际需求进行调整,以优化集群性能、提高安全性或者满足特定的存储和计算需求。在Hadoop集群的日常管理和维护中,理解和掌握这些配置是非常必要的。
在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。本文将详细解析提供的几个关键配置文件,这些配置文件对于理解和优化Hadoop大数据集群的性能至关重要。 首先,`profile`文件...
YARN是Hadoop的资源调度器,`yarn-site.xml`配置了节点管理器、资源管理器的参数,如内存分配、CPU分配策略等。`yarn.nodemanager.resource.memory-mb`定义每个节点上可用的内存资源。 5. **mapred-site.xml** ...
公平调度器,作为Hadoop生态系统中的一种重要调度策略,旨在解决多用户共享集群环境下的资源分配问题,确保资源的合理与公平利用。相较于传统的先进先出(FIFO)调度方式,公平调度器在吞吐率上表现更优,尤其适用于...
Hadoop 2.2.0 是 Apache Hadoop 的一个关键版本,它包含了众多改进和优化,使得这个分布式计算框架在处理大数据集时更加高效和稳定。在这个配置文件中,我们将会探讨Hadoop 2.2.0 在4台CentOS 6.4系统上运行所需的...