Oozie简单配置与使用

Oozie简单配置与使用,第1张

Oozie简单配置与使用

1、Oozie英文翻译

  驯象人
2、Oozie简介
  一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce、Pig Jobs的任务调度与协调。



  Oozie需要部署到Java Servlet容器中运行。



3、Oozie在集群中扮演的角色
  定时调度任务,多任务可以按照执行的逻辑顺序调度。



4、Oozie的功能模块
  4.1、Workflow
    顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个)
  4.2、Coordinator
    定时触发workflow
  4.3、Bundle Job
    绑定多个Coordinator
5、Oozie的节点
  5.1、控制流节点(Control Flow Nodes)
    控制流节点一般都是定义在工作流开始或者结束的位置,比如start,end,kill等。


以及提供工作流的执行路径机制,
    如decision,fork,join等。



  5.2、动作节点(Action Nodes)
    就是执行具体任务动作的节点。


6、Oozie的安装与部署

  6.1上传(oozie-4.0.0-cdh5.3.6.tar.gz)并解压(tar -zxvf oozie-4.0.0-cdh5.3.6.tar.gz -C /opt/module/)

  6.2上传ext-2.2.zip(可视化之类的工具)(不用解压)

  6.3修改Hadoop配置文件修改( cd /opt/module/hadoop-2.5.0-cdh5.3.6/etc/hadoop),完成后scp到其他机器节点

    6.3.1修改core-site.xml(vim  core-site.xml ),在最后添加

            <!-- Oozie Server的Hostname 允许代理的用户-->
<property>
<name>hadoop.proxyuser.jokerq.hosts</name>
<value>*</value>
</property> <!-- 允许被Oozie代理的用户组 -->
<property>
<name>hadoop.proxyuser.jokerq.groups</name>
<value>*</value>
</property>

    6.3.2配置JobHistoryServer服务(必须,如果原来已经不用配置,检查是否配置)

      6.3.2.1修改mapred-site.xml(vim  mapred-site.xml),在最后添加

<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop201:10020</value>
</property> <!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop201:19888</value>
</property>

      6.3.2.2修改yarn-site.xml(vim  yarn-site.xml)(已经修改过),在最后添加

              <!-- 任务历史服务 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop201:19888/jobhistory/logs/</value>
</property>

    6.4同步到其他机器节点(同步整个etc文件 *** 作)

      

cd ../..
scp -r etc/ hadoop202:/opt/module/hadoop-2.5.0-cdh5.3.6/
scp -r etc/ hadoop203:/opt/module/hadoop-2.5.0-cdh5.3.6/

  6.4开启Hadoop集群

    $ sh ~/start-cluster.sh(启动脚本)
    *尖叫提示:需要配合开启JobHistoryServer (启动命令:mr-jobhistory-daemon.sh start historyserver)

  6.5  最好执行一个MR任务进行测试(在hadoop202中执行此命令(mapreduce机器))。


bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /input/ /output111/

    启动后在http://192.168.25.202:8088/中查看点击History跳转成功即可

  

  6.7解压oozie目录下的hadooplibs到oozie所在的目录(解压成功后文件夹会生成在oozie目录下hadooplibs/)

 tar -zxvf /opt/module/oozie-4.0.0-cdh5.3.6/oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C /opt/module/ 

  6.8在oozie目录下创建创建libext文件夹(mkdir libext/)

  6.9拷贝一些依赖的Jar包到libext目录下

    6.9.1进入到hadooplibs下的hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6目录

cd /opt/module/oozie-4.0.0-cdh5.3.6/hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6

    6.9.2拷贝当前文件夹所有到libext目录下

cp * /opt/module/oozie-4.0.0-cdh5.3.6/libext/

    6.9.3拷贝Mysql驱动包到libext目录下

cd /opt/software/mysql-connector-java-5.1.27

    6.9.4拷贝驱动包

cp -a mysql-connector-java-5.1.27-bin.jar /opt/module/oozie-4.0.0-cdh5.3.6/libext/

  6.10将ext-2.2.zip拷贝到libext/目录下

 cp -a /opt/software/ext-2.2.zip /opt/module/oozie-4.0.0-cdh5.3.6/libext/

  6.11修改Oozie配置文件

    6.11.1 进入oozie的conf目录下(cd /opt/module/oozie-4.0.0-cdh5.3.6/conf/)

    6.11.2修改 (vim oozie-site.xml )

修改以下name对应的value:
            ** JDBC驱动
oozie.service.JPAService.jdbc.driver
com.mysql.jdbc.Driver ** Mysql的oozie数据库的配置 一会需要手动创建此oozie数据库
oozie.service.JPAService.jdbc.url
jdbc:mysql://192.168.25.201:3306/oozie ** 数据库用户名
oozie.service.JPAService.jdbc.username
root ** 数据库密码
oozie.service.JPAService.jdbc.password
123456 ** 让Oozie引用Hadoop的配置文件 修改路径为hadoop配置文件的路径
oozie.service.HadoopAccessorService.hadoop.configurations
*=/opt/module/hadoop-2.5.0-cdh5.3.6/etc/hadoop

  6.12在Mysql中创建Oozie的数据库

    6.12.1进入数据库( mysql -uroot -p123456)

    6.12.2创建数据库(mysql> create database oozie;)

  6.13初始化Oozie的配置

    6.13.1上传Oozie目录下的yarn.tar.gz文件到HDFS(尖叫提示:yarn.tar.gz文件会自行解压)

cd /opt/module/oozie-4.0.0-cdh5.3.6/
bin/oozie-setup.sh sharelib create -fs hdfs://hadoop201:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz
(执行成功之后,去50070检查对应目录有没有文件生成。


)

    6.13.2创建oozie.sql文件

bin/oozie-setup.sh db create -run -sqlfile oozie.sql

    6.13.3打包项目,生成war包(Oozie停止状态)

bin/oozie-setup.sh prepare-war

  6.14启动Oozie服务

 bin/oozied.sh start
(关闭Oozie服务:$ bin/oozied.sh stop)

  6.15访问Oozie的Web页面

案例

一、案例一    使用Oozie调度Shell脚本

1.进入(cd /opt/module/oozie-4.0.0-cdh5.3.6/)

2.解压官方案例模板

tar -zxvf oozie-examples.tar.gz

3.    创建oozie-apps文件夹(mkdir oozie-apps)

4.拷贝文件到文件夹下

cp -r examples/apps/shell/ oozie-apps/

5.进入文件夹(cd  oozie-apps/shell/)

6.随便编写一个脚本p1.sh  (vi p1.sh),添加如下测试内容

#!/bin/bash
/usr/sbin/ifconfig > /tmp/p1.log

7.编辑job.properties( vim job.properties )修改如下内容

8.修改workflow.xml   (vim   workflow.xml)

(<file>/ser/jokerq/oozie-apps/shell/${EXEC}#${EXEC}</file>)

9.上传任务配置

/opt/module/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/module/oozie-4.0.0-cdh5.3.6/oozie-apps /user/jokerq

10.执行任务

cd /opt/module/oozie-4.0.0-cdh5.3.6/
bin/oozie job -oozie http://hadoop201:11000/oozie -config oozie-apps/shell/job.properties -run

在mapreduce的8088可以查看

11.想要杀死某个任务

bin/oozie job -oozie http://hadoop201:11000/oozie -kill 0000000-181230182825159-oozie-joke-W
案例二   执行多个Job调度

1.解压官方案例模板,创建文件夹等 *** 作(上面已经执行)

2.   进入(cd /opt/module/oozie-4.0.0-cdh5.3.6/oozie-apps/shell)

3.创建测试脚本p1.sh(vim p1.sh),添加如下

#!/bin/bash
/usr/bin/date > /tmp/p1.log

4.创建测试脚本p2.sh(vim p2.sh),添加如下

#!/bin/bash
/usr/bin/date > /tmp/p2.log

5.编辑job.properties

6.编辑workflow.xml(添加一个action,一个action对应一个脚本)

7.上传

(先删除上个案例留下的)/opt/module/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -rmr /user/jokerq/oozie-apps
/opt/module/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/module/oozie-4.0.0-cdh5.3.6/oozie-apps /user/jokerq

8.执行

cd /opt/module/oozie-4.0.0-cdh5.3.6/
bin/oozie job -oozie http://hadoop201:11000/oozie -config oozie-apps/shell/job.properties -run

案例三 调度MapReduce任务

1.先编写一个可以运行的MR任务的.jar包(此处拷贝mapredurce的例子jar包)

cp -a /opt/module/hadoop-2.5.0-cdh5.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar /opt/module/oozie-4.0.0-cdh5.3.6/

2.进入 oozie目录(  cd /opt/module/oozie-4.0.0-cdh5.3.6/)

3.拷贝官方模板到oozie-apps

cp -r /opt/module/oozie-4.0.0-cdh5.3.6/examples/apps/map-reduce/ /opt/module/oozie-4.0.0-cdh5.3.6/oozie-apps/

4.测试一下wordcount在yarn中的运行

/opt/module/hadoop-2.5.0-cdh5.3.6/bin/yarn jar hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /input/ /ouput111/

5.配置job.properties(cd oozie-apps/map-reduce/   --->>>   vim job.properties )

6.配置workflow.xml (vim workflow.xml)

<workflow-app xmlns="uri:oozie:workflow:0.2" 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}/output/"/>
</prepare>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<!-- 配置调度MR任务时,使用新的API -->
<property>
<name>mapred.mapper.new-api</name>
<value>true</value>
</property> <property>
<name>mapred.reducer.new-api</name>
<value>true</value>
</property> <!-- 指定Job Key输出类型 -->
<property>
<name>mapreduce.job.output.key.class</name>
<value>org.apache.hadoop.io.Text</value>
</property> <!-- 指定Job Value输出类型 -->
<property>
<name>mapreduce.job.output.value.class</name>
<value>org.apache.hadoop.io.IntWritable</value>
</property> <!-- 指定输入路径 -->
<property>
<name>mapred.input.dir</name>
<value>/input/</value>
</property> <!-- 指定输出路径 -->
<property>
<name>mapred.output.dir</name>
<value>/output/</value>
</property> <!-- 指定Map类 -->
<property>
<name>mapreduce.job.map.class</name>
<value>org.apache.hadoop.examples.WordCount$TokenizerMapper</value>
</property> <!-- 指定Reduce类 -->
<property>
<name>mapreduce.job.reduce.class</name>
<value>org.apache.hadoop.examples.WordCount$IntSumReducer</value>
</property> <property>
<name>mapred.map.tasks</name>
<value>1</value>
</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>

7.拷贝待执行的jar包到map-reduce的lib目录下

cp -a /opt/module/oozie-4.0.0-cdh5.3.6/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar ./lib

8.上传配置好的app文件夹到HDFS

 /opt/module/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/module/oozie-4.0.0-cdh5.3.6/oozie-apps/map-reduce/  /user/jokerq/oozie-apps

9.执行任务

cd /opt/module/oozie-4.0.0-cdh5.3.6/
bin/oozie job -oozie http://hadoop201:11000/oozie -config oozie-apps/map-reduce/job.properties -run
案例四 Coordinator周期性调度任务

1.配置Linux时区为+0800(在设置集群同步时间时设置的上海时间)

2.改oozie-default.xml文件(cd /opt/module/oozie-4.0.0-cdh5.3.6/conf    --->>>     vim oozie-default.xml ),修改oozie的时区为GMT+0800:

3.修改js框架中的关于时间设置的代码

vi /opt/module/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie/oozie-console.js

4.重启oozie服务,并重启浏览器(一定要注意清除缓存)

cd /opt/module/oozie-4.0.0-cdh5.3.6/
$ bin/oozied.sh stop
$ bin/oozied.sh start

5.拷贝官方模板配置定时任务

cp -r /opt/module/oozie-4.0.0-cdh5.3.6/examples/apps/cron/ /opt/module/oozie-4.0.0-cdh5.3.6/oozie-apps/

6.进入目录

cd /opt/module/oozie-4.0.-cdh5.3.6/oozie-apps/cron

7.修改 job.properties

nameNode=hdfs://hadoop201:8020
jobTracker=hadoop202:8032
queueName=default
examplesRoot=oozie-apps oozie.coord.application.path=${nameNode}/user/${user.name}/${examplesRoot}/cron
start=2018-12-31T21:30+0800
end=2019-1-1T21:30+0800
workflowAppUri=${nameNode}/user/${user.name}/${examplesRoot}/cron EXEC1=p1.sh
EXEC2=p2.sh

8.修改coordinator.xml

9.修改workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.5" name="one-op-wf">
<start to="p1-shell-node"/>
<action name="p1-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>${EXEC1}</exec>
<file>/user/jokerq/oozie-apps/shell/${EXEC1}#${EXEC1}</file>
<!-- <argument>my_output=Hello Oozie</argument>-->
<capture-output/>
</shell>
<ok to="p2-shell-node"/>
<error to="fail"/>
</action> <action name="p2-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>${EXEC2}</exec>
<file>/user/jokerq/oozie-apps/shell/${EXEC2}#${EXEC2}</file>
<!-- <argument>my_output=Hello Oozie</argument>-->
<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>

10.创建p1.sh和p2.sh测试脚本(同上一个测试脚本内容)

11.上传配置,启动任务(未完全成功,有bug残留(提示时间格式不正确))

 /opt/module/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/module/oozie-4.0.0-cdh5.3.6/oozie-apps/cron/ /user/jokerq/oozie-apps
cd /opt/module/oozie-4.0.0-cdh5.3.6/
bin/oozie job -oozie http://hadoop201:11000/oozie -config oozie-apps/cron/job.properties -run

小问题总结:
1、Mysql权限配置
2、workflow.xml配置的时候不要忽略file属性
3、jps查看进程时,注意有没有bootstrap
4、关闭oozie
** bin/oozied.sh stop)如果无法关闭,则可以使用kill
** kill -9 11111
oozie-server/temp/xxx.pid文件一定要删除
5、Oozie重新打包时,一定要注意先关闭进程,删除对应文件夹下面的pid文件。


(可以参考第4条目)
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的用户名不一致。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/585871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存