oozie的作业调度
最近一段时间写了个mr程序,最后要进行作业调度,但是不知道用什么方式比较合适,最终选择了oozie。
之前一直写web程序,老板们突然让玩hadoop,于是就这么愉快的的接受了这个活,对于一个新手来说其中遇到好多好多的坑。。。
环境:hadoop :1.2.1, sqoop:1.4.4, oozie:3.3.2
1. oozie安装请参考我的这篇文章:http://blog.csdn.net/jueshengtianya/article/details/25300761 这里面有我之前遇到的坑。
2. oozie的workflow去找要运行的jar包是在的他的同级目录下的lib目录下,workflow要找依赖的jar包都是在这个路径下。
3. 我的oozie工作目录:
hadoop@steven:~/hadoop1.1.2/hadoop-1.2.1/iesRunShell/oozie/iesCron$ ../../../bin/hadoop fs -ls /ies/oozie/cron/
Found 4 items
-rw-r--r-- 3 hadoop supergroup 1591 2014-05-12 19:37 /ies/oozie/cron/coordinator.xml
-rw-r--r-- 3 hadoop supergroup 1032 2014-05-10 20:12 /ies/oozie/cron/job.properties
drwxr-xr-x - hadoop supergroup 0 2014-05-13 21:41 /ies/oozie/cron/lib
-rw-r--r-- 3 hadoop supergroup 5450 2014-05-13 20:13 /ies/oozie/cron/workflow.xml
4. 我的workflow文件是这样配置的,没啥可说的,直接看吧
<workflow-app xmlns="uri:oozie:workflow:0.2" name="java-main-wf"><start to="firstMid"/><!--生成第一次中间结果--><action name="firstMid"><java><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><main-class>com.miaozhen.ies.job.IesJob4MZSEQ</main-class><arg>/ies/output/mid</arg></java><ok to="joinLog"/><error to="fail"/></action><!--聚合中间结果和当天的日志--><action name="joinLog"><java><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><main-class>com.miaozhen.ies.job.JoinJob</main-class><arg>/ies/join</arg></java><ok to="generateResult"/><error to="fail"/></action><fork name="generateResult"><path start="iesResult"/><path start="spidResult"/></fork><!--生成结果--><action name="iesResult"><java><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><main-class>com.miaozhen.ies.job.IesResultJob</main-class><arg>/ies/join/joinResult/iesResult-r-00000</arg><arg>/ies/iesResult</arg></java><ok to="completed"/><error to="fail"/></action><action name="spidResult"><java><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property></configuration><main-class>com.miaozhen.ies.job.ResultJob</main-class><arg>/ies/join/joinResult/iesResult-r-00000</arg><arg>/ies/spidResult</arg></java><ok to="completed"/><error to="fail"/></action><join name="completed" to="sqoopResult"/><fork name="sqoopResult"><path start="sqoopIesResult"/><path start="sqoopSpidResult"/><path start="sqoopRelationResult"/></fork><action name="sqoopIesResult"><sqoop xmlns="uri:oozie:sqoop-action:0.2"><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><command>export --connect jdbc:mysql://127.0.0.1:3306/ies2 --username root --table ies_report --export-dir /ies/iesResult/data/iesRegionResult-r-00000 --columns iesId,caid,imp3rd,clk3rd,period,regionId,insertTime</command></sqoop><ok to="sqoopCompleted"/><error to="fail"/></action><action name="sqoopSpidResult"><sqoop xmlns="uri:oozie:sqoop-action:0.2"><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><command>export --connect jdbc:mysql://127.0.0.1:3306/ies2 --username root --table spots_report --export-dir /ies/spidResult/spid/spidResult-r-00000 --columns spid,impIES,clkIES,insertTime</command></sqoop><ok to="sqoopCompleted"/><error to="fail"/></action><action name="sqoopRelationResult"><sqoop xmlns="uri:oozie:sqoop-action:0.2"><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><command>export --connect jdbc:mysql://127.0.0.1:3306/ies2 --username root --table relation --export-dir /ies/spidResult/spid/relation-r-00000 --columns iesId,spid,insertTime</command></sqoop><ok to="sqoopCompleted"/><error to="fail"/></action><join name="sqoopCompleted" to="end"/><kill name="fail"><message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><end name="end"/>
</workflow-app>
4. 这里要说一下在oozie调用sqoop的时候:
export --connect jdbc:mysql://127.0.0.1:3306/ies2 --username root --table ies_report --export-dir /ies/iesResult/data/iesRegionResult-r-00000 --columns iesId,caid,imp3rd,clk3rd,period,regionId,insertTime
在进行insertTime插入的时候,要注意一定要把时间设置成这种格式:yyyy-MM-dd HH:mm:ss,sqoop在进行时间插入的时候会把date转化为timestrap,如果你不保留时分秒的话就会抛出如下错误:
java.io.IOException: Can't export data, please check task tracker logsat org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:112)at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)at org.apache.hadoop.mapred.Child$4.run(Child.java:255)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]at java.sql.Timestamp.valueOf(Timestamp.java:202)at spots_report.__loadFromFields(spots_report.java:266)at spots_report.parse(spots_report.java:203)at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83)... 10 more
如果你的输出格式是yyyy-MM-dd HH:mm:ss这种而不是yyyy-MM-dd这种,sqoop的日期转化就没有问题。
oozie的作业调度相关推荐
- 【大数据】一堆大数据名词
转载:https://www.iteblog.com/archives/2607.html 看了这个知识名词,我才知道,知道的越多,不知道的越多,这些技术估计一辈子都搞不完了..能搞完的一定是神才.我 ...
- 原创干货 | 史上最全的大数据学习资源(Awesome Big Data)
很多人在学习大数据的时候比较迷茫,不知从何学起,也不能够比较系统.全面的了解大数据框架.为此,过往记忆花了一个周末的时间把 Awesome Big Data (https://github.com/o ...
- 大数据技术原理与应用----大数据处理架构Hadoop
一.Hadoop简介及其应用现状 1.Hadoop简介 Hadoop(是大数据技术的集合体,一整套解决方案的统称)是由Java开发的,支持多种编程语言. 2.Hadoop的理论基础 (1)Hadoop ...
- 大数据平台作业调度系统详解-理论篇
大数据开发平台的核心组件之一:作业调度系统. 作业调度系统是一个相对复杂的系统,涉及的内容繁杂,针对的场景多种多样,实现的方案千差万别,是一个需要理论和实践并重的系统. 本文先从大的场景划分的角度对市 ...
- java oozie任务状态_Oozie工作流分析
我们在实际的生成操作中经常需要将一些任务在晚上开启进行定时执行,或者多个作业,例如hive,mapreduce,shell等任务的组合调用. 我们可以使用linux的contab + sperviso ...
- 【开源免费】kettle作业调度—自动化运维—数据挖掘—informatica-批量作业工具taskctl
关注公众号"taskctl",关键字回复"领取" 即可获权 产品简介 taskctl是一款由成都塔斯克信息技术公司历经10年研发的etl作业集群调度工具,该产品 ...
- oozie调度中的重试和手工rerun一个workflow
在oozie中有Bundle.Coordinator和Workflow三种类型的job,他们之间可以有以下包含关系. Bundle > Coordinator > Workflow. 1. ...
- Oozie 配合 sqoop hive 实现数据分析输出到 mysql
文件/RDBMS -> flume/sqoop -> HDFS -> Hive -> HDFS -> Sqoop -> RDBMS 其中,本文实现了 使用 sqoo ...
- Net作业调度(一) -Quartz.Net入门
背景 很多时候,项目需要在不同时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架. 介绍 Quartz一个开源 ...
最新文章
- 系列文章丨AlphaGo Zero, 对普通人来说意味着什么?
- “那个工作 10 年没跳槽的人,混不下去了”
- 嵌入式LED驱动程序
- java 流程控制_《Java基础知识》Java流程控制
- 微软研发致胜策略读书笔记(转)
- Linux 实操 —— 日志筛选操作(sed与wc命令介绍)
- 支付业务与技术架构学习总结(6)——对账系统的设计
- Jmeter VS LoadRunner
- xml矢量图:svg的viewBox和vml的coordsize决定的虚坐标系简说
- 提前祝各位:圣诞节快乐~
- [翻译]WPF控件库 MaterialDesignInXamlToolkit (2) Brush Names
- 极限编程(XP)简介
- Recovered from a route's Handler('github.com/kataras/iris/mvc.(*ControllerActivator).handlerOf.func2
- Azure实现虚拟机的自动开关机
- 在c语言中把x和y互换怎么编译,已知int x=10,y=12;编程将x和y的值相互交换
- [学习笔记]ARM_DSP库——基础函数(相反数、偏移、移位、减法、比例因子)
- Mac brew update手顺
- FPT Software携手三井物产提升日本网络安全水平
- 一分钟解决Springboot响应报错:would dispatch back to the current handler URL [/index] agai
- bytestobstr php,一段asp转php