需求
公司里有两个部门,一个叫hive,一个叫pig,这两个部门都需要使用公司里的hadoop集群。于是问题来了,因为hadoop默认是FIFO调度的,谁先提交任务,谁先被处理,于是hive部门很担心pig这个部门提交一个耗时的任务,影响了hive的业务,hive希望可以和pig在高峰期时,平均使用整个集群的计算容量,互不影响。
思路
hadoop的默认调度器是FIFO,但是也有计算容量调度器,这个调度器可以解决上述问题。可以在hadoop里配置三个队列,一个是default,一个是hive,一个是pig。他们的计算容量分别是30%,40%,30%.这样hive和pig这两个部门,分为使用hive和pig两个队列,其中default作为其他部门或者临时使用。但是,如果hive部门和pig部门又希望,在平常时,没有人用集群的时候,hive或者部门可以使用100%的计算容量。
解决方法
修改hadoop的配置文件mapred-site.xml:
<property>
<name>mapred.jobtracker.taskScheduler</name>
<value>org.apache.hadoop.mapred.CapacityTaskScheduler</value>
</property>
<property>
<name>mapred.queue.names</name>
<value>default,hive,pig</value>
</property>
在capacity-scheduler.xml文件中填写如下内容:
<property>
<name>mapred.capacity-scheduler.queue.hive.capacity</name>
<value>40</value>
<description>Percentage of the number of slots in the cluster that are
to be available for jobs in this queue.
</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> </description>
</property>
<property>
<name>mapred.capacity-scheduler.queue.hive.user-limit-factor</name>
<value>3</value>
<description></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>
这里配置了三个队列,分别是hive,pig,default,hive的容量是40%,由属性mapred.capacity-scheduler.queue.hive.capacity决定,其他队列的容量同理可得。
需要配置hive,pig,default可以抢占整个集群的资源,由属性mapred.capacity-scheduler.queue.hive.user-limit-factor绝对,hive队列这个值是3,所以用户可以使用的资源限量是40% * 3 =120%,所有有效计算容量是集群的100%.其他队列的最大集群计算容量同理可得。
如何使用该队列:
mapreduce:在Job的代码中,设置Job属于的队列,例如hive:
conf.setQueueName("hive");
hive:在执行hive任务时,设置hive属于的队列,例如pig:
set mapred.job.queue.name=pig;
动态更新集群队列和容量
生产环境中,队列及其容量的修改在现实中是不可避免的,而每次修改,需要重启集群,这个代价很高,如果修改队列及其容量的配置不重启呢:
1.在主节点上根据具体需求,修改好mapred-site.xml和capacity-scheduler.xml
2.把配置同步到所有节点上
3.使用hadoop用户执行命令:hadoop mradmin -refreshQueues
这样就可以动态修改集群的队列及其容量配置,不需要重启了,刷新mapreduce的web管理控制台可以看到结果。
注意:如果配置没有同步到所有的节点,一些队列会无法启用。
源站:http://www.cnblogs.com/ggjucheng/archive/2012/07/25/2608817.html
分享到:
相关推荐
### Azkaban任务调度安装配置和使用 #### 一、Azkaban介绍 ##### 1.1 为什么需要Azkaban 在大数据处理领域,一个完整的数据分析系统往往由多个任务单元组成,如Shell脚本、Java程序、MapReduce作业、Hive SQL脚本...
MapReduce作为一个流行的编程模型,其用于大数据处理的任务调度配置优化显得尤为重要。MapReduce编程模型是基于Google的研究成果,它能够将一个庞大的计算任务分解成若干小的子任务,分布到服务器集群的不同节点上...
4. **yarn-site.xml**:YARN相关配置,控制资源管理和任务调度。 #### 七、总结 MapReduce作为一种强大的分布式计算模型,为大数据处理提供了高效的解决方案。尽管存在一定的局限性,但在处理大规模静态数据集时...
Azkaban大数据任务调度器是一种高效的工作流管理系统,专门设计用于解决复杂的数据处理流程中的任务调度问题。在大数据处理场景中,通常会涉及到多个独立或相互依赖的任务单元,如Shell脚本、Java程序、MapReduce...
标题中的“行业分类-设备装置-一种基于Hadoop云计算平台的MapReduce作业流式调度方法及调度系统”表明,这是一个关于大数据处理领域的技术方案,主要关注如何在Hadoop平台上优化MapReduce作业的调度。Hadoop是Apache...
容量调度器(Capacity Scheduler)作为Hadoop MapReduce的重要组件,旨在确保多用户、多任务公平共享集群资源。它通过设定不同的队列(queue)来实现对作业的调度策略,确保每个队列能按其分配的容量获得相应的计算...
在Hadoop集群中,YARN(Yet Another Resource Negotiator)作为资源管理器,负责调度MapReduce任务的内存和CPU资源。YARN支持基于内存和CPU的两种资源调度策略,以确保集群资源的有效利用。在非默认配置下,合理地...
在Hadoop中,任务调度器是决定任务如何分配到不同节点的关键组件。传统上,Hadoop使用FIFO调度器,该调度器简单易实现,但不能满足不同作业的差异化需求,这在处理多样化的作业时会降低效率。为了克服这一局限,研究...
该项目是一款基于Java的FlowJob任务调度框架,设计源码包含454个文件,涵盖405个Java源文件、20个XML配置文件、11个YAML文件、5个SQL文件、2个HTTP配置文件、2个工厂类文件以及少量其他辅助文件。该框架支持多种任务...
HADOOP 作为大数据时代的重要技术之一,已经被广泛应用于各个行业中,其中任务调度器是 HADOOP 的一个重要组件。本文将介绍 HADOOP 工作调度器的相关知识点,主要基于 FACEBOOK 的使用经验。 一、Motivation 在 ...
包括NameNode(主节点,负责元数据管理)、DataNode(存储数据的节点)、SecondaryNameNode(辅助NameNode,用于周期性合并FsImage和EditLog,防止NameNode内存压力过大)、ResourceManager(资源调度器,...
1. **任务调度策略**:如基于优先级的调度、基于公平性的调度、混合策略等,确保各种类型的任务都能得到合理分配。 2. **容错机制**:如何检测和处理任务失败,重试策略,以及如何避免死锁和资源浪费。 3. **资源...
在提供的压缩包中,"路径寻优.docx"可能包含了关于如何优化Hadoop MapReduce任务执行路径的文档,这通常涉及到数据本地化、任务调度策略和集群资源管理等方面,以提高处理效率和降低网络传输成本。 "project001.jar...
这种配置使得框架能够有效地在存储数据的节点上调度任务,从而在集群中获得极高的总带宽。 MapReduce框架由一个主节点JobTracker和每个集群节点一个从节点TaskTracker组成。主节点负责在从节点上调度作业的组件任务...
对于MapReduce,这意味着JobTracker被分解为ResourceManager和TaskTracker,分别负责资源管理和任务调度。 7. **优化与扩展**: WordCount只是一个基础示例,实际应用中可以进行优化,例如使用Combiner减少网络...
总结,MapReduce的源码分析涵盖了数据分片、Map函数、Shuffle过程、Reduce函数、输入输出格式、任务调度等多个关键部分。理解这些核心组件的工作原理,有助于我们更高效地利用Hadoop MapReduce处理大数据,同时也...
YARN的引入是为了分离MapReduce的资源管理和任务调度,使得系统能更灵活地支持其他计算框架,如Spark、Tez等。YARN的核心组件包括ResourceManager(RM)、NodeManager(NM)和ApplicationMaster(AM)。RM全局负责...
ResourceManager:负责管理集群中的资源分配和任务调度。 ApplicationMaster:负责管理单个应用程序的执行,包括资源申请、任务分配和监控。 NodeManager:负责管理单个节点上的资源分配和任务执行。 三、...
在Hadoop中,MapReduce框架提供了一整套的生态系统,包括JobTracker(在Hadoop 2.x中被YARN取代)来调度和监控任务,TaskTracker(在Hadoop 2.x中被NodeManager取代)执行实际的Map和Reduce任务,以及DataNode存储...