Oozie 讲解

* Oozie部署

(与之前几节内容重复则不再赘述,比如解压,安装之类的)

1、 Hadoop已经成功安装并配置

2、 解压Oozie到指定目录

3、 配置文件

core-site.xml

添加属性:

hadoop.proxyuser.z.hosts:*,即:OOZIE_SERVER_HOSTNAME

hadoop.proxyuser.z.groups:*,即:USER_GROUPS_THAT_ALLOW_IMPERSONATION

如图:

尖叫提示:如果你的集群不是单节点状态,则需要把该core-site.xml文件scp到集群中的其他机器,此处为z02,z03机器。

尖叫提示:你还需要开启mr-jobhistory-daemon.sh服务

4、 如果HDFS已经开启,则需要重启Hadoop的DFS系统

5、解压hadooplibs

$ tar -zxf /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C /opt/modules/cdh/

注意,解压之后,你会发现hadooplibs直接在Oozie目录下了,是以内压缩包的根目录结构就是Oozie根目录。

6、在Oozie的根目录下,创建libext/目录

$ mkdir libext/

7、将hadooplibs里面的jar包,拷贝到libext目录下

$ cp -ra /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/* libext/

8、将ext-2.2.zip拷贝到libext/目录下

$ cp /opt/softwares/ext-2.2.zip libext/

9、修改配置文件

oozie-site.xml,修改如下属性,注意,不是替换,只是修改,如图:

10、由于Oozie需要数据库支持,所以需要安装一个Mysql数据库

由于之前已经安装了Mysql了,此处不再赘述如何安装Mysql。

创建一个oozie数据库,然后把mysql驱动jar拷贝至libext,操作如下:

$ mysql -uroot -p123456

mysql> create database oozie;

exit;

$ cp /opt/modules/mysql-connector-java-5.1.27/mysql-connector-java-5.1.27-bin.jar /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/libext/

11、设置oozie

** 上传oozie目录下的yarn.tar.gz(会自行解压)文件到HDFS

命令如下:

$ bin/oozie-setup.sh sharelib create -fs hdfs://z01:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz,执行后如图,注意,该指令一定要在活跃的NameNode节点执行。如果不在,请自行想办法。(方式之前小节已经讲解)

** 创建oozie.sql文件

$ bin/oozie-setup.sh db create -run -sqlfile oozie.sql,如图则成功:

** 打包项目,生成war

$ bin/oozie-setup.sh prepare-war,如图则成功:

** 启动oozie,通过浏览器访问oozie界面

$ bin/oozied.sh start

地址:http://192.168.122.200:11000/oozie,界面如图:

* 案例

例1:oozie调度shell脚本

** 解压oozie根目录下的案例

$ tar -zxf oozie-examples.tar.gz

** 创建自定义任务文件夹,并拷贝任务模板

$ mkdir oozie-apps/

$ cp -r examples/apps/shell/ oozie-apps/

** 创建脚本p1.sh,随便写一个任务啦,如图:

** 修改job.properties和workflow.xml文件

job.properties:

workflow.xml:

** 上传任务配置到HDFS

尖叫提示:任务配置文件每次在本地修改后,如需执行,都需要重新上传到HDFS,因为Oozie不支持本地运行。

上传:

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/oozie-apps/ /user/z/

** 提交执行该任务

$ bin/oozie job -oozie http://z01:11000/oozie -config oozie-apps/shell/job.properties -run,在Oozie界面可以看到:

查看tmp目录下生成的p1.log文件如下:

尖叫提示:

现象:你执行了某个任务,通过shell脚本向本地tmp目录下写.log文件,然后,找不到?

原因:排除你任务执行失败之外,看一看你的其他机器对应目录是否有.log文件生成?

解释:因为shell脚本执行为当前机器节点,所以在resourcemanager调度任务给某一个NodeManager

执行时,该.log日志文件的生成会在任务执行所在的NodeManager节点上生成。

** 杀掉某个任务

当任务卡死或者无效,可以选择杀死该任务

$ bin/oozie job -oozie http://z01:11000/oozie -kill 0000004-170425105153692-oozie-z-W

例2:执行多个Job调度

** 创建两个shell脚本

此处我直接利用刚才的p1.sh复制出来一个p2.sh

$ cp -a oozie-apps/shell/p1.sh oozie-apps/shell/p2.sh

改变p2.sh如图:

注意ls命令的绝对路径不是sbin

对应的配置文件,修改如图所示:

job.properties:

workflow.xml:

** 上传后,执行该任务,不再赘述。该任务流程为:先执行action1,如果action1成功,则执行action2,然后结束,否则直接结束。

此处可以看到,运行结果:

尖叫提示:重新上传前,需要先删除HDFS中的oozie-apps文件夹

例3:调度mapreduce任务

** 首先拷贝示例模板

$ cp -r examples/apps/map-reduce/ oozie-apps/

** 删除map-reduce/lib目录下示例的jar包,一会存放自己的jar

$ rm -rf oozie-apps/map-reduce/lib/*

** 在DFS系统中创建input文件夹并传入words.txt文件,然后运行测试前几节我们打包好的Jar包,即单词统计任务(这一步在之前的HDFS讲解中重复很多遍了,所以不在赘述)

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -mkdir /input/

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/modules/hadoop-2.5.0/words.txt /input/

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/modules/hadoop-2.5.0/MyWordCount.jar /input/ /output/

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -cat /output/par*,一顿操作后,结果如图:

** 配置文件

job.properties:

workflow.xml:

一定要指定key和value是输出类型

注意,配置workflow.xml文件时,里面的property属性需要结合具体情况配置,比如我刚才已经运行了一个MyWordCount任务了,我可以通过yarn平台的界面来查找相关属性,打开8088端口界面,找到刚才运行的任务,点击history:

然后出现如下界面,点击Configuration:

然后在右上角搜索api这个关键字:

绿色框体中的内容即为属性名,蓝色窗体即为属性值,大家自己对应查找即可,然后完成workflow.xml文件的配置。

** 拷贝MyWordCount.jar到oozie-apps/map-reduce/lib目录下

这里根据我的情况,我之前的MyWordCount.jar包存放于另外一个hadoop目录下了,所以:

$ cp -a /opt/modules/hadoop-2.5.0/MyWordCount.jar oozie-apps/map-reduce/lib/

** 上传map-reduce目录到HDFS的oozie-apps目录

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put oozie-apps/map-reduce/ /user/z/oozie-apps/

** 运行任务

$ bin/oozie job -oozie http://z01:11000/oozie -config oozie-apps/map-reduce/job.properties -run,成功结果如图:

例4:使用Coordinator周期性调度任务

** 配置时区

如图:+0800是东八区区时,如果不是此时区,查询如何修改时区,在此不赘述。

** 修改oozie-site.xml文件

添加如下属性,该属性可以去oozie-default.xml文件中查找

** 修改oozie-console.js文件中的时区设定

$ cat /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie/oozie-console.js,搜索TimeZone函数,修改为如下:

** 重启oozie,并清除浏览器缓存,不放心的话,可以换另一个浏览器打开即可

$ bin/oozied.sh stop

$ bin/oozied.sh start

** 拷贝coordinator周期任务模板

首先,还是先去examples里面拷贝个任务配置模板出来

$ cp -r examples/apps/cron/ oozie-apps/

** 修改job.properties、coordinator.xml文件,workflow文件就用案例1的即可。

由于我打算让coordinator来调度案例1的workflow任务,所以,先把案例1的workflow.xml复制到cron目录下。

$ cp oozie-apps/shell/workflow.xml oozie-apps/cron/

当然了,还有那个具体的脚本p1.sh和p2.sh

$ cp oozie-apps/shell/p1.sh oozie-apps/shell/p2.sh oozie-apps/cron/

然后修改job.properties文件:

然后修改coordinator.xml文件:

修改内容:frequency修改为5分钟执行一次,时区修改为GMT+0800,注意,coordinator执行频率最小为5分钟一次。

** 运行测试

先上传cron目录到HDFS

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put oozie-apps/cron/ /user/z/oozie-apps/

$ bin/oozie job -oozie http://z01:11000/oozie -config oozie-apps/cron/job.properties -run

请自行观察其5分钟执行一次,执行到明天结束。

* 总结

oozie调度框架的学习,如果概念不了解,可以先在似懂非懂的状态下把例子学会,再回顾知识点,自然就理解了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容

  • 1、运行环境 主机IP 主机名 2、配置主机名(分别在五台机器上执行) hostname +主机名例如: h...
    献给记性不好的自己阅读 3,535评论 0 6
  • 为什么需要任务调度框架 在进行数据处理的时候,需要进行数据采集、数据清洗、数据分析等操作,每一个过程都可能涉及到多...
    心_的方向阅读 6,176评论 1 6
  • 自定义实现wordcount的workflow 在yarn上测试wordcount程序 生产一个应用目录,并把wo...
    心_的方向阅读 7,856评论 2 4
  • 下午给孩子们进行乐团排练,孩子们很积极,又快乐。我真的很开心,这就是我最终理想的前期形态。可以在艺术的海洋里钻研,...
    TA77高振华阅读 207评论 2 3
  • 清明,一场倾盆大雨 和往常一样 却又不同于往常 那雨下的那么大 连续下了几天几夜 时而如瀑布般一泻千里 时而剪不断...
    随笔i阅读 312评论 2 4