`
乡里伢崽
  • 浏览: 108759 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mapreduce 任务调度器的配置

 
阅读更多
需求

公司里有两个部门,一个叫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
分享到:
评论

相关推荐

    linux调度模拟器LinSched.zip

    因为 Google 在执行特定任务(例如 MapReduce)的大量同型机集群上投资,所以针对该任务和环境调整调度有意义。在 LinSched 使用中,Google 还有助于增强适用于完全公平调度器(Completely Fair Scheduler,CFS)的 ...

    Oozie大数据调度系统从入门到精通视频教程

    第一章:工作流任务调度系统 1.大数据调度系统概论 2.企业级工作流 3.工作流依赖调度 4.工作流定时调度 第二章:企业级任务流调度系统Oozie 1.Oozie的应用场景 2.Oozie的功能及模块 3.Oozie的与MR的关系 ...

    Oozie安装部署及任务定义说明

    Oozie提交MapReduce任务事例 8 1上传lib和wf到hdfs上 8 2修改job.properties文件 8 3:修改workflow.xml 9 4:执行oozie客户端命令执行mapreduce 10 配置oozie工作流 10 Workflow.xml中控制流程节点说明 10 action...

    Google_MapReduce中文版-系统架构

    MapReduce架构的程序能够在大量的普通配置的计算机上实现并行化处理。这个系统在运行时只关 心:如何分割输入数据,在大量计算机组成的集群上的调度,集群中计算机的错误处理,管理集群中计 算机之间必要的通信。...

    Degraded-First-Scheduler:擦除编码的CFS的任务级MapReduce调度程序

    该脚本将降级的第一个调度程序集成到hadoop-0.22.0中,并可以帮助您完成大多数配置。 bash install.sh 在$ HADOOP_HOME / conf / masters中,输入名称节点的主机名或主机IP(如果不需要,请不要忘记删除默认值)。 ...

    Oozie的使用

    apps1.4编写脚本p1.sh1.5修改配置文件1.5.1job.properties1.5.2workflow.xml1.6上传任务到hdfs1.7执行任务2.Oozie逻辑...调度MapReduce任务3.1拷贝官方案例模板3.2测试mapreduce jar3.3修改配置文件3.3.1job.properti

    hadoop 1.2.1 api 最新chm 伪中文版

    然后,Hadoop的 job client提交作业(jar包/可执行程序等)和配置信息给JobTracker,后者负责分发这些软件和配置信息给slave、调度任务并监控它们的执行,同时提供状态和诊断信息给job-client。 虽然Hadoop框架是用...

    【63课时完整版】大数据实践HIVE详解及实战

    课程目录: 第1章:Hive基本架构及环境部署 1.MapReduce分析与SQL分析对比 2.Hive的介绍及其发展 3.Hive的安装部署及启动 4.Hive的基本架构讲解 5.安装MySQL作为元数据库存储 ...63.Zeus平台实现任务调度应用(三)

    08Hadoop架构的Yarn & MapReduce集群配置,时间同步,安全模式,动态增删节点——好程序

    yarn集群配置与任务调度 yarn集群的安装配置 vi $HADOOP_HOME/etc/hadoop/yarn-site.xml yarn.resourcemanager.hostname hadoop0001 yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager....

    MapReduce-Engine-and-Distributed-File-System

    我们使用高效的调度算法来调度地图并减少任务,因此,我们在每个阶段都通过并行实现了最大的性能提升。 健康检查和容错。 在我们的系统中,主节点和从节点通过心跳机制保持通信。 一旦一个从属服务器宕机,我们将...

    hadoop安装与配置.pdf

    其核心组件包括HDFS(Hadoop分布式文件系统,用于存储)、MapReduce(分布式离线计算框架)和YARN(资源调度框架)。此外,Hadoop广义上指的是一个更广泛的概念,即Hadoop生态系统,其中还包括了Hive数据仓库工具、...

    PowerJob-其他

    故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。 PowerJob适用场景: 有定时执行需求的业务场景:如每天凌晨全量同步数据、生成业务报表等。 ...

    Hadoop权威指南 第二版(中文版)

     作业的调度  Fair Scheduler  Capacity Scheduler  shuffle和排序  map端  reduce端  配置的调优  任务的执行  推测式执行  重用JVM  跳过坏记录  任务执行环境 第7章 MapReduce的类型与格式  ...

    Hadoop权威指南(中文版)2015上传.rar

    作业的调度 Fair Scheduler Capacity Scheduler shuffle和排序 map端 reduce端 配置的调优 任务的执行 推测式执行 重用JVM 跳过坏记录 任务执行环境 第7章 MapReduce的类型与格式 MapReduce的类型 默认的MapReduce...

    大数据开源框架集锦.pdf

    ⾼效的数据同步 11 消息系统 Pulsar 企业级分布式消息系统,有替代Kafka的趋势 Kafka 发布/订阅的消息系统,由Scala写成 RocketMQ 阿⾥巴巴分布式、队列模型的消息中间件 12 任务调度 Azkaban 批量⼯作流任务调度器,...

    阿里巴巴开源的分布式计算系统 JStorm.zip

    JStorm 是一个类似Hadoop MapReduce的系统, 用户按照指定的接口实现一个任务,然后将这个任务递交给JStorm系统,Jstorm将这个任务跑起来,并且按7 * 24小时运行起来,一旦中间一个Worker 发生意外故障, 调度器立即...

    大数据视频_Oozie视频教程

    Oozie是大数据生态圈中一个基于工作流的任务调度工具,也是...在本课程中,你将学习到,Oozie的原理、安装配置、使用Oozie实现调度Shell脚本、逻辑调度多个Shell脚本、直接调度MapReduce任务以及定时逻辑调度多个任务。

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    技术点37 作业竞争和调度器限制 技术点38 使用堆转储来查找未优化的用户代码 6.2.5 硬件性能问题 技术点39 查找硬件的失效 技术点40 CPU 竞争 . 技术点41 内存交换 技术点42 磁盘健康 技术点43 网络 6.3...

    新版全面系统完整的Oozie教程

    Oozie是大数据生态圈中一个基于工作流的任务调度工具,也是大数据工程师的一个常用工具。 在本课程中,你将学习到Oozie的原理、 安装配置、使用Oozie实现调度Shell脚本、 逻辑调度多个Shell脚本、 直接调度MapReduce...

Global site tag (gtag.js) - Google Analytics