Oozie简单案例执行一个脚本-02

这个是Oozie自带的简单案例,解压它到当前目录

这个是oozie执行shell脚本调度任务的属性信息和工作流.在oozie执行任务调度的时候必须把这两个东西上传到hdfs上才可以执行.

先创建个文件夹,把shell复制到这里来

#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

写一个简单脚本展示一下网络信息

<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

执行任务
bin/oozie job -oozie http://hadoop-senior01.buba.com:11000/oozie -config oozie-apps/shell/job.properties -run       

返回一个job  id,可以根据这个东西杀掉这个任务.

它把这个任务在第二台机器执行的

杀死某个任务
$ bin/oozie job -oozie http://hadoop-senior01.buba.com:11000/oozie -kill 0000004-170425105153692-oozie-z-W

如果说配置文件配错了,使用这个命令是杀不了任务的,那个任务就一直在oozie那个页面了,如果想把它去掉,要么就去mysql里把oozie-apps数据库删了重创建一个,要么就进入到里面找到具体的信息删除掉就可以了.

下面这个表找到具体的那个任务删掉就可以了.

小问题总结:
    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的用户名不一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值