`
dajuezhao
  • 浏览: 59723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过Hadoop的API对Job进行管理

阅读更多
一、需求背景

由于我们在做一些业务的时候,可能需要多个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
分享到:
评论

相关推荐

    hadoop0.23.9离线api

    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.1 api 最新chm 伪中文版

    hadoop 1.2 api 伪中文版。支持即时查询,高级查询。方便编码学习。 大数据炙手可热!hadoop是一个大数据分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分...

    Hadoop开发者第四期

    Hadoop开发者第四期: ...通过Hadoop 的API 管理Job; Hadoop 集群的配置调优; Hadoop 平台的Java 规范及经验; MapReduce 开发经验总结; Hadoop 中的tar 命令的实现; Hadoop 技术论坛运营数据分享

    新版Hadoop视频教程 段海涛老师Hadoop八天完全攻克Hadoop视频教程 Hadoop开发

    04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和伪分布式安装.avi 06-hadoop版本选择和伪分布式安装2.avi 07-hdfs&mapreduce;测试.avi 08-hdfs的实现机制初始.avi 09-hdfs的shell操作.avi 10-...

    Hadoop从入门到上手企业开发

    036 HDFS Java API 两种方式介绍及使用URL API详解一 037 使用URL API详解二 038 使用HDFS FileSystem API 详解 039 HDFS文件系统读写流程及HDFS API两种方式读取文件 040 详解HDFS API之FileSystem方式基本操作二 ...

    Elasticsearch for Hadoop

    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 ...

    Apress - Pro Hadoop

     MapReduce主要在org.apache.hadoop.mapred,实现提供的接口类,并完成节点通信(可以不是hadoop通信接口),就能进行MapReduce运算。  目前这个项目还在进行中,还没有到达1.0版本,和Google系统的差距也非常大...

    hadoop 权威指南(第三版)英文版

    hadoop权威指南第三版(英文版)。 Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Preface . . . . . . ....

    基于hadoop实现输出出现频率最高的20个词

    《hadoop实战》中用老api写了TopOne,没有写topN,所以我就用新api,采用多job级联的方式实现了TopN,共大家参考。

    Hadoop技术内幕:深入解析MapReduce架构设计与实现原理

    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介绍

    主要介绍了Hadoop的MapReduce的Java编程接口,包括Mapper API和Reducer API,Job的运行模式、工作流

    《Hadoop开发者》第四期

    通过Hadoop 的API 管理Job............................. 54 Hadoop 集群的配置调优................................ 60 Hadoop 平台的Java 规范及经验......................... 63 MapReduce 开发经验总结..........

    django_hadoop:Django 的 Hadoop 集成

    Django 的 Hadoop 集成(通过 Oozie REST API 或本地作业执行)。 此代码允许从 Django 视图运行 MapReduce 任务。 安装 像往常一样安装这个 django 应用程序(urls.py、settings.py 等)。 在项目的 settings.py ...

    hadoop权威指南 第三版 英文版

    比如用maven打包MapReduce,设置java环境变量,写MRUnit测试单元(第五章介绍),还有一些更深入的特性,比如输出的提交,分布式缓存等(第8章),任务内存监控(第9章),第4章新增了通过mapreduce job处理avro ...

    hadoop_the_definitive_guide_3nd_edition

    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...

    Hadoop权威指南(第2版).

    MapReduce主要在org.apache.hadoop.mapred,实现提供的接口类,并完成节点通信(可以不是hadoop通信接口),就能进行MapReduce运算。 目前这个项目还在进行中,还没有到达1.0版本,和Google系统的差距也非常大,...

    YarnExamples:Hadoop 2 (YARN API) 中带有 Map Reduce 示例的存储库

    Hadoop 2 (YARN API) 中带有 Map Reduce 示例的存储库 目前的例子: 如何执行示例? 我假设你克隆了这个存储库,你用 netbeans 编译并构建了一个 jar 文件,并且你已经安装了 Hadoop 2.X。 如果之前没问题,则应...

    毕设项目-基于python的爬虫框架scrapy抓取招聘网站的招聘信息,基于Hadoop处理数据+源码+文档说明

    使用python的爬虫框架scrapy抓取51job网站的招聘信息并存入文件 (DataSpider) 二、大数据存储 编写java脚本使用HDFS API把数据上传到HDFS文件系统 三、大数据处理 使用Hadoop处理大数据 (BigDataHandler) - 不懂运行...

    人工智能训练平台.pdf

    2、系统架构 AI平台的架构如下图所⽰,⽤户通过Web Portal调⽤REST Server的API提交作业(Job)和监控集群,其它第三⽅⼯具也可通过该API进 ⾏任务管理。随后Web Portal与Launcher交互,以执⾏各种作业,再由...

Global site tag (gtag.js) - Google Analytics