当前位置: 代码迷 >> 综合 >> Apache Oozie
  详细解决方案

Apache Oozie

热度:19   发布时间:2024-02-24 10:52:25.0

Oozie概述:

oozie是一个管理Hadoop生态圈job的工作流调度系统,由Cloudera公司贡献给Apache,Oozie是运行于javaServlet容器上的一个javaweb应用。Oozie的目的是按照DAG有向无环图调度一系列的Map/Reduce或者Hive等任务,Oozie工作流由hpdl(hadoop  Process Definition  Language) 定义一种XML流程定义语言。

适用场景:

需要按照顺序进行一系列的任务;

需要按照并行处理的任务;

需要定时,周期触发任务;

可视化作业运行过程;

运行结果或异常的通报;

oozie的架构:

oozie client: 提供命令行,java  api  rest 等方式,对oozie的工作流程的提交,启动,运行等操作。

oozie WebApp: 即oozie Server 本质是一个java应用,可以使用内置的web容器,也可以使用外置的web容器。

hadoop Cluster: 底层执行oozie编排流程的各个Hadoop生态圈组件。

oozie基本原理:

   oozie对工作流的编排,是基于workflow.xml 文件来完成的。用户预先将工作流执行规则定制与workflow.xml文件中,

并在job.properties配置相关的参数,然后由oozie server向MR提交job来启动工作流。

流程节点:

 工作流由两种类型的节点组成,分别是:

Control Flow Nodes: 控制工作流执行路径,包括start ,end,kill,decision,fork,join。

Action Nodes: 决定每个操作执行的任务类型,包括MapReduce,java,hive,shell等。

oozie工作流类型:
 

workflow:

      规则相对简单,不涉及定时,批处理的工作流,顺序执行流程节点。workflow有个大缺点:没有定时和条件出发功能。

Coordinator:

       coordinator将多个工作流job组织起来,称为Coordinator job ,并指定触发时间和频率,还可以配置数据集,并发数等,

类似于在工作流外部增加了一个协调器来管理这些工作流的工作流job的运行。

Bundle:

         针对coordinator  的批处理工作流,Bunndle将多个Coordinator管理起来,这这样我们只需要一个Bundle提交即可。

oozie安装:

修改Hadoop相关配置:
   修改hadoop的配置文件 core-site.xml

<property>

        <name>hadoop.proxyuser.root.hosts</name>

        <value>*</value>

</property>

<property>

        <name>hadoop.proxyuser.root.groups</name>

        <value>*</value>

</property>

hadoop.proxyuser.root.hosts 允许通过httpfs方式访问hdfs的主机名、域名;

hadoop.proxyuser.root.groups允许访问的客户端的用户组

配置jobhistory服务:
 

修改hadoop的配置文件mapred-site.xml

<property>

  <name>mapreduce.jobhistory.address</name>

  <value>node-1:10020</value>

  <description>MapReduce JobHistory Server IPC host:port</description>

</property>

 

<property>

  <name>mapreduce.jobhistory.webapp.address</name>

  <value>node-1:19888</value>

  <description>MapReduce JobHistory Server Web UI host:port</description>

</property>

<!-- 配置运行过的日志存放在hdfs上的存放路径 -->

<property>

    <name>mapreduce.jobhistory.done-dir</name>

    <value>/export/data/history/done</value>

</property>

 

<!-- 配置正在运行中的日志在hdfs上的存放路径 -->

<property>

    <name>mapreduce.jobhistory.intermediate-done-dir</name>

    <value>/export/data/history/done_intermediate</value>

</property>

启动history-server 

              mr-jobhistory-daemon.sh start historyserver

停止 history-server

               mr-jobhistory-daemon.sh stop historyserver

通过浏览器访问 Hadoop  jobhistory 的webUI

http://node-1:19888

重启hadoop 集群先关服务

 

上传oozie的安装包并解压:

 

oozie的安装包上传到/export/softwares

tar -zxvf oozie-4.1.0-cdh5.14.0.tar.gz

解压hadooplibs到与oozie平行的目录

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

tar -zxvf oozie-hadooplibs-4.1.0-cdh5.14.0.tar.gz -C ../

添加相关依赖:

oozie的安装路径下创建libext目录

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

mkdir -p libext

 

拷贝hadoop依赖包到libext

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/

 

上传mysql的驱动包到libext

mysql-connector-java-5.1.32.jar

添加ext-2.2.zip压缩包到libext

ext-2.2.zip

修改oozie-site.xml

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

vim oozie-site.xml

oozie默认使用的是UTC的时区,需要在oozie-site.xml当中配置时区为GMT+0800时区

<property>

        <name>oozie.service.JPAService.jdbc.driver</name>

        <value>com.mysql.jdbc.Driver</value>

</property>

<property>

        <name>oozie.service.JPAService.jdbc.url</name>

        <value>jdbc:mysql://node-1:3306/oozie</value>

    </property>

<property>

                   <name>oozie.service.JPAService.jdbc.username</name>

                   <value>root</value>

 </property>

<property>

        <name>oozie.service.JPAService.jdbc.password</name>

        <value>hadoop</value>

</property>

<property>

             <name>oozie.processing.timezone</name>

              <value>GMT+0800</value>

 </property>

<property>

        <name>oozie.service.coord.check.maximum.frequency</name>

         <value>false</value>

 </property>    

<property>

        <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>

        <value>*=/export/servers/hadoop-2.7.5/etc/hadoop</value>

</property>

初始化mysql 相关信息:
 

上传oozie的解压后目录的下的yarn.tar.gz到hdfs目录

bin/oozie-setup.sh  sharelib create -fs hdfs://node-1:9000 -locallib oozie-sharelib-4.1.0-cdh5.14.0-yarn.tar.gz

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

创建mysql数据库

mysql -uroot -p

create database oozie;

 

初始化创建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环境变量:

vim /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=$PATH:$OOZIE_HOME/bin

source /etc/profile

启动关闭oozie服务:

启动命令

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

bin/oozied.sh start

关闭命令

bin/oozied.sh stop

启动的时候产生的 pid文件,如果是kill方式关闭进程 则需要删除该文件重新启动,否则再次启动会报错。

浏览器webUI页面:
http://node-1:11000/oozie/

解决oozie页面时区显示异常:

页面访问的时候,发现oozie使用的还是GMT的时区,与我们现在的时区相差一定的时间,所以需要调整一个js的获取时区的方法,将其改成我们现在的时区。

修改js当中时区问题:
 

cd  oozie-server/webapps/oozie

vim oozie-console.js

function getTimeZone() {

    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

    return Ext.state.Manager.get("TimezoneId","GMT+0800");

}

重启oozie即可

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

bin/oozied.sh stop

bin/oozied.sh start

 

 

  相关解决方案