任务调度框架之oozie

 

目录

Oozie(基于cdh平台) 1

一、Oozie 简介 1

二、Oozie的功能模块介绍 1

三oozie部署 2

四案例 4

五可能遇到的问题 13


Oozie(基于cdh平台)

一、Oozie 简介

Oozie 英文翻译为:驯象人。一个基于工作流引擎的开源框架,由Cloudera 公司贡献给

Apache,提供对Hadoop Mapreduce、Pig Jobs 的任务调度与协调。Oozie 需要部署到Java

Servlet 容器中运行。主要用于定时调度任务,多任务可以按照执行的逻辑顺序调度。

二、Oozie的功能模块介绍

2.1、模块

1) Workflow

顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个)

2) Coordinator

定时触发workflow

3) Bundle Job

绑定多个Coordinator

2.2、常用节点

1) 控制流节点(Control Flow Nodes

控制流节点一般都是定义在工作流开始或者结束的位置,比如start,end,kill 等。以及提供工

作流的执行路径机制,如decision,fork,join 等。

2) 动作节点(Action Nodes

负责执行具体动作的节点,比如:拷贝文件,执行某个Shell 脚本等等。

三oozie部署

1前提 :安装好 coluder Manager  见 cdh平台文档





2添加ooze 服务



四案例

1调度shell 脚本

  $ vi oozie-apps/shell/p1.sh

内容如下:

#!/bin/bash

/sbin/ifconfig > /tmp/p1.log



修改job.properties workflow.xml 文件注意文件的名字不可以改动

job.properties

#HDFS 地址

nameNode=hdfs://linux01:8020

#ResourceManager 地址

jobTracker=linux02:8032

#队列名称

queueName=default

examplesRoot=oozie-apps

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

EXEC=p1.sh

 

 


workflow.xml


 

    


  

 

  


      ${jobTracker}  

      ${nameNode}  

      

        

          mapred.job.queue.name  

          ${queueName}

        

        


      ${EXEC}  

        


      /user/admin/oozie-apps/shell/${EXEC}#${EXEC}  

      

      

      

    

    

  

    

      ${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}  

      

    

    

  

    Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]

    

  

    Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]

    

  




2

把该文件上传到hdfs上对应的位置  job.Properties对应的位置


hadoop fs -put [所有文件  p1.sh  job.Properties  workflow.xml]  [job.Properties对应的位置  oozie.wf.application.path实际制定的位置 ]


3执行oozie 服务

命令如下

oozie job -oozie http://z:11000/oozie -config oozie-apps/shell/job.properties -run

解释

http://z:11000oozie部署的服务器地址

oozie-apps/shell/job.properties配置文件在服务器的地址注意并不是hdfs上的地址


oozie job -oozie http://z:11000/oozie -config oozie-apps/shell/job.properties -run





4结束任务


oozie job -oozie http://linux01:11000/oozie -kill 0000004-170425105153692-oozie-z-W


解释 0000004-170425105153692-oozie-z-W

Oozie启动后会产生的服务标识



2调度多个任务

编写脚本p1.sh

#!/bin/bash

/sbin/ifconfig > /tmp/p1.log



P2.sh

#!/bin/bash

/sbin/ifconfig > /tmp/p2 .log




Job.properties

nameNode=hdfs://z101:8020

jobTracker=z102:8032

queueName=default

examplesRoot=oozie-apps

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

EXEC1=p1.sh

EXEC2=p2.sh





Workflow.xml

${jobTracker}

${nameNode}

mapred.job.queue.name

${queueName}

${EXEC1}

/user/admin/oozie-apps/shell/${EXEC1}#${EXEC1}

 如果成功 执行下一个脚本  如果失败 不执行

${jobTracker}

${nameNode}

mapred.job.queue.name

${queueName}

${EXEC2}

/user/admin/oozie-apps/shell/${EXEC2}#${EXEC2}

${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}

Shell action failed, error

message[${wf:errorMessage(wf:lastErrorNode())}]




2

把该文件上传到hdfs上对应的位置  job.Properties对应的位置


hadoop fs -put [所有文件  p1.sh  job.Properties  workflow.xml]  [job.Properties对应的位置  oozie.wf.application.path实际制定的位置 ]




3执行oozie 服务

命令如下

oozie job -oozie http://z:11000/oozie -config oozie-apps/shell/job.properties -run

解释

http://z:11000oozie部署的服务器地址

oozie-apps/shell/job.properties配置文件在服务器的地址注意并不是hdfs上的地址


oozie job -oozie http://z:11000/oozie -config oozie-apps/shell/job.properties -run





4结束任务


oozie job -oozie http://linux01:11000/oozie -kill 0000004-170425105153692-oozie-z-W


解释 0000004-170425105153692-oozie-z-W

Oozie启动后会产生的服务标识


3定时调度任务

前提同步服务器时间

检查系统当前时区:

# date -R

注意这里,如果显示的时区不是+0800,你可以删除localtime 文件夹后,再关联一个正确时

区的链接过去,命令如下

# rm -rf /etc/localtime

# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


同步时间

# ntpdate pool.ntp.org

修改NTP 配置文件:

# vi /etc/ntp.conf

去掉下面这行前面的# ,并把网段修改成自己的网段:

restrict 192.168.122.0 mask 255.255.255.0 nomodify notrap

注释掉以下几行:

#server 0.centos.pool.ntp.org

#server 1.centos.pool.ntp.org

#server 2.centos.pool.ntp.org

把下面两行前面的#号去掉,如果没有这两行内容,需要手动添加

server 127.127.1.0 # local clock

fudge 127.127.1.0 stratum 10



重启NTP 服务:

# systemctl start ntpd.service,

注意,如果是 centOS7 以下的版本,使用命令:service ntpd start

# systemctl enable ntpd.service,

注意,如果是 centOS7 以下的版本,使用命令:chkconfig ntpd on



集群其他节点去同步这台时间服务器时间:

首先需要关闭这两台计算机的 ntp 服务

# systemctl stop ntpd.service,

centOS7 以下,则:service ntpd stop

# systemctl disable ntpd.service,

centOS7 以下,则:chkconfig ntpd off

# systemctl status ntpd,查看 ntp 服务状态

# pgrep ntpd,查看 ntp 服务进程 id

同步第一台服务器 linux01 的时间:

# ntpdate linux01


制定周期时间


# crontab -e

*/10 * * * * /usr/sbin/ntpdate linux01


重启定时服务即可

# systemctl restart crond.service,

centOS7 以下使用:service crond restart,



编写脚本p1.sh

#!/bin/bash

/sbin/ifconfig >> /tmp/p1.log


Job.properties

nameNode=hdfs://linux01:8020

jobTracker=linux02:8032

queueName=default

examplesRoot=oozie-apps

oozie.coord.application.path=${nameNode}/user/${user.name}/${examplesRoot}/cron

#start:必须设置为未来时间,否则任务失败

start=2017-07-29T17:00+0800

end=2017-07-30T17:00+0800

workflowAppUri=${nameNode}/user/${user.name}/${examplesRoot}/cron

EXEC1=p1.sh

EXEC2=p2.sh



coordinator.xml

end="${end}" timezone="GMT+0800" xmlns="uri:oozie:coordinator:0.2">

${workflowAppUri}

jobTracker

${jobTracker}

nameNode

${nameNode}

queueName

${queueName}



workflow.xml

${jobTracker}

${nameNode}

mapred.job.queue.name

${queueName}

${EXEC3}

/user/admin/oozie-apps/cron/${EXEC3}#${EXEC3}

Shell action failed, error

message[${wf:errorMessage(wf:lastErrorNode())}]

Incorrect output, expected [Hello Oozie] but was

[${wf:actionData('shell-node')['my_output']}]




2

把该文件上传到hdfs上对应的位置  job.Properties对应的位置


hadoop fs -put [所有文件  p1.sh  job.Properties  workflow.xml]  [job.Properties对应的位置  oozie.wf.application.path实际制定的位置 ]




3执行oozie 服务

注意定时任务需要修改配置如下



增加属性和属性值如下

属性:oozie.processing.timezone

属性值:GMT+0800

解释:修改时区为东八区区时



命令如下

oozie job -oozie http://z:11000/oozie -config oozie-apps/shell/job.properties -run

解释

http://z:11000oozie部署的服务器地址

oozie-apps/shell/job.properties配置文件在服务器的地址注意并不是hdfs上的地址


oozie job -oozie http://z:11000/oozie -config oozie-apps/shell/job.properties -run





4结束任务


oozie job -oozie http://linux01:11000/oozie -kill 0000004-170425105153692-oozie-z-W


解释 0000004-170425105153692-oozie-z-W

Oozie启动后会产生的服务标识



注意oozie执行周期的最小单位 是5 分钟  低于五分钟  执行失败


五可能遇到的问题


[if !supportLists]1) [endif]授权配置如下标识所有用户使用root用户  密码123456来登陆

grant all on *.* to root@'%' identified by '123456';

flush privileges;

刷新配置


2) workflow.xml 配置的时候不要忽略file 属性

3) jps 查看进程时,注意有没有bootstrap

4) 关闭oozie

如果bin/oozied.sh stop 无法关闭,则可以使用kill -9 [pid],之后oozie 根目录下的

oozie-server/temp/xxx.pid 文件一定要删除。

5) Oozie 重新打包时,一定要注意先关闭进程,删除对应文件夹下面的pid 文件。(可以参

考第4 条目)

6) 配置文件一定要生效

起始标签和结束标签无对应则不生效,配置文件的属性写错了,那么则执行默认的属性。

7) libext 下边的jar 存放于某个文件夹中,导致share/lib 创建不成功。

8) 调度任务时,找不到指定的脚本,可能是oozie-site.xml 里面的Hadoop 配置文件没有关

联上。

9) 修改Hadoop 配置文件,需要重启集群。一定要记得scp 到其他节点。

10) JobHistoryServer 必须开启,集群要重启的。

11) Mysql 配置如果没有生效的话,默认使用derby 数据库。

12) 在本地修改完成的job 配置,必须重新上传到HDFS

13) HDFS 中上传的oozie 配置文件下载下来查看是否有错误。

14) Linux 用户名和Hadoop 的用户名不一致。

15sharelib 找不到,包括重新初始化oozie

如果部署oozie 出错,修复执行,初始化oozie

1、停止oozie(要通过jps 检查bootstrap 进程是否已经不存在)

2、删除oozie-server/temp/*

3、删除HDFS 上的sharelib 文件夹

4、删除oozie.sql 文件,删除Mysql 中删除oozie 库,重新创建

5、重新按照顺序执行文档中“初始化oozie"这个步骤

六利用hue调度oozie 任务


在action下创建 workflow,在创建scheduler,在创建bundle

你可能感兴趣的:(任务调度框架之oozie)