`
qindongliang1922
  • 浏览: 2183190 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117506
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125888
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59878
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71283
社区版块
存档分类
最新评论

图解Hadoop1.2.1容量调度器的配置

阅读更多
资源调度器是Hadoop集群中一个比较重要的模块,最初的hadoop资源调度器是基于队列形式的FIFO调度的,这种模式在大规模集群的时候,资源分配并不是很合理,比如一个后提交的任务,但想要它先执行怎么办,而在FIFO模式下,只能等到前面所有的JOB执行完后,才能执行这个作业。所以如何进行资源的合理管理和分配,就成了一个急待解决的需求,由此就产生了后来的二个非常优秀的调度器分别是Yahoo!开源的CapacityScheduler(容量调度器)和Facebook开源的FairScheduler(公平调度器),在Hadoop2.x中,基于YARN平台的资源调度又对这三种调度器进行了整合,封装和重写,由此来统一YARN平台的资源调度和分配,大大简化了管理员对资源调度的操作和控制。


下面给出一个资料图看下这三个调度器之间的异同点

对比选项FifoSchedulerCapacitySchedulerFairScheduler
设计目的最简单的调度器,易于理解和上手 多用户的情况下,最大化集群的吞吐和利用率 多用户的情况下,强调用户公平地贡献资源
队列组织方式单队列 树状组织队列。无论父队列还是子队列都会有资源参数限制,子队列的资源限制计算是基于父队列的。应用提交到叶子队列。树状组织队列。但是父队列和子队列没有参数继承关系。父队列的资源限制对子队列没有影响。应用提交到叶子队列。
资源限制 父子队列之间有容量关系。每个队列限制了资源使用量,全局最大资源使用量,最大活跃应用数量等。每个叶子队列有最小共享量,最大资源量和最大活跃应用数量。用户有最大活跃应用数量的全局配置。
队列ACL限制可以限制应用提交权限 可以限制应用提交权限和队列开关权限,父子队列间的ACL会继承。可以限制应用提交权限,父子队列间的ACL会继承。但是由于支持客户端动态创建队列,需要限制默认队列的应用数量。目前,还看不到关闭动态创建队列的选项。
队列排序算法按照队列的资源使用量最小的优先根据公平排序算法排序
应用选择算法 先进先出 先进先出 先进先出或者公平排序算法
本地优先分配支持 支持 支持
延迟调度不支持 不支持 支持
资源抢占不支持不支持支持


总结如下:
FifoScheduler:最简单的调度器,按照先进先出的方式处理应用。只有一个队列可提交应用,所有用户提交到这个队列。可以针对这个队列设置ACL。没有应用优先级可以配置。

CapacityScheduler:可以看作是FifoScheduler的多队列版本。每个队列可以限制资源使用量。但是,队列间的资源分配以使用量作排列依据,使得容量小的队列有竞争优势。集群整体吞吐较大。延迟调度机制使得应用可以放弃,夸机器或者夸机架的调度机会,争取本地调度。

FairScheduler:多队列,多用户共享资源。特有的客户端创建队列的特性,使得权限控制不太完美。根据队列设定的最小共享量或者权重等参数,按比例共享资源。延迟调度机制跟CapacityScheduler的目的类似,但是实现方式稍有不同。资源抢占特性,是指调度器能够依据公平资源共享算法,计算每个队列应得的资源,将超额资源的队列的部分容器释放掉的特性。



下面进入正题,散仙配置的是CapacityScheduler也就是容量调度器,环境是Centos6.4,hadoop1.2的版本,关于集群的搭建,在这里就不多涉及了,有兴趣的朋友,可以参考散仙的前几篇博客。

配置容量调度器,总结一下,有这么几步需要配置

1,在Master节点上的mapred-site.xml里面引用调度类,并配置队列名字
2,在Master节点上的capacity-scheduler.xml里面配置资源分配的大小
3,如果是在集群模式下,使用scp -r命令拷贝这个文件同步到所有的slave节点上
4,开启动态更新命令,bin/hadoop dfsadmin -refreshQueues,这样就可以动态修改集群的队列及其容量配置,不需要重启整个集群。

下面给出配置截图,散仙配置的是4个队列,命名依次为a,b,c,d
mapred-site.xml里面的配置

<configuration>

<property> 
<name>mapred.job.tracker</name>
<value>10.2.143.5:9001</value>
</property>

<property>
<name>mapred.jobtracker.taskScheduler</name>
<value>org.apache.hadoop.mapred.CapacityTaskScheduler</value>
</property>
<property>
<name>mapred.queue.names</name>
<value>a,b,c,d</value>
</property>

</configuration>


capacity-scheduler.xml里面的核心配置,截图如下
<!--queue1-->
  <property>
    <name>mapred.capacity-scheduler.queue.a.capacity</name>
    <value>5</value>
     
  </property>
 
<!--queue2-->
  <property>
    <name>mapred.capacity-scheduler.queue.b.capacity</name>
    <value>50</value>
  </property>
<!--queue3-->
  <property>
    <name>mapred.capacity-scheduler.queue.c.capacity</name>
    <value>25</value>
  </property>
  
  <!--queue4-->
  <property>
    <name>mapred.capacity-scheduler.queue.d.capacity</name>
    <value>20</value>
  </property>



配置完成之后,同步到整个集群,然后开启动态更新命令,就可以启动集群,访问50030端口在web监控页面上看到队列的资源分配情况。
截图如下:






至此,容量调度器已经成功配置,在使用的时候,就可以根据作业的优先级对应提交到不用的队列上来合理的获取系统资源。

最后,散仙在总结一下,配置过程中遇到的一个问题。散仙原来的集群使用的是hadoop默认的tmp的路径,结果在集群启动时,有时会出现datanode无法启动的BUG,查看log日志,报了如下的异常信息:
2013-10-31 04:19:02,035 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /default-rack/Slave2
2013-10-31 04:19:02,038 INFO org.apache.hadoop.mapred.JobTracker: Adding tracker tracker_Slave2:localhost/127.0.0.1:56885 to host Slave2
2013-10-31 04:19:02,477 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /default-rack/Slave
2013-10-31 04:19:02,478 INFO org.apache.hadoop.mapred.JobTracker: Adding tracker tracker_Slave:localhost/127.0.0.1:51876 to host Slave
2013-10-31 04:19:02,931 WARN org.apache.hadoop.mapred.JobTracker: Retrying...
2013-10-31 04:19:02,959 WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /root/hadoop-1.2.0/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1920)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:783)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:587)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1432)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1428)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:396)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
	at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1426)

	at org.apache.hadoop.ipc.Client.call(Client.java:1107)
	at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229)
	at com.sun.proxy.$Proxy7.addBlock(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
	at com.sun.proxy.$Proxy7.addBlock(Unknown Source)
	at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3720)
	at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3580)
	at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2600(DFSClient.java:2783)
	at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:3023)

2013-10-31 04:19:02,960 WARN org.apache.hadoop.hdfs.DFSClient: Error Recovery for null bad datanode[0] nodes == null
2013-10-31 04:19:02,960 WARN org.apache.hadoop.hdfs.DFSClient: Could not get block locations. Source file "/root/hadoop-1.2.0/tmp/mapred/system/jobtracker.info" - Aborting...
2013-10-31 04:19:02,960 WARN org.apache.hadoop.mapred.JobTracker: Writing to file hdfs://10.2.143.5:9090/root/hadoop-1.2.0/tmp/mapred/system/jobtracker.info failed!
2013-10-31 04:19:02,961 WARN org.apache.hadoop.mapred.JobTracker: FileSystem is not ready yet!
2013-10-31 04:19:02,965 WARN org.apache.hadoop.mapred.JobTracker: Failed to initialize recovery manager. 

注意如下一段异常
2013-10-31 04:19:02,959 WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /root/hadoop-1.2.0/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1

这个异常的产生,很大的关系跟tmp目录有联系,所以散仙建议,还是在hadoop目录下,新建一个tmp专门存放hadoop的格式信息,如果是已经在hadoop目录下有的tmp目录,还出现datanode无法正常启动的情况,需要我们关闭集群服务,进入tmp文件夹下,执行命令,rm -rf * 删除所有的文件,在重新格式化namenode,并重启集群就可以了。
  • 大小: 42.7 KB
  • 大小: 54.1 KB
  • 大小: 88.5 KB
  • 大小: 83.6 KB
  • 大小: 96.4 KB
0
0
分享到:
评论

相关推荐

    hadoop1.2.1安装部署文档

    ### Hadoop 1.2.1 安装部署知识点总结 #### 一、Hadoop 来源及设计思想 - **Hadoop 设计思想**:Hadoop 的设计初衷是为了实现大规模数据处理的需求,通过分布式计算的方式提高数据处理的效率。其核心是分布式文件...

    hadoop1.2.1修改WordCount并编译

    "Hadoop 1.2.1 版本下修改 WordCount 程序并编译" Hadoop 是一种基于分布式处理的大数据处理框架,其中 WordCount 程序是一个经典的示例程序,用于统计文本文件中的词频信息。在 Hadoop 1.2.1 版本下,我们可以修改...

    hadoop1.2.1安装

    【Hadoop 1.2.1 安装详解】 在本文中,我们将深入探讨如何在Linux环境下安装Hadoop 1.2.1集群。Hadoop是Apache软件基金会开发的一个开源框架,主要用于处理和存储大量数据,它利用分布式计算模型实现高效的数据处理...

    hadoop 容量调度器

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

    hadoop-1.2.1-api

    在Hadoop 1.2.1中,YARN作为资源管理器,负责任务调度和集群资源的分配。尽管YARN API不直接包含在`hadoop-1.2.1-api`中,但了解其工作原理对于理解Hadoop的运行机制至关重要。YARN通过ResourceManager和NodeManager...

    hadoop1.2.1环境

    在Linux上配置的hadoop1.2.1完全分布式环境

    Hadoop1.2.1配置Ganlia监控

    Hadoop1.2.1配置Ganlia监控

    hadoop1.2.1配置过程

    ### Hadoop 1.2.1 配置过程详解 #### 一、环境搭建与配置 **1. 创建目录** mkdir /app 在Linux环境下创建一个 `/app` 目录,用于存放JDK和Hadoop等软件。 **2. 解压 JDK 和 Hadoop 到 `/app` 目录** tar -...

    hadoop 1.2.1核心源码

    8. **Hadoop源码分析**:通过对这些源码的学习,我们可以理解Hadoop内部的工作流程,如数据分块、副本策略、任务调度、错误恢复等。这对于开发和优化Hadoop应用程序、调试集群问题以及理解分布式系统原理非常有价值...

    hadoop-1.2.1源码(完整版)

    YARN则是Hadoop 1.2.1引入的新一代资源管理系统,负责集群资源的调度和分配,提高了系统整体性能。 接下来是“docs”目录,其中包含了Hadoop的API文档。这对于开发者来说至关重要,因为通过API文档,开发者可以了解...

    hadoop1.2.1-eclipse-indigo插件

    Hadoop1.2.1-Eclipse-Indigo 插件是专门为 Eclipse Indigo 版本设计的,目的是为了优化在该版本 IDE 中的 Hadoop 体验。 这个插件包含了以下关键功能和知识点: 1. **集成开发环境**:Eclipse 是一个广泛使用的 ...

    hadoop-1.2.1运行WordCount

    ### Hadoop-1.2.1 运行WordCount实例详解 #### 一、环境准备与搭建 在开始运行WordCount实例之前,首先确保已经按照之前的步骤完成了Hadoop-1.2.1环境的搭建。这包括但不限于安装JDK、配置Hadoop环境变量以及设置...

    hadoop1.2.1部署说明

    部署Hadoop 1.2.1集群是一个复杂但有序的过程,涉及到系统配置、软件安装、环境变量设置、SSH安全配置以及详细的Hadoop配置。遵循上述指南,您可以顺利地在三台虚拟机上建立一个功能完善的Hadoop集群,为大数据处理...

    hadoop1.2.1-API中文版

    4. **JobTracker和TaskTracker**:在Hadoop 1.2.1中,JobTracker是任务调度和资源管理的中心,负责分配任务给TaskTracker。TaskTracker运行在各个节点上,接收并执行JobTracker分发的任务。 5. **Configuration**:...

    hadoop-1.2.1-安装配置手册(含安装介质)

    ### Hadoop 1.2.1 安装与配置指南 #### 一、概述 本文档旨在指导用户完成Hadoop 1.2.1版本在Linux环境下的安装与配置过程。Hadoop是一款开源软件框架,主要用于分布式存储和处理大规模数据集。通过本手册的学习,...

    Hadoop 1.2.1 伪分布式安装 Mac版

    【Hadoop 1.2.1 伪分布式安装在Mac上的详细步骤】 Hadoop是一个开源的分布式计算框架,常用于大数据处理。在这个教程中,我们将详细介绍如何在Mac系统上安装Hadoop 1.2.1的伪分布式模式,这是一种单机模拟多节点...

    hadoop1.2.1 Centos系统搭建

    hadoop1.2.1在Centos6.5系统中搭建的详细步骤

    hadoop1-2-1源码

    此外,源码还包含了各种实用工具和接口,如Hadoop命令行工具、配置文件管理和客户端API,这些对于开发者来说都是宝贵的参考资料。 关于“mapreduce例子”,这可能指的是包含在源码中的示例程序,它们用于演示...

    hadoop -1.2.1-jar(全)

    在给定的压缩包文件“hadoop-1.2.1-jar(全)”中,包含了Hadoop 1.2.1版本的多个重要组件的JAR包,这对于开发者和系统管理员在搭建、理解和使用Hadoop环境时非常关键。 1. **hadoop-core-1.2.1.jar**:这是Hadoop的...

    好用hadoop-eclipse-plugin-1.2.1

    hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1

Global site tag (gtag.js) - Google Analytics