大数据(052)Oozie【Oozie介绍 & CDH安装Oozie】

一、什么是Oozie
    • Oozie是用于 Hadoop 平台的开源的工作流调度引擎。
    • 用来管理Hadoop作业。
    • 属于web应用程序,由Oozie client和Oozie Server两个组件构成。
    • Oozie Server运行于Java Servlet容器(Tomcat)中的web程序。

二、Oozie作用
    – 统一调度hadoop系统中常见的mr任务启动、hdfs操作、shell调度、hive操作等
    – 使得复杂的依赖关系、时间触发、事件触发使用xml语言进行表达,开发效率提高
    – 一组任务使用一个DAG来表示,使用图形表达流程逻辑更加清晰
    – 支持很多种任务调度,能完成大部分hadoop任务处理
    – 程序定义支持EL常量和函数,表达更加丰富

三、Oozie架构

四、CDH安装Zozie

         1、直接添加服务。

         2、

               – 解压ext-2.2到/var/lib/oozie目录下
               – Oozie服务中配置启用web控制台
               – 保存,重启oozie服务

五、web管理地址
               – http://oozie_host_ip:11000/oozie/
六、 oozie管理
               – 任务列表查看
               – 任务状态查看

               – 流程返回信息
               – 节点信息查看
               – 流程图信息
               – 日志查看
               – 系统信息查看和配置

七、Oozie CLI 命令
        • 启动任务:
                – oozie job -oozie http://ip:11000/oozie/ -config job.properties –run
        • 停止任务:
                – oozie job -oozie http://ip:11000/oozie/ -kill 0000002-150713234209387-oozie-oozi-W
        • 提交任务:
                – oozie job -oozie http://ip:11000/oozie/ -config job.properties –submit
        • 开始任务:
                – oozie job -oozie http://ip:11000/oozie/ -config job.properties –start 0000003-150713234209387-oozie-oozi-W
        • 查看任务执行情况:
                – oozie job -oozie http://ip:11000/oozie/ -config job.properties –info 0000003-150713234209387-oozie-oozi-W

八、Oozie实例---创建任务

        1、在任意一台主机上创建并进入目录/home/zjt/oozieJob/test01/

        2、创建job.properties和workflow.xml,内容分别如下

job.properties:

nameNode=hdfs://node1:8020
jobTracker=node1:8032
queueName=default
examplesRoot=examples


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

workflow.xml:

<workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
    <start to="shell-node"/>
    <action name="shell-node">
       <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <exec>echo</exec>
            <argument>hi shell in oozie</argument>
        </shell>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

        3、执行命令准备

        我们能看到job.properties配置了几个参数,参数含义如下

                nameNode hdfs地址
                jobTracke jobTracker地址
                queueName oozie队列(default)
                examplesRoot 全局目录(examples)

                oozie.wf.appication.path oozie流程所在hdfs地址(workflow.xml)

        因此需要创建oozie.wf.appication.path中描述的目录,并且将workflow.xml上传上去

        4、执行命令

                oozie job -oozie http://node3:11000/oozie/ -config job.properties -run

                出现下图所示结果表示执行成功:

                

        5、前往Oozie界面查看任务

 九、Oozie Job Properties - Job配置 job.properties

十、Oozie workflow - WorkFlow配置 workflow.xml

        • 1、版本信息
                – <workflow-app xmlns="uri:oozie:workflow:0.4" name=“workflow name">
        • 2、EL函数
                – 基本的EL函数
                        • String firstNotNull(String value1, String value2)
                        • String concat(String s1, String s2)
                        • String replaceAll(String src, String regex, String replacement)
                        • String appendAll(String src, String append, String delimeter)
                        • String trim(String s)
                        • String urlEncode(String s)
                        • String timestamp()
                        • String toJsonStr(Map) (since Oozie 3.3)
                        • String toPropertiesStr(Map) (since Oozie 3.3)
                        • String toConfigurationStr(Map) (since Oozie 3.3)

                – WorkFlow EL
                        • String wf:id() – 返回当前workflow作业ID
                        • String wf:name() – 返回当前workflow作业NAME
                        • String wf:appPath() – 返回当前workflow的路径
                        • String wf:conf(String name) – 获取当前workflow的完整配置信息
                        • String wf:user() – 返回启动当前job的用户
                        • String wf:callback(String stateVar) – 返回结点的回调URL,其中参数为动作指定的退出状态
                        • int wf:run() – 返回workflow的运行编号,正常状态为0
                        • Map wf:actionData(String node) – 返回当前节点完成时输出的信息
                        • int wf:actionExternalStatus(String node) – 返回当前节点的状态
                        • String wf:lastErrorNode() – 返回最后一个ERROR状态推出的节点名称
                        • String wf:errorCode(String node) – 返回指定节点执行job的错误码,没有则返回空
                        • String wf:errorMessage(String message) – 返回执行节点执行job的错误信息,没有则返回空
                – HDFS EL
                        • boolean fs:exists(String path)
                        • boolean fs:isDir(String path)
                        • long fs:dirSize(String path) – 目录则返回目录下所有文件字节数;否则返回-1
                        • long fs:fileSize(String path) – 文件则返回文件字节数;否则返回-1
                        • long fs:blockSize(String path) – 文件则返回文件块的字节数;否则返回-1

        • 3、节点

                – A、流程控制节点
                                • start – 定义workflow开始
                                • end – 定义workflow结束
                                • decision – 实现switch功能
                                • sub-workflow – 调用子workflow
                                • kill – 杀死workflow
                                • fork – 并发执行workflow
                                • join – 并发执行结束(与fork一起使用)
                – B、动作节点
                                • shell
                                • java
                                • fs
                                • MR
                                • hive
                                • sqoop

十一、节点解释

1、Shell节点

        Shell节点---job.properties

nameNode=hdfs://node1:8020
jobTracker=node1:8032
queueName=default
examplesRoot=examples
oozie.wf.application.path=${nameNode}/user/workflow/oozie/shell

        Shell节点 --workflow.xml  

<workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>echo</exec>
<argument>hi shell in oozie</argument>
</shell>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>

2、Impala节点

2.1 将job.properties上传至服务器/home/zjt/oozieJob/test02-impalasql中

      将workflow.xml上传至hdfs的/user/root/workflow/impala/中

        调用impala---job.properties

nameNode=hdfs://node1:8020
jobTracker=node1:8032
queueName=default
examplesRoot=examples
oozie.usr.system.libpath=true
oozie.libpath=${namenode}/user/${user.name}/workflow/impala/lib


oozie.wf.application.path=${nameNode}/user/${user.name}/workflow/impala

        调用impala --workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.4" name="impala-wf">
    <start to="shell-node"/>
    <action name="shell-node">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <exec>impala-shell</exec>
            <argument>-i</argument>
            <argument>node2</argument>
            <argument>-f</argument>
            <argument>shell/impala.sql</argument>
            <capture-output/>
        </shell>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>error message[${wf:errorMessage(wf:actionData('shell-node')["impala"]) eq 'Hello Oozie'}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

2.2 前往/opt/cloudera/parcels/CDH/jars中获取impala需要的jar包

 将这些jar包上传至job.properties配置的oozie.libpath中

2.3 执行下方命令创建shell目录

hadoop fs -mkdir /user/root/workflow/impala/lib/shell/

2.4 将impala.sql文件上传至/user/root/workflow/impala/lib/shell/中,impala.sql内容如下

drop table if exist page_view_02;
create table page_view_02 (page_url string, ip string);
insert into table page_view_02 select page_url, ip from page_view;

2.5、执行命令

                cd /home/zjt/oozieJob/test02-impalasql

                oozie job -oozie http://node3:11000/oozie/ -config job.properties -run

                出现下图所示结果表示执行成功:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值