这个是Oozie自带的简单案例,解压它到当前目录
![](https://img-blog.csdnimg.cn/20190426194054712.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
这个是oozie执行shell脚本调度任务的属性信息和工作流.在oozie执行任务调度的时候必须把这两个东西上传到hdfs上才可以执行.
![](https://img-blog.csdnimg.cn/20190426194137481.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
先创建个文件夹,把shell复制到这里来
![](https://img-blog.csdnimg.cn/20190426194635527.png)
![](https://img-blog.csdnimg.cn/20190426194601514.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190426202357394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
#nameNode如果配置了高可用的话就直接hdfs://高可用的名称 不用加端口号了
nameNode=hdfs://hadoop-senior01.buba.com:8020
#resourceManager的通讯地址,端口为8032
jobTracker=hadoop-senior02.buba.com:8032
#调度任务的时候产生任务队列的名称,随便起
queueName=default
#job.properties 和 workflow.xml 的存放目录
examplesRoot=oozie-apps
#oozie app的存放路径 shell文件夹整个就是一个oozie-app
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/shell
#要执行脚本的存放路径,这是相对路径,和job.properties在同一目录下就可以了.
EXEC=p1.sh
写一个简单脚本展示一下网络信息
![](https://img-blog.csdnimg.cn/20190426202029430.png)
![](https://img-blog.csdnimg.cn/20190426203140514.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">
<!-- start是先执行名字为shell-node的动作,可以随便起名 -->
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.2">
<!-- 这边的变量都是引用的job.properties里的变量 -->
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<!-- 把这个改为那边定义的脚本变量 -->
<exec>${EXEC}</exec>
<!-- <argument>my_output=Hello Oozie</argument> -->
<file>/user/kxj/oozie-apps/shell/${EXEC}#${EXEC}</file>
<capture-output/>
</shell>
<!-- ok就是如果上面的动作执行成功的话跳转到哪儿,错误的话跳转到哪儿 -->
<ok to="end"/>
<error to="fail"/>
</action>
<decision name="check-output">
<switch>
<case to="end">
${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}
</case>
<default to="fail-output"/>
</switch>
</decision>
<kill name="fail">
<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<kill name="fail-output">
<message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
</kill>
<end name="end"/>
</workflow-app>
如果上传的时候需求变了需要改配置文件,需要先把任务杀掉,然后把上传到hdfs的文件删除掉,然后把新的文件上传上去.
上传任务配置
$ /opt/modules/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/modules/oozie-4.0.0-cdh5.3.6/oozie-apps /user/kxj
![](https://img-blog.csdnimg.cn/20190426203704143.png)
执行任务
bin/oozie job -oozie http://hadoop-senior01.buba.com:11000/oozie -config oozie-apps/shell/job.properties -run
返回一个job id,可以根据这个东西杀掉这个任务.
![](https://img-blog.csdnimg.cn/20190426204207831.png)
![](https://img-blog.csdnimg.cn/20190426205147304.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190426205628555.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190426205842557.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190426205855695.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190426205907742.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
它把这个任务在第二台机器执行的
![](https://img-blog.csdnimg.cn/20190426205923332.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190426210047941.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190426210103334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
杀死某个任务
$ bin/oozie job -oozie http://hadoop-senior01.buba.com:11000/oozie -kill 0000004-170425105153692-oozie-z-W
如果说配置文件配错了,使用这个命令是杀不了任务的,那个任务就一直在oozie那个页面了,如果想把它去掉,要么就去mysql里把oozie-apps数据库删了重创建一个,要么就进入到里面找到具体的信息删除掉就可以了.
下面这个表找到具体的那个任务删掉就可以了.
![](https://img-blog.csdnimg.cn/20190427101009925.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190427100945105.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190427100918763.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
小问题总结:
1、Mysql权限配置
2、workflow.xml配置的时候不要忽略file属性
3、jps查看进程时,注意有没有bootstrap(它是oozie的服务进程)
4、关闭oozie
** bin/oozied.sh stop)如果无法关闭,则可以使用kill
** kill -9
oozie-server/temp/xxx.pid文件一定要删除
5、Oozie重新打包时,一定要注意先关闭进程,删除对应文件夹下面的pid文件。(可以参考第4条目删除pid文件)
6、配置文件一定要生效
** 起始标签和结束标签无对应则不生效
** 配置文件的属性写错了,那么则执行默认的属性。
7、libext下边的jar存放于某个文件夹中,导致share/lib创建不成功
8、-rmr share/lib这样是不行的。 rm -rmr /user/admin这样删除是错误的。
9、调度任务时,找不到指定的脚本,可能是oozie-site.xml里面的Hadoop配置文件没有关联上
10、修改Hadoop配置文件,需要重启集群。一定要记得scp到其他节点
11、JobHistoryServer必须开启,集群要重启的。
12、Mysql配置如果没有生效的话,默认使用derby数据库
13、在本地修改完成的job配置,必须重新上传到HDFS
14、将HDFS上面的配置文件,下载下来查看是否有错误。
15、Linux用户名和Hadoop的用户名不一致。