hadoop离线阶段(第二十三节)oozie简介、安装和使用及oozie与hue的整合

目录

  • oozie简介
    • oozie的介绍
    • oozie的架构
      • oozie的执行流程
      • oozie的组件介绍
  • oozie安装
    • 第一步:修改core-site.xml
    • 第二步:上传oozie的安装包并解压
    • 第三步:解压hadooplibs到与oozie平行的目录
    • 第四步:创建libext目录
    • 第五步:拷贝依赖包到libext
    • 第六步:添加ext-2.2.zip压缩包
    • 第七步:修改oozie-site.xml
    • 第八步:在mysql创建oozie数据库
    • 第九步:上传oozie依赖的jar包到hdfs上面去
    • 第十步:创建oozie的数据库表
    • 第十一步:打包项目,生成war包
    • 第十二步:配置oozie的环境变量
    • 第十三步:启动与关闭oozie服务
    • 第十四步:浏览器页面访问oozie
    • 第十五步:修改浏览器显示时区
  • oozie单独使用
    • 使用oozie调度shell脚本
    • 使用oozie调度hive
    • 使用oozie调度MR任务
    • oozie的任务串联
    • oozie的任务调度,定时任务执行
    • oozie当中任务的查看以及杀死
    • oozie整合到hue使用
    • 第一步:停止oozie与hue的进程
    • 第二步:修改oozie的配置文件
    • 第三步:修改hue的配置文件
    • 第四步:启动hue与oozie的进程
  • oozie使用过程当中可能遇到的问题
    • Mysql权限配置
    • 关闭oozie后有残留进程
    • 其他注意事项

oozie简介

oozie的介绍

Oozie是运行在hadoop平台上的一种工作流调度引擎,它可以用来调度与管理hadoop任务,如,MapReduce、Pig等。那么,对于OozieWorkflow中的一个个的action(可以理解成一个个MapReduce任务)Oozie是根据什么来对action的执行时间与执行顺序进行管理调度的呢?答案就是我们在数据结构中常见的有向无环图(DAGDirect Acyclic Graph)的模式来进行管理调度的,我们可以利用HPDL语言(一种xml语言)来定义整个workflow,实现工作流的调度oozie的架构以及执行流程

oozie的架构

hadoop离线阶段(第二十三节)oozie简介、安装和使用及oozie与hue的整合_第1张图片

oozie的执行流程

hadoop离线阶段(第二十三节)oozie简介、安装和使用及oozie与hue的整合_第2张图片

oozie的组件介绍

workFlow:工作流,定义我们的工作流的任务的执行,主要由一个个的action,在xml中进行配置即可。
Coordinator :协作器,说白了就是oozie当中的定时任务调度的模块。
Bundle :多个Coordinator 的抽象,可以通过bundle将多个Coordinator 进行组装集合起来,形成一个bundle。

oozie安装

第一步:修改core-site.xml

修改hadoop的core-site.xml,添加hadoop集群的代理用户。将一下内容添加到core-site.xml中:

<property>
     <name>hadoop.proxyuser.root.hostsname>
     <value>*value>
property>
<property>
     <name>hadoop.proxyuser.root.groupsname>
     <value>*value>
property>

修改core-site.xml后,重启hadoop的hdfs和yarn集群,并且重启jobhistory服务:

cd /export/servers/hadoop-2.6.0-cdh5.14.0
sbin/stop-dfs.sh
sbin/start-dfs.sh
sbin/stop-yarn.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh stop historyserver
sbin/mr-jobhistory-daemon.sh start historyserver

第二步:上传oozie的安装包并解压

在http://archive.cloudera.com/cdh5/cdh/5/上找oozie的tar.gz包,上传到Linux机器上,并解压到安装目录

第三步:解压hadooplibs到与oozie平行的目录

在oozie的安装目录下有一个名称中带有oozie-hadooplibs的tar.gz包,将它解压到oozie安装目录的上级目录下。解压后,在oozie安装目录可以找到一个名为hadooplibs的目录。
hadoop离线阶段(第二十三节)oozie简介、安装和使用及oozie与hue的整合_第3张图片

第四步:创建libext目录

在oozie的安装目录下创建libext目录

cd /export/servers/oozie-4.1.0-cdh5.14.0
mkdir -p libext

第五步:拷贝依赖包到libext

1、拷贝hadooplibs中的依赖包

cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -ra hadooplibs/hadooplib-2.6.0-cdh5.14.0.oozie-4.1.0-cdh5.14.0/* libext/

2、拷贝mysql驱动包

cp /export/servers/hive-1.1.0-cdh5.14.0/lib/mysql-connector-java-5.1.38.jar /export/servers/oozie-4.1.0-cdh5.14.0/libext/

第六步:添加ext-2.2.zip压缩包

拷贝ext-2.2.zip(可以在网上找到)到libext目录当中去。

第七步:修改oozie-site.xml

oozie-site.xml在oozie安装目录的conf目录下,将以下内容添加到oozie-site.xml中:

<property>
    <name>oozie.service.JPAService.jdbc.drivername>
    <value>com.mysql.jdbc.Drivervalue>
property>

<property>
    <name>oozie.service.JPAService.jdbc.urlname>
    <value>jdbc:mysql://node03.hadoop.com:3306/oozievalue>
property>


<property>
<name>oozie.service.JPAService.jdbc.usernamename>
<value>rootvalue>
property>

<property>
    <name>oozie.service.JPAService.jdbc.passwordname>
    <value>123456value>
property>

<property>
	<name>oozie.processing.timezonename>
	<value>GMT+0800value>
property>


<property>
	<name>oozie.service.ProxyUserService.proxyuser.hue.hostsname>
    <value>*value>
property>


<property>   
	<name>oozie.service.ProxyUserService.proxyuser.hue.groupsname>
	<value>*value>
property>

<property>
    <name>oozie.service.coord.check.maximum.frequencyname>
	<value>falsevalue>
property>     


<property>
	<name>oozie.service.HadoopAccessorService.hadoop.configurationsname>
	<value>*=/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoopvalue>
property>

第八步:在mysql创建oozie数据库

登录MySQL,然后create database oozie;

第九步:上传oozie依赖的jar包到hdfs上面去

执行以下命令

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

bin/oozie-setup.sh  sharelib create -fs hdfs://node01:8020 \
-locallib oozie-sharelib-4.1.0-cdh5.14.0-yarn.tar.gz

实际上就是将这些jar包解压到了hdfs上面的路径下面去了

第十步:创建oozie的数据库表

执行以下命令

cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie-setup.sh  db create -run -sqlfile oozie.sql

第十一步:打包项目,生成war包

执行以下命令

cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie-setup.sh  prepare-war

第十二步:配置oozie的环境变量

在/etc/profile中添加环境变量

export OOZIE_HOME=/export/servers/oozie-4.1.0-cdh5.14.0
export OOZIE_URL=http://node03.hadoop.com:11000/oozie
export PATH=:$OOZIE_HOME/bin:$PATH

启用更改

source /etc/profile

第十三步:启动与关闭oozie服务

cd /export/servers/oozie-4.1.0-cdh5.14.0
# 启动命令
bin/oozied.sh start 
# 关闭命令,关闭命令只是介绍,不用真的执行
bin/oozied.sh stop

第十四步:浏览器页面访问oozie

用浏览器访问 http://node03:11000/oozie/。

第十五步:修改浏览器显示时区

1、修改oozie-console.js

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie-server/webapps/oozie
vim oozie-console.js

找到名为getTimeZone()的函数,将GMT改为GMT+0800

function getTimeZone() {
     
    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
    return Ext.state.Manager.get("TimezoneId","GMT+0800");
}

2、重启oozie

cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozied.sh stop
bin/oozied.sh start 

3、在oozie浏览器端修改时区
hadoop离线阶段(第二十三节)oozie简介、安装和使用及oozie与hue的整合_第4张图片

oozie单独使用

使用oozie调度shell脚本

第一步:解压官方提供的调度案例
oozie自带了各种案例,可以使用oozie自带的各种案例来作为模板,先把官方提供的各种案例给解压出来。

cd /export/servers/oozie-4.1.0-cdh5.14.0
tar -zxf oozie-examples.tar.gz

解压后,出现一个名为examples的目录
hadoop离线阶段(第二十三节)oozie简介、安装和使用及oozie与hue的整合_第5张图片
第二步:创建工作目录
在任意地方创建一个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

脚本:

#!/bin/bash
echo "hello world" >> /export/servers/hello_oozie.txt

第五步:修改模板下的配置文件
1、修改job.properties
修改内容如下:

nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=oozie_works
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/shell
EXEC=hello.sh

2、修改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.namename>
                <value>${queueName}value>
            property>
        configuration>
        <exec>${EXEC}exec>
        
        <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

从监控界面可以看到我们的任务执行成功了
在这里插入图片描述
注意:oozie是通过mapreduce去执行这个脚本任务,具体由集群中哪台或哪些机器去执行是不知道的,所以脚本执行的结果不一定在安装oozie的机器上。要解决这个问题可以在写脚本时,通过ssh登录到指定机器,然后执行命令。

使用oozie调度hive

第一步:拷贝hive的案例模板

cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -ra examples/apps/hive2/ oozie_works/

第二步:编辑hive模板
这里使用的是hiveserver2来进行提交任务,注意需要将hiveserver2的服务给启动起来。
1、修改job.properties
修改内容如下:

nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
jdbcURL=jdbc:hive2://node03:10000/default
examplesRoot=oozie_works

oozie.use.system.libpath=true
# 配置我们文件上传到hdfs的保存路径 实际上就是在hdfs 的/user/root/oozie_works/hive2这个路径下
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/hive2

2、修改workflow.xml
修改内容如下:


<workflow-app xmlns="uri:oozie:workflow:0.5" name="hive2-wf">
    <start to="hive2-node"/>

    <action name="hive2-node">
        <hive2 xmlns="uri:oozie:hive2-action:0.1">
            <job-tracker>${jobTracker}job-tracker>
            <name-node>${nameNode}name-node>
            <prepare>
                <delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/hive2"/>
                <mkdir path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data"/>
            prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.namename>
                    <value>${queueName}value>
                property>
            configuration>
            <jdbc-url>${jdbcURL}jdbc-url>
            <script>script.qscript>
            <param>INPUT=/user/${wf:user()}/${examplesRoot}/input-data/tableparam>
            <param>OUTPUT=/user/${wf:user()}/${examplesRoot}/output-data/hive2param>
        hive2>
        <ok to="end"/>
        <error to="fail"/>
    action>

    <kill name="fail">
        <message>Hive2 (Beeline) action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]message>
    kill>
    <end name="end"/>
workflow-app>

3、修改hivesql(即script.q)文件
修改内容如下:

DROP TABLE IF EXISTS test;
CREATE EXTERNAL TABLE test (a INT) STORED AS TEXTFILE LOCATION '${INPUT}';
insert into test values(10);
insert into test values(20);
insert into test values(30);

第三步:上传工作文件到hdfs

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works
hdfs dfs -put hive2/ /user/root/oozie_works/

第四步:执行oozie的调度

cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie job -oozie http://node03:11000/oozie -config oozie_works/hive2/job.properties  -run

第五步:查看调度结果
在这里插入图片描述

使用oozie调度MR任务

第一步:准备MR执行的数据
这里通过oozie调度一个MR的程序的执行,MR的程序可以是自己写的,也可以是hadoop工程自带的,这里就选用hadoop工程自带的MR程序来运行wordcount的示例。
准备以下数据上传到HDFS的/oozie/input路径下去,数据如下:

hello world hadoop
spark hive hadoop

第二步:拷贝mapreduce调度模板和mapreduce程序jar包
1、拷贝MR的任务模板

cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -ra examples/apps/map-reduce/ oozie_works/

2、删掉MR任务模板lib目录下自带的jar包

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/map-reduce/lib
rm -rf oozie-examples-4.1.0-cdh5.14.0.jar

3、拷贝要执行的MR程序的jar包到对应目录

cp /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar \
/export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/map-reduce/lib/

第四步:修改配置文件
1、修改job.properties
修改内容如下:

nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=oozie_works

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/map-reduce/workflow.xml
outputDir=/oozie/output
inputdir=/oozie/input

2、修改workflow.xml



<workflow-app xmlns="uri:oozie:workflow:0.5" name="map-reduce-wf">
    <start to="mr-node"/>
    <action name="mr-node">
        <map-reduce>
            <job-tracker>${jobTracker}job-tracker>
            <name-node>${nameNode}name-node>
            <prepare>
                <delete path="${nameNode}/${outputDir}"/>
            prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.namename>
                    <value>${queueName}value>
                property>
				
				
				   
                <property>
                    <name>mapred.mapper.new-apiname>
                    <value>truevalue>
                property>

                <property>
                    <name>mapred.reducer.new-apiname>
                    <value>truevalue>
                property>

                
                <property>
                    <name>mapreduce.job.output.key.classname>
                    <value>org.apache.hadoop.io.Textvalue>
                property>

                
                <property>
                    <name>mapreduce.job.output.value.classname>
                    <value>org.apache.hadoop.io.IntWritablevalue>
                property>

                
                <property>
                    <name>mapred.input.dirname>
                    <value>${nameNode}/${inputdir}value>
                property>

                
                <property>
                    <name>mapred.output.dirname>
                    <value>${nameNode}/${outputDir}value>
                property>

                
                <property>
                    <name>mapreduce.job.map.classname>
                    <value>org.apache.hadoop.examples.WordCount$TokenizerMappervalue>
                property>

                
                <property>
                    <name>mapreduce.job.reduce.classname>
                    <value>org.apache.hadoop.examples.WordCount$IntSumReducervalue>
                property>
				
                <property>
                    <name>mapred.map.tasksname>
                    <value>1value>
                property>

            configuration>
        map-reduce>
        <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>

第五步:上传调度任务到hdfs对应目录

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works
hdfs dfs -put map-reduce/ /user/root/oozie_works/

第六步:执行调度任务

cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie job -oozie http://node03:11000/oozie -config oozie_works/map-reduce/job.properties -run

oozie的任务串联

在实际工作当中,肯定会存在多个任务需要执行,并且存在上一个任务的输出结果作为下一个任务的输入数据这样的情况,所以需要在workflow.xml配置文件当中配置多个action,实现多个任务之间的相互依赖关系。
需求:首先执行一个shell脚本,执行完了之后再执行一个MR的程序,最后再执行一个hive的程序。
第一步:准备工作目录

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works
mkdir -p sereval-actions

第二步:准备我们的调度文件

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works
cp hive2/script.q sereval-actions/
cp shell/hello.sh sereval-actions/
cp -ra map-reduce/lib sereval-actions/

第三步:开发调度的配置文件
1、创建配置文件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.namename>
                <value>${queueName}value>
            property>
        configuration>
        <exec>${EXEC}exec>
        
        <file>/user/root/oozie_works/sereval-actions/${EXEC}#${EXEC}file>

        <capture-output/>
    shell>
    <ok to="mr-node"/>
    <error to="mr-node"/>
action>




<action name="mr-node">
        <map-reduce>
            <job-tracker>${jobTracker}job-tracker>
            <name-node>${nameNode}name-node>
            <prepare>
                <delete path="${nameNode}/${outputDir}"/>
            prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.namename>
                    <value>${queueName}value>
                property>
				
				
				   
                <property>
                    <name>mapred.mapper.new-apiname>
                    <value>truevalue>
                property>

                <property>
                    <name>mapred.reducer.new-apiname>
                    <value>truevalue>
                property>

                
                <property>
                    <name>mapreduce.job.output.key.classname>
                    <value>org.apache.hadoop.io.Textvalue>
                property>

                
                <property>
                    <name>mapreduce.job.output.value.classname>
                    <value>org.apache.hadoop.io.IntWritablevalue>
                property>

                
                <property>
                    <name>mapred.input.dirname>
                    <value>${nameNode}/${inputdir}value>
                property>

                
                <property>
                    <name>mapred.output.dirname>
                    <value>${nameNode}/${outputDir}value>
                property>

                
                <property>
                    <name>mapreduce.job.map.classname>
                    <value>org.apache.hadoop.examples.WordCount$TokenizerMappervalue>
                property>

                
                <property>
                    <name>mapreduce.job.reduce.classname>
                    <value>org.apache.hadoop.examples.WordCount$IntSumReducervalue>
                property>
				
                <property>
                    <name>mapred.map.tasksname>
                    <value>1value>
                property>

            configuration>
        map-reduce>
        <ok to="hive2-node"/>
        <error to="fail"/>
    action>






 <action name="hive2-node">
        <hive2 xmlns="uri:oozie:hive2-action:0.1">
            <job-tracker>${jobTracker}job-tracker>
            <name-node>${nameNode}name-node>
            <prepare>
                <delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/hive2"/>
                <mkdir path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data"/>
            prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.namename>
                    <value>${queueName}value>
                property>
            configuration>
            <jdbc-url>${jdbcURL}jdbc-url>
            <script>script.qscript>
            <param>INPUT=/user/${wf:user()}/${examplesRoot}/input-data/tableparam>
            <param>OUTPUT=/user/${wf:user()}/${examplesRoot}/output-data/hive2param>
        hive2>
        <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>

2、创建并编辑job.properties
内容如下:

nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=oozie_works
EXEC=hello.sh
outputDir=/oozie/output
inputdir=/oozie/input
jdbcURL=jdbc:hive2://node03:10000/default
oozie.use.system.libpath=true
# 配置我们文件上传到hdfs的保存路径 实际上就是在hdfs 的/user/root/oozie_works/sereval-actions这个路径下
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/sereval-actions/workflow.xml

第四步:上传我们的资源文件夹到hdfs对应路径

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/
hdfs dfs -put sereval-actions/ /user/root/oozie_works/

第五步:执行调度任务

cd /export/servers/oozie-4.1.0-cdh5.14.0/
bin/oozie job -oozie http://node03:11000/oozie \
-config oozie_works/serveral-actions/job.properties -run

oozie的任务调度,定时任务执行

在oozie当中,主要是通过Coordinator 来实现任务的定时调度,与workflow类似的,Coordinator 这个模块也是主要通过xml来进行配置即可,接下来就来看看如何配置Coordinator 来实现任务的定时调度
Coordinator 的调度主要可以有两种实现方式。

  • 第一种:基于时间的定时任务调度,
    oozie基于时间的调度主要需要指定三个参数,第一个起始时间,第二个结束时间,第三个调度频率
  • 第二种:基于数据的任务调度,只有在有了数据才会去出发执行
    这种是基于数据的调度,只要在有了数据才会触发调度任务

以下是oozie当中调度定时任务的设置
1、拷贝定时任务的调度模板

cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -r examples/apps/cron oozie_works/cron-job

2、拷贝hello.sh脚本

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works
cp shell/hello.sh  cron-job/

3、修改配置文件
1、修改job.properties
内容如下:

nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=oozie_works

oozie.coord.application.path=${nameNode}/user/${user.name}/${examplesRoot}/cron-job/coordinator.xml
start=2018-08-22T19:20+0800
end=2019-08-22T19:20+0800
EXEC=hello.sh
workflowAppUri=${nameNode}/user/${user.name}/${examplesRoot}/cron-job/workflow.xml

2、修改coordinator.xml
内容如下:

<coordinator-app name="cron-job" frequency="${coord:minutes(1)}" start="${start}" end="${end}" timezone="GMT+0800"
                 xmlns="uri:oozie:coordinator:0.4">
        <action>
        <workflow>
            <app-path>${workflowAppUri}app-path>
            <configuration>
                <property>
                    <name>jobTrackername>
                    <value>${jobTracker}value>
                property>
                <property>
                    <name>nameNodename>
                    <value>${nameNode}value>
                property>
                <property>
                    <name>queueNamename>
                    <value>${queueName}value>
                property>
            configuration>
        workflow>
    action>
coordinator-app>

3、修改workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.5" name="one-op-wf">
    <start to="action1"/>
    <action name="action1">
    <shell xmlns="uri:oozie:shell-action:0.2">
        <job-tracker>${jobTracker}job-tracker>
        <name-node>${nameNode}name-node>
        <configuration>
            <property>
                <name>mapred.job.queue.namename>
                <value>${queueName}value>
            property>
        configuration>
        <exec>${EXEC}exec>
        
        <file>/user/root/oozie_works/cron-job/${EXEC}#${EXEC}file>

        <capture-output/>
    shell>
    <ok to="end"/>
    <error to="end"/>
action>
    <end name="end"/>
workflow-app>

4、上传到hdfs对应路径

cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works
hdfs dfs -put cron-job/ /user/root/oozie_works/

5、运行定时任务

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

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

oozie当中任务的查看以及杀死

查看所有普通任务
oozie  jobs

查看定时任务
oozie jobs -jobtype coordinator

杀死某个任务
oozie job -kill [任务id]

oozie整合到hue使用

第一步:停止oozie与hue的进程

1、停止hue进程
cd到hue的安装目录

bin/oozied.sh stop

2、停止oozie进程
由于oozie配置环境变量,所以不用切换目录了,直接oozied.sh stop

第二步:修改oozie的配置文件

老版本的oozie需要修改配置文件,新版本已经不需要了,这一步不需要做。

第三步:修改hue的配置文件

修改hue的配置文件hue.ini

[liboozie]

# The URL where the Oozie service runs on. This is required in order for
# users to submit jobs. Empty value disables the config check.
oozie_url=http://node03.hadoop.com:11000/oozie

# Requires FQDN in oozie_url if enabled
## security_enabled=false

# Location on HDFS where the workflows/coordinator are deployed when submitted.
remote_deployement_dir=/user/root/oozie_works

[oozie],大概在1151行左右

# Location on local FS where the examples are stored.
# local_data_dir=/export/servers/oozie-4.1.0-cdh5.14.0/examples/apps

# Location on local FS where the data for the examples is stored.
# sample_data_dir=/export/servers/oozie-4.1.0-cdh5.14.0/examples/input-data

# Location on HDFS where the oozie examples and workflows are stored.
# Parameters are $TIME and $USER, e.g. /user/$USER/hue/workspaces/workflow-$TIME
# remote_data_dir=/user/root/oozie_works/examples/apps

# Maximum of Oozie workflows or coodinators to retrieve in one API call.
oozie_jobs_count=100

# Use Cron format for defining the frequency of a Coordinator instead of the old frequency number/unit.
enable_cron_scheduling=true

# Flag to enable the saved Editor queries to be dragged and dropped into a workflow.
enable_document_action=true

# Flag to enable Oozie backend filtering instead of doing it at the page level in Javascript. Requires Oozie 4.3+.
enable_oozie_backend_filtering=true

# Flag to enable the Impala action.
enable_impala_action=true

[filebrowser]

# Location on local filesystem where the uploaded archives are temporary stored.
archive_upload_tempdir=/tmp

# Show Download Button for HDFS file browser.
show_download_button=true

# Show Upload Button for HDFS file browser.
show_upload_button=true

# Flag to enable the extraction of a uploaded archive in HDFS.
enable_extract_uploaded_archive=true

第四步:启动hue与oozie的进程

启动hue进程

cd /export/servers/hue-3.9.0-cdh5.14.0
build/env/bin/supervisor

启动oozie进程

cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozied.sh start

oozie使用过程当中可能遇到的问题

Mysql权限配置

授权所有主机可以使用root用户操作所有数据库和数据表

mysql> grant all on *.* to root@'%' identified by '123456' with grant option;
mysql> flush privileges;
mysql> exit;

关闭oozie后有残留进程

如果bin/oozied.sh stop无法关闭,则可以使用kill -9 [pid],之后注意oozie根目录下的oozie-server/temp/xxx.pid文件一定要删除。

其他注意事项

  1. Oozie重新打包时,一定要注意先关闭进程,删除对应文件夹下面的pid文件。(可以参考第4条目)
  2. 配置文件一定要生效
    起始标签和结束标签无对应则不生效,配置文件的属性写错了,那么则执行默认的属性。
  3. libext下边的jar存放于某个文件夹中,导致share/lib创建不成功。
  4. 修改Hadoop配置文件,需要重启集群。一定要记得scp到其他节点。
  5. JobHistoryServer必须开启,集群要重启的。
  6. Mysql配置如果没有生效的话,默认使用derby数据库。
  7. 在本地修改完成的job配置,必须重新上传到HDFS。
  8. 将HDFS中上传的oozie配置文件下载下来查看是否有错误。
  9. Linux用户名和Hadoop的用户名不一致。
  10. sharelib找不到,包括重新初始化oozie

如果部署oozie出错,修复执行,初始化oozie:
1、停止oozie(要通过jps检查bootstrap进程是否已经不存在)
2、删除oozie-server/temp/*
3、删除HDFS上的sharelib文件夹
4、删除oozie.sql文件,删除Mysql中删除oozie库,重新创建
5、重新按照顺序执行文档中oozie的安装重新再来一遍

你可能感兴趣的:(大数据)