- 浏览: 59723 次
- 性别:
- 来自: 北京
最新评论
-
scu_cxh:
您好,我在学习hadoop方面的东西,想做一个对task监控的 ...
JobClient应用概述 -
bennie19870116:
看不到图呢...
Eclipse下配置使用Hadoop插件
一、需求背景
由于我们在做一些业务的时候,可能需要多个Job来组合才能满足一个也许需求,而每个Job之间都有依赖关系,所以产生了需要对Job顺序的控制。总结一下需求,大体如下:
1、Job之间有先后的顺序执行问题。
2、需要对每个Job的状态进行监控(是否完成以及失败情况处理等等)
3、对可以并发执行的Job调整。
4、每个Job处理时的信息的采集以及记录。
5、能够灵活添加或删除要执行的Job队列。
如果以上需求去掉2和4,那么,我们通过脚本就可以做到(如shell)。但是如果要获取Job的详细信息以及Job运行时的状态,那么还是需要调用Hadoop的API来实现。所以,这里我选择了Java语言来实现以上需求。
二、环境简述
1、操作系统Linux、JDK1.6
2、Hadoop 0.20.2
3、开发工具选择eclipse 3.3.2(可配合使用hadoop的插件)
三、设计思路
这里的设计必须要满足以上的需求,设计内容大体如下:
1、通过周期的遍历时间,获得Job队列启动时间,并在启动之前加载Job配置文件。
2、通过配置Job的列表来确定Job执行的先后顺序以及哪些可以并发哪些不能并发。
3、通过JobClinet来采集相关的Job信息。
4、对失败的Job有重新尝试执行的机制。
四、实现关键点
设计出来了,那么实现就需要一些关键点的考虑,一下是我总结的一些关键点:
1、Job配置文件设计。我这里对每个Job都有自己的编号,在队列任务启动之间都会加载该配置文件,根据用户自己配置的Job顺序来依次的启动Job。
2、上面提到的是典型的FIFO模式,hadoop本身通过配置可以实现公平调度模式,那么只要把集群配置完成,我们通过修改Job执行的配置文件也可以实现并发启动。这里的配置文件我就不详细列出来,各自的定义也不尽相同。关键点就是通过配置文件可以明显的标识出那一些Job是需要顺序执行,哪一些Job是可以并发执行就可以。读取文件之后程序获得了此信息就可以按照配置文件执行。在这里我通过java.util.concurrent.Semaphore类来实现。具体代码不写了。
3、如何通过java代码启动Job,这里我考虑的是使用Hadoop的API来实现。最早我也犯了个错误,采用exec的方式执行,后来我跟踪源代码找到我们在控制台输入hadoop jar的启动原理之后,将代码做了修改,采用了org.apache.hadoop.util.RunJar这个类,具体方法可以自己细看。
4、对于信息的采集,这里比较麻烦,应为我要采集到确定是通过我启动的Job,那么我必须有一个依据,这里我的依据就是JobName。在队列配置文件中将配置此JobName。同Job内部代码编写的Job job = new Job(conf, "JobName");需要一直。这样,通过JobName我能获取JobID,这样,最终就能定位并获取该Job的详细信息。
5、失败任务尝试。这里需要说明如果Job执行返回状态是fail,那么可以参照设定的失败次数进行重复尝试。也就是递归的调用。
6、Job启动之前还需要做一系列的检查工作。例如集群是否正常、输入和输出目录是否存在以及处理办法、指定的Jar文件是否存在等等。这些通过调用API都能实现。
五、总结
1、代码已编写完成,也经过了一些测试,基本没有大的问题。
2、一些信息的采集可能不够完成,只能做到一些基本状态的采集,不能作为性能监控和硬件监控的依据。
3、可能还存在一些漏洞和不完整的地方,后面我会持续的改进。
4、对于Hive我在这里还未提到,不使用Hive和不使用shell理由基本一致。如果做简单的业务,个人认为Hive还是首选。
5、写的不对或是有疑问的地方欢迎发邮件讨论。dajuezhao@gmail.com
由于我们在做一些业务的时候,可能需要多个Job来组合才能满足一个也许需求,而每个Job之间都有依赖关系,所以产生了需要对Job顺序的控制。总结一下需求,大体如下:
1、Job之间有先后的顺序执行问题。
2、需要对每个Job的状态进行监控(是否完成以及失败情况处理等等)
3、对可以并发执行的Job调整。
4、每个Job处理时的信息的采集以及记录。
5、能够灵活添加或删除要执行的Job队列。
如果以上需求去掉2和4,那么,我们通过脚本就可以做到(如shell)。但是如果要获取Job的详细信息以及Job运行时的状态,那么还是需要调用Hadoop的API来实现。所以,这里我选择了Java语言来实现以上需求。
二、环境简述
1、操作系统Linux、JDK1.6
2、Hadoop 0.20.2
3、开发工具选择eclipse 3.3.2(可配合使用hadoop的插件)
三、设计思路
这里的设计必须要满足以上的需求,设计内容大体如下:
1、通过周期的遍历时间,获得Job队列启动时间,并在启动之前加载Job配置文件。
2、通过配置Job的列表来确定Job执行的先后顺序以及哪些可以并发哪些不能并发。
3、通过JobClinet来采集相关的Job信息。
4、对失败的Job有重新尝试执行的机制。
四、实现关键点
设计出来了,那么实现就需要一些关键点的考虑,一下是我总结的一些关键点:
1、Job配置文件设计。我这里对每个Job都有自己的编号,在队列任务启动之间都会加载该配置文件,根据用户自己配置的Job顺序来依次的启动Job。
2、上面提到的是典型的FIFO模式,hadoop本身通过配置可以实现公平调度模式,那么只要把集群配置完成,我们通过修改Job执行的配置文件也可以实现并发启动。这里的配置文件我就不详细列出来,各自的定义也不尽相同。关键点就是通过配置文件可以明显的标识出那一些Job是需要顺序执行,哪一些Job是可以并发执行就可以。读取文件之后程序获得了此信息就可以按照配置文件执行。在这里我通过java.util.concurrent.Semaphore类来实现。具体代码不写了。
3、如何通过java代码启动Job,这里我考虑的是使用Hadoop的API来实现。最早我也犯了个错误,采用exec的方式执行,后来我跟踪源代码找到我们在控制台输入hadoop jar的启动原理之后,将代码做了修改,采用了org.apache.hadoop.util.RunJar这个类,具体方法可以自己细看。
4、对于信息的采集,这里比较麻烦,应为我要采集到确定是通过我启动的Job,那么我必须有一个依据,这里我的依据就是JobName。在队列配置文件中将配置此JobName。同Job内部代码编写的Job job = new Job(conf, "JobName");需要一直。这样,通过JobName我能获取JobID,这样,最终就能定位并获取该Job的详细信息。
5、失败任务尝试。这里需要说明如果Job执行返回状态是fail,那么可以参照设定的失败次数进行重复尝试。也就是递归的调用。
6、Job启动之前还需要做一系列的检查工作。例如集群是否正常、输入和输出目录是否存在以及处理办法、指定的Jar文件是否存在等等。这些通过调用API都能实现。
五、总结
1、代码已编写完成,也经过了一些测试,基本没有大的问题。
2、一些信息的采集可能不够完成,只能做到一些基本状态的采集,不能作为性能监控和硬件监控的依据。
3、可能还存在一些漏洞和不完整的地方,后面我会持续的改进。
4、对于Hive我在这里还未提到,不使用Hive和不使用shell理由基本一致。如果做简单的业务,个人认为Hive还是首选。
5、写的不对或是有疑问的地方欢迎发邮件讨论。dajuezhao@gmail.com
发表评论
-
Hadoop的基准测试工具使用(部分转载)
2011-01-21 11:58 1564一、背景由于以前没有 ... -
分布式集群中的硬件选择
2011-01-21 11:58 1000一、背景最近2个月时间一直在一个阴暗的地下室的角落里工作,主要 ... -
Map/Reduce的内存使用设置
2011-01-21 11:57 1608一、背景今天采用10台 ... -
Hadoop开发常用的InputFormat和OutputFormat(转)
2011-01-21 11:55 1457Hadoop中的Map Reduce框架依 ... -
SecondaryNamenode应用摘记
2010-11-04 15:54 1029一、环境 Hadoop 0.20.2、JDK 1.6、 ... -
Zookeeper分布式安装手册
2010-10-27 09:41 1295一、安装准备1、下载zookeeper-3.3.1,地址:ht ... -
Hadoop分布式安装
2010-10-27 09:41 982一、安装准备1、下载hadoop 0.20.2,地址:http ... -
Map/Reduce使用杂记
2010-10-27 09:40 905一、硬件环境1、CPU:Intel(R) Core(TM)2 ... -
Hadoop中自定义计数器
2010-10-27 09:40 1495一、环境1、hadoop 0.20.22、操作系统Linux二 ... -
Map/Reduce中的Partiotioner使用
2010-10-27 09:39 882一、环境1、hadoop 0.20.22 ... -
Map/Reduce中的Combiner的使用
2010-10-27 09:38 1153一、作用1、combiner最基本是实现本地key的聚合,对m ... -
Hadoop中DBInputFormat和DBOutputFormat使用
2010-10-27 09:38 2401一、背景 为了方便MapReduce直接访问关系型数据 ... -
Hadoop的MultipleOutputFormat使用
2010-10-27 09:37 1649一、背景 Hadoop的MapReduce中多文件输出默 ... -
Map/Reduce中公平调度器配置
2010-10-27 09:37 1507一、背景一般来说,JOB ... -
无法启动Datanode的问题
2010-10-27 09:37 2365一、背景早上由于误删namenode上的hadoop文件夹,在 ... -
Map/Reduce的GroupingComparator排序简述
2010-10-27 09:36 1308一、背景排序对于MR来说是个核心内容,如何做好排序十分的重要, ... -
Map/Reduce中分区和分组的问题
2010-10-27 09:35 1102一、为什么写分区和分组在排序中的作用是不一样的,今天早上看书, ... -
关于Map和Reduce最大的并发数设置
2010-10-27 09:34 1214一、环境1、hadoop 0.20.22、操作系统 Linux ... -
关于集群数据负载均衡
2010-10-27 09:33 854一、环境1、hadoop 0.20.22、操作系统 Linux ... -
Map/Reduce执行流程简述
2010-10-27 09:33 957一、背景最近总在弄MR的东西,所以写点关于这个方面的内容,总结 ...
相关推荐
hadoop0.23.9离线api,解压后进入 doc 目录 ,双击 index.html 和javaapi一样 All Classes Packages org.apache.hadoop org.apache.hadoop.classification org.apache.hadoop.conf org.apache.hadoop.contrib....
hadoop 1.2 api 伪中文版。支持即时查询,高级查询。方便编码学习。 大数据炙手可热!hadoop是一个大数据分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分...
Hadoop开发者第四期: ...通过Hadoop 的API 管理Job; Hadoop 集群的配置调优; Hadoop 平台的Java 规范及经验; MapReduce 开发经验总结; Hadoop 中的tar 命令的实现; Hadoop 技术论坛运营数据分享
04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和伪分布式安装.avi 06-hadoop版本选择和伪分布式安装2.avi 07-hdfs&mapreduce;测试.avi 08-hdfs的实现机制初始.avi 09-hdfs的shell操作.avi 10-...
036 HDFS Java API 两种方式介绍及使用URL API详解一 037 使用URL API详解二 038 使用HDFS FileSystem API 详解 039 HDFS文件系统读写流程及HDFS API两种方式读取文件 040 详解HDFS API之FileSystem方式基本操作二 ...
Using the old API – org.apache.hadoop.mapred Going real — network monitoring data Getting and understanding the data Knowing the problems Solution approaches Approach 1 – Preaggregate the ...
MapReduce主要在org.apache.hadoop.mapred,实现提供的接口类,并完成节点通信(可以不是hadoop通信接口),就能进行MapReduce运算。 目前这个项目还在进行中,还没有到达1.0版本,和Google系统的差距也非常大...
hadoop权威指南第三版(英文版)。 Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Preface . . . . . . ....
《hadoop实战》中用老api写了TopOne,没有写topN,所以我就用新api,采用多job级联的方式实现了TopN,共大家参考。
MapReduce编程模型3.1 MapReduce编程模型概述3.1.1 MapReduce编程接口体系结构3.1.2...API解析3.4.1 Hadoop Streaming的实现原理3.4.2 Hadoop Pipes的实现原理3.5 Hadoop工作流3.5.1 JobControl的实现原理3.5.2 ...
主要介绍了Hadoop的MapReduce的Java编程接口,包括Mapper API和Reducer API,Job的运行模式、工作流
通过Hadoop 的API 管理Job............................. 54 Hadoop 集群的配置调优................................ 60 Hadoop 平台的Java 规范及经验......................... 63 MapReduce 开发经验总结..........
Django 的 Hadoop 集成(通过 Oozie REST API 或本地作业执行)。 此代码允许从 Django 视图运行 MapReduce 任务。 安装 像往常一样安装这个 django 应用程序(urls.py、settings.py 等)。 在项目的 settings.py ...
比如用maven打包MapReduce,设置java环境变量,写MRUnit测试单元(第五章介绍),还有一些更深入的特性,比如输出的提交,分布式缓存等(第8章),任务内存监控(第9章),第4章新增了通过mapreduce job处理avro ...
Hadoop definitive 第三版, 目录如下 1. Meet Hadoop . . . 1 Data! 1 Data Storage and Analysis 3 Comparison with Other Systems 4 RDBMS 4 Grid Computing 6 Volunteer Computing 8 A Brief History of Hadoop 9...
MapReduce主要在org.apache.hadoop.mapred,实现提供的接口类,并完成节点通信(可以不是hadoop通信接口),就能进行MapReduce运算。 目前这个项目还在进行中,还没有到达1.0版本,和Google系统的差距也非常大,...
Hadoop 2 (YARN API) 中带有 Map Reduce 示例的存储库 目前的例子: 如何执行示例? 我假设你克隆了这个存储库,你用 netbeans 编译并构建了一个 jar 文件,并且你已经安装了 Hadoop 2.X。 如果之前没问题,则应...
使用python的爬虫框架scrapy抓取51job网站的招聘信息并存入文件 (DataSpider) 二、大数据存储 编写java脚本使用HDFS API把数据上传到HDFS文件系统 三、大数据处理 使用Hadoop处理大数据 (BigDataHandler) - 不懂运行...
2、系统架构 AI平台的架构如下图所⽰,⽤户通过Web Portal调⽤REST Server的API提交作业(Job)和监控集群,其它第三⽅⼯具也可通过该API进 ⾏任务管理。随后Web Portal与Launcher交互,以执⾏各种作业,再由...