- 浏览: 2183190 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
资源调度器是Hadoop集群中一个比较重要的模块,最初的hadoop资源调度器是基于队列形式的FIFO调度的,这种模式在大规模集群的时候,资源分配并不是很合理,比如一个后提交的任务,但想要它先执行怎么办,而在FIFO模式下,只能等到前面所有的JOB执行完后,才能执行这个作业。所以如何进行资源的合理管理和分配,就成了一个急待解决的需求,由此就产生了后来的二个非常优秀的调度器分别是Yahoo!开源的CapacityScheduler(容量调度器)和Facebook开源的FairScheduler(公平调度器),在Hadoop2.x中,基于YARN平台的资源调度又对这三种调度器进行了整合,封装和重写,由此来统一YARN平台的资源调度和分配,大大简化了管理员对资源调度的操作和控制。
下面给出一个资料图看下这三个调度器之间的异同点
总结如下:
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里面的配置
capacity-scheduler.xml里面的核心配置,截图如下
配置完成之后,同步到整个集群,然后开启动态更新命令,就可以启动集群,访问50030端口在web监控页面上看到队列的资源分配情况。
截图如下:
至此,容量调度器已经成功配置,在使用的时候,就可以根据作业的优先级对应提交到不用的队列上来合理的获取系统资源。
最后,散仙在总结一下,配置过程中遇到的一个问题。散仙原来的集群使用的是hadoop默认的tmp的路径,结果在集群启动时,有时会出现datanode无法启动的BUG,查看log日志,报了如下的异常信息:
注意如下一段异常
这个异常的产生,很大的关系跟tmp目录有联系,所以散仙建议,还是在hadoop目录下,新建一个tmp专门存放hadoop的格式信息,如果是已经在hadoop目录下有的tmp目录,还出现datanode无法正常启动的情况,需要我们关闭集群服务,进入tmp文件夹下,执行命令,rm -rf * 删除所有的文件,在重新格式化namenode,并重启集群就可以了。
下面给出一个资料图看下这三个调度器之间的异同点
对比选项 | FifoScheduler | CapacityScheduler | FairScheduler |
设计目的 | 最简单的调度器,易于理解和上手 | 多用户的情况下,最大化集群的吞吐和利用率 | 多用户的情况下,强调用户公平地贡献资源 |
队列组织方式 | 单队列 | 树状组织队列。无论父队列还是子队列都会有资源参数限制,子队列的资源限制计算是基于父队列的。应用提交到叶子队列。 | 树状组织队列。但是父队列和子队列没有参数继承关系。父队列的资源限制对子队列没有影响。应用提交到叶子队列。 |
资源限制 | 无 | 父子队列之间有容量关系。每个队列限制了资源使用量,全局最大资源使用量,最大活跃应用数量等。 | 每个叶子队列有最小共享量,最大资源量和最大活跃应用数量。用户有最大活跃应用数量的全局配置。 |
队列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,并重启集群就可以了。
发表评论
-
Apache Flink在阿里的使用(译)
2019-02-21 21:18 1173Flink是未来大数据实时 ... -
计算机图形处理的一些知识
2018-04-25 17:46 1228最近在搞opencv来做一些 ... -
如何在kylin中构建一个cube
2017-07-11 19:06 1267前面的文章介绍了Apache Kylin的安装及数据仓 ... -
Apache Kylin的入门安装
2017-06-27 21:27 2144Apache Kylin™是一个开源的分布式分析引擎,提供 ... -
ES-Hadoop插件介绍
2017-04-27 18:07 1991上篇文章,写了使用spark集成es框架,并向es写入数据,虽 ... -
如何在Scala中读取Hadoop集群上的gz压缩文件
2017-04-05 18:51 2129存在Hadoop集群上的文件,大部分都会经过压缩,如果是压缩 ... -
如何收集项目日志统一发送到kafka中?
2017-02-07 19:07 2791上一篇(http://qindongliang.iteye. ... -
Hue+Hive临时目录权限不够解决方案
2016-06-14 10:40 4702安装Hue后,可能会分配多个账户给一些业务部门操作hive,虽 ... -
Hadoop的8088页面失效问题
2016-03-31 11:21 4448前两天重启了测试的hadoop集群,今天访问集群的8088任 ... -
Hadoop+Hbase集群数据迁移问题
2016-03-23 21:00 2523数据迁移或备份是任何 ... -
如何监控你的Hadoop+Hbase集群?
2016-03-21 16:10 4919前言 监控hadoop的框架 ... -
Logstash与Kafka集成
2016-02-24 18:44 11624在ELKK的架构中,各个框架的角色分工如下: Elastic ... -
Kakfa集群搭建
2016-02-23 15:36 2645先来整体熟悉下Kafka的一些概念和架构 (一)什么是Ka ... -
大数据日志收集框架之Flume入门
2016-02-02 14:25 4186Flume是Cloudrea公司开源的一款优秀的日志收集框架 ... -
Apache Tez0.7编译笔记
2016-01-15 16:33 2522目前最新的Tez版本是0.8,但还不是稳定版,所以大家还 ... -
Bug死磕之hue集成的oozie+pig出现资源任务死锁问题
2016-01-14 15:52 3831这两天,打算给现有的 ... -
Hadoop2.7.1和Hbase0.98添加LZO压缩
2016-01-04 17:46 26031,执行命令安装一些依赖组件 yum install -y ... -
Hadoop2.7.1配置NameNode+ResourceManager高可用原理分析
2015-11-11 19:51 3177关于NameNode高可靠需要配置的文件有core-site ... -
设置Hadoop+Hbase集群pid文件存储位置
2015-10-20 13:40 2848有时候,我们对运行几 ... -
Hadoop+Maven项目打包异常
2015-08-11 19:36 1564先简单说下业务:有一个单独的模块,可以在远程下载Hadoop上 ...
相关推荐
### Hadoop 1.2.1 安装部署知识点总结 #### 一、Hadoop 来源及设计思想 - **Hadoop 设计思想**:Hadoop 的设计初衷是为了实现大规模数据处理的需求,通过分布式计算的方式提高数据处理的效率。其核心是分布式文件...
"Hadoop 1.2.1 版本下修改 WordCount 程序并编译" Hadoop 是一种基于分布式处理的大数据处理框架,其中 WordCount 程序是一个经典的示例程序,用于统计文本文件中的词频信息。在 Hadoop 1.2.1 版本下,我们可以修改...
【Hadoop 1.2.1 安装详解】 在本文中,我们将深入探讨如何在Linux环境下安装Hadoop 1.2.1集群。Hadoop是Apache软件基金会开发的一个开源框架,主要用于处理和存储大量数据,它利用分布式计算模型实现高效的数据处理...
总结,Hadoop容量调度器通过精细的配置和调度策略,实现了多用户、多任务的公平资源分配,保障了集群的高效运行。理解并合理配置这些参数,对于优化Hadoop集群的性能和利用率至关重要。在实际操作中,应根据业务需求...
在Hadoop 1.2.1中,YARN作为资源管理器,负责任务调度和集群资源的分配。尽管YARN API不直接包含在`hadoop-1.2.1-api`中,但了解其工作原理对于理解Hadoop的运行机制至关重要。YARN通过ResourceManager和NodeManager...
在Linux上配置的hadoop1.2.1完全分布式环境
Hadoop1.2.1配置Ganlia监控
### Hadoop 1.2.1 配置过程详解 #### 一、环境搭建与配置 **1. 创建目录** mkdir /app 在Linux环境下创建一个 `/app` 目录,用于存放JDK和Hadoop等软件。 **2. 解压 JDK 和 Hadoop 到 `/app` 目录** tar -...
8. **Hadoop源码分析**:通过对这些源码的学习,我们可以理解Hadoop内部的工作流程,如数据分块、副本策略、任务调度、错误恢复等。这对于开发和优化Hadoop应用程序、调试集群问题以及理解分布式系统原理非常有价值...
YARN则是Hadoop 1.2.1引入的新一代资源管理系统,负责集群资源的调度和分配,提高了系统整体性能。 接下来是“docs”目录,其中包含了Hadoop的API文档。这对于开发者来说至关重要,因为通过API文档,开发者可以了解...
Hadoop1.2.1-Eclipse-Indigo 插件是专门为 Eclipse Indigo 版本设计的,目的是为了优化在该版本 IDE 中的 Hadoop 体验。 这个插件包含了以下关键功能和知识点: 1. **集成开发环境**:Eclipse 是一个广泛使用的 ...
### Hadoop-1.2.1 运行WordCount实例详解 #### 一、环境准备与搭建 在开始运行WordCount实例之前,首先确保已经按照之前的步骤完成了Hadoop-1.2.1环境的搭建。这包括但不限于安装JDK、配置Hadoop环境变量以及设置...
部署Hadoop 1.2.1集群是一个复杂但有序的过程,涉及到系统配置、软件安装、环境变量设置、SSH安全配置以及详细的Hadoop配置。遵循上述指南,您可以顺利地在三台虚拟机上建立一个功能完善的Hadoop集群,为大数据处理...
4. **JobTracker和TaskTracker**:在Hadoop 1.2.1中,JobTracker是任务调度和资源管理的中心,负责分配任务给TaskTracker。TaskTracker运行在各个节点上,接收并执行JobTracker分发的任务。 5. **Configuration**:...
### Hadoop 1.2.1 安装与配置指南 #### 一、概述 本文档旨在指导用户完成Hadoop 1.2.1版本在Linux环境下的安装与配置过程。Hadoop是一款开源软件框架,主要用于分布式存储和处理大规模数据集。通过本手册的学习,...
【Hadoop 1.2.1 伪分布式安装在Mac上的详细步骤】 Hadoop是一个开源的分布式计算框架,常用于大数据处理。在这个教程中,我们将详细介绍如何在Mac系统上安装Hadoop 1.2.1的伪分布式模式,这是一种单机模拟多节点...
hadoop1.2.1在Centos6.5系统中搭建的详细步骤
此外,源码还包含了各种实用工具和接口,如Hadoop命令行工具、配置文件管理和客户端API,这些对于开发者来说都是宝贵的参考资料。 关于“mapreduce例子”,这可能指的是包含在源码中的示例程序,它们用于演示...
在给定的压缩包文件“hadoop-1.2.1-jar(全)”中,包含了Hadoop 1.2.1版本的多个重要组件的JAR包,这对于开发者和系统管理员在搭建、理解和使用Hadoop环境时非常关键。 1. **hadoop-core-1.2.1.jar**:这是Hadoop的...
hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1