2-10 就业课(2.0)-oozie:4、通过oozie执行shell脚本

mac2022-06-30  83

oozie的配置文件job.properties:里面主要定义的是一些key,value对,定义了一些变量,这些变量往workflow.xml里面传递workflow.xml :workflow的配置文件,里面写的是一个或者多个action,一个action就代表我们一个需要执行的任务

===========================================

4、oozie的使用

4.1、使用oozie调度shell脚本

oozie安装好了之后,我们需要测试oozie的功能是否完整好使,官方已经给我们带了各种测试案例,我们可以通过官方提供的各种案例来对我们的oozie进行调度

第一步:解压官方提供的调度案例

oozie自带了各种案例,我们可以使用oozie自带的各种案例来作为模板,所以我们这里先把官方提供的各种案例给解压出来

cd /export/servers/oozie-4.1.0-cdh5.14.0

tar -zxf oozie-examples.tar.gz

 

 

 

第二步:创建我们的工作目录

在任意地方创建一个oozie的工作目录,以后我们的调度任务的配置文件全部放到oozie的工作目录当中去

我这里直接在oozie的安装目录下面创建工作目录

cd /export/servers/oozie-4.1.0-cdh5.14.0

mkdir oozie_works

 

第三步:拷贝我们的任务模板到我们的工作目录当中去

我们的任务模板以及工作目录都准备好了之后,我们把我们的shell的任务模板拷贝到我们oozie的工作目录当中去

cd /export/servers/oozie-4.1.0-cdh5.14.0

cp -r examples/apps/shell/ oozie_works/

 

第四步:随意准备一个shell脚本

cd /export/servers/oozie-4.1.0-cdh5.14.0

vim oozie_works/shell/hello.sh

注意:这个脚本一定要是在我们oozie工作路径下的shell路径下的位置

#!/bin/bash

echo "hello world" >> /export/servers/hello_oozie.txt

 

第五步:修改模板下的配置文件

修改job.properties

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/shell

vim job.properties

nameNode=hdfs://node01:8020

jobTracker=node01:8032[a1] 

queueName=default[a2] 

examplesRoot=oozie_works[a3] 

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/shell

截图一张,因为该行在手机端上显示错误,下同:

EXEC=hello.sh[a4] 

修改workflow.xml

vim workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">

<start to="shell-node"/>

<action name="shell-node">

    <shell xmlns="uri:oozie:shell-action:0.2">

        <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/root/oozie_works/shell/${EXEC}#${EXEC}</file>

        <capture-output/>

    </shell>

    <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上面去

注意:上传的hdfs目录为/user/root,因为我们hadoop启动的时候使用的是root用户,如果hadoop启动的是其他用户,那么就上传到

/user/其他用户

cd /export/servers/oozie-4.1.0-cdh5.14.0

hdfs dfs -put oozie_works/ /user/root

 

第七步:执行调度任务

通过oozie的命令来执行我们的调度任务

cd /export/servers/oozie-4.1.0-cdh5.14.0

bin/oozie job -oozie http://node03:11000/oozie -config oozie_works/shell/job.properties  -run

从监控界面可以看到我们的任务执行成功了

 

查看hadoop的19888端口,我们会发现,oozie启动了一个MR的任务去执行我们的shell脚本

 


 [a1]在hadoop2当中,jobTracker这种角色已经没有了,只有resourceManager,这里给定resourceManager的IP及端口即可

 [a2]任务提交的队列名称,默认或者随便更改都可以

 [a3]指定oozie的工作目录

 [a4]保存执行任务的名称

转载于:https://www.cnblogs.com/mediocreWorld/p/11166687.html

最新回复(0)