美文网首页
oozie服务安装及使用

oozie服务安装及使用

作者: 海阔天空_d304 | 来源:发表于2018-06-18 20:01 被阅读0次

    1、安装Oozie(4.2.0)及遇到的一些问题

    1.1、依赖环境及版本

    Oozie-4.2.0

    Maven3.x

    Mysql数据库5.6.16

    Mysql驱动jar包(5.1.X匹配数据库5.6.X)

    ext-2.2.zip(小写的e,并且必须是这个版本)

    JDK-1.8

    Hadoop-2.6.2

    Spark-1.5.1

    用的root用户

    安装maven,配环境变量,改配置文件setting假如阿里云中央镜像仓库地址(因为要用使用maven编译oozie,会下载一些依赖jar包)

    (说明:oozie是在servlet容器中运行的,可以用Tomcat等其他web容器,也可以使用内嵌的Tomcat或jetty服务器,

    Oozie-4.2.0                              Oozie-5.0.0

    本安装过程是基于内嵌的Tomcat安装的,基于外部Tomcat的安装可以查看官方文档 http://oozie.apache.org/docs/5.0.0/AG_Install.html)

    测试服务器部署情况:

    在Master节点安装oozie-server,在maste和其他slave节点安装oozie-client

    1.2安装oozie

    下载oozie tar包(地址:http://archive.apache.org/dist/oozie/4.2.0/oozie-4.2.0.tar.gz)

    解压到安装目录,进入解压后的目录cd oozie-4.2.0/bin

    1.2.1编译源文件构建项目 命令:

    ./mkdistro.sh -DskipTests -Phadoop-2 –Dhadoop.varsion=2.6.2 –Dspark.version=1.5.1

    (-Dxxx.version=x.x.x是指定版本,如果需要其他的框架依次指定需要的版本即可                           

    例如: -Ddistcp.version=2.6.0 -Dsqoop.version=1.4.4 -Dhive.version=0.13.1 -Dpig.version=0.15.0)

    编译的时候会因为版本依赖环境的原因报两个错:

    1.

    根据提示看下源代码:

    Jdk1.8开始会校验java注释,不符合W3C HTML 4.01 HTML规范要求的编译时会报错

    详细信息可以看(http://blog.joda.org/2014/02/turning-off-doclint-in-jdk-8-javadoc.html)

    解决方法:

    在pom.xml文件中找到这个插件的引用

    更改前:

    更改后:

    2、

    http://repository.codehaus.org这个地址现在已经不能访问了(4.2.0版本的时候应该可以)

    打开pom.xml找到这个配置项,通过这个地址下载一些依赖

    下面是4.2.0版本

    这个是5.0.0版本

    对比看下

    这个引用已经被去掉了

    4.2.0版本可以直接去掉或通过配置不检索这个Maven库

    Snapshot版本代表不稳定、尚处于开发中的版本,快照版本,如果现在开发的项目依赖其他项目可以设置为true

    Release版本代表稳定的版本,发行版本

    <releases>

    <enabled>false</enabled>

    </releases>

    不使用snapshot和releases版本应该可以起到不检索这个库的效果

    再次用命令编译,这样就编译完成了:

    构建成后,可以在oozie-3.3.2/distro/target目录下看到构建后的文件,进入distro/target/目录:

    解压oozie-4.2.0-distro.tar.gz生成oozie-4.2.0

    对比oozie-4.2.0和oozie-4.2.0-distro目录是一样的,所以可以将oozie-4.2.0-distro删掉

    在/etc/profile文件中配置环境变量

    export OOZIE_HONE= /usr/local/bigdata/oozie-4.2.0/distro/target/oozie-4.2.0

    PATH=$OOZIE_HOME/bin:$PATH

    使配置生效:

    source /etc/profile

    1.2.2、在oozie-4.2.0目录下创建lib目录,将libext包下面的包复制到lib下

    在/usr/local/bigdata/oozie-4.2.0目录下创建libext目录

    下载ext-2.2-zip

    (可以在CSDN上下载,其他地方找的有些不能用)

    下载mysql(mysql-connector-java-5.1.16-bin.jar)驱动jar包

    将这两个包都放在libext里面,再将Hadoop目录下所有的*.jar包复制到这个目录下,先进到hadoop安装目录下/usr/local/bigdata/hadoop-2.6.2

    执行命令(以自己本机路径为准)

    find -name *.jar |xargs -t -i cp {} /usr/local/bigdata/oozie-4.2.0/libext

    然后进入/usr/local/bigdata/oozie-4.2.0/distro/target/oozie-4.2.0/bin目录下(如果已经配了环境变量可以直接执行)执行命令./ oozie-setup.sh prepare-war命令(本机要安装unzip和zip,如果没有安装可以通过yum安装)

    完成之后会在/usr/local/bigdata/oozie-4.2.0/distro/target/oozie-4.2.0目录下生成lib包,里面放着执行bin里面脚本所需要的jar包,但可能jar包不全,所以将/root/oozie-4.2.0/libext目录下的jar和zip复制到lib包下

    1.2.3、初始化数据库

    配置oozie-site.xml:

    默认情况下,Oozie的配置中有个配置项oozie.service.JPAService.create.db.schema,值为false,设置非自动创建数据库,这里保持默认设置,这样可以通过手动创建Oozie数据库(可以对用户进行权限控制)

    更多配置可查看官网:http://oozie.apache.org/docs/5.0.0/AG_Install.html

    在mysql数据库中创建数据库oozie(本例使用oz数据库)

    然后可以执行如下命令,生成Oozie所需要的数据表:

    ooziedb.sh create -sqlfile oozie.sql –run

    控制台输出日志,没有报错,并且在当前目录下可以看到,同时也生成了oozie.sql脚本文件。到MySQL数据库中可以看到生成的表,说明上述操作执行成功

    1.2.4、上传examples到hdfs

    命令:hadoop fs -put examples/ /user/root

    1.2.5、启动oozie

    下面可以启动Oozie,使用如下命令:

    oozie-start.sh

    1.2.6访问11000端口页面

    如果页面报错,查看后台oozie服务,如果启动起来了,则可能是这个路径下的jar包和Tomcat的jar冲突了,根据报错信息将这个目录下的jar包删除就可以了

    2、在master和slave节点安装oozie-client

    在master节点oozie-server安装目录下

    将oozie-client-4.2.0.tar.gz复制到master节点安装目录下

    cp oozie-client-4.2.0.tar.gz /usr/local/bigdata/

    将oozie-client-4.2.0.tar.gz复制到其他slave节点(因为配置了节点间ssh免密登录所以可以直接通过命令复制,其他节点也使用同样的方法)

    scp oozie-client-4.2.0.tar.gz root@120.78.251.92:/usr/local/bigdata/

    通过tar –zxvf解压

    在bin目录下只有oozie脚本

    最后配下环境变量就行了,执行oozie任务可以在任意目录下

    Oozie job –oozie http://ip:port/oozie -config job.properties -run

    3、Oozie使用及常用命令

    启动oozie服务的命令:oozie-start.sh

    关闭oozie服务的命令:oozie-stop.sh

    Oozie的web页面地址:http://oozie服务所在服务器IP地址:port(默认是11000)

    可以看下oozie带的map-reduce例子的目录结构

    vim job.properties:

    (说明:属性jobTracker在oozie-5.0.0已经改成resourceManager了)

    所有示例的输入都在examples/input-data目录中。

    这些示例在examples/output-data/$ {EXAMPLE_NAME}目录下创建输出。

    (DAG有向无环图)节点执行顺序

    控制流节点:控制工作流程和工作流程作业执行路径的开始和结束的节点

    动作节点:触发执行计算/处理任务的节点

    各个节点的作用可以看:http://oozie.apache.org/docs/4.2.0/WorkflowFunctionalSpec.html

    执行一个oozie任务

    使用命令:

    oozie  job  –oozie http://oozie服务所在服务器IP地址:port(默认是11000)/oozie  -config  job.properties(本地的job.properties,不是hdfs中的)

    例子:oozie job –oozie http://119.23.155.53:11000/oozie -config job.properties –run

    (注意:job.properties文件在提交期间需要是本地文件,不是HDFS路径

    可以在环境变量中配置:

    export OOZIE_URL =http://localhost:11000/oozie

    配置完之后可以这样写:oozie job –config job.properties -run)

    用oozie用户启用的oozie服务

    一个问题:

    使用root用户执行oozie任务

    使用oozie用户执行oozie任务

    需要更改hadoop的配置文件core-site.xml

    (注意:如果使用root用户也需要加这个配置将oozie改成root)

    (说明:这个必须配置,不然执行oozie任务是会报错(还不太理解为什么)

    重启hadoop集群,然后在执行oozie任务

    这样就成功了

    Java示例代码:

    package com.libaba.oozie;

    import org.apache.oozie.client.OozieClient;

    import org.apache.oozie.client.OozieClientException;

    import org.apache.oozie.client.WorkflowJob;

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    import java.util.Properties;

    public class MyOozie {

        private static Logger logger = LoggerFactory.getLogger(MyOozie.class) ;

        public static void main(String[] args) {

            try {

                oozie();

            } catch (OozieClientException e) {

                e.printStackTrace();

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

        public static void oozie() throws OozieClientException, InterruptedException {

            //获取本地Oozie的OozieClient

            OozieClient oozieClient = new OozieClient("http://119.23.155.53:11000/oozie") ;

            //创建工作流作业配置并设置工作流应用程序路径

            Properties conf = oozieClient.createConfiguration();

      conf.setProperty(OozieClient.APP_PATH,"hdfs://119.23.155.53:9000/user/root/examples/apps/map-reduce");

            //设置工作参数(对应本机地址,这里面是job.properties里面的参数)

    //5.0.0是resourceManager,4.2.0是jobTracker

            //conf.setProperty("resourceManager","119.23.155.53:8032") ;

    conf.setProperty("jobTracker","119.23.155.53:8032") ;

            conf.setProperty("nameNode", "hdfs:// 119.23.155.53:9000");

            conf.setProperty("examplesRoot", "examples");

            conf.setProperty("queueName","default") ;

            conf.setProperty("master","local[*]") ;

            conf.setProperty("inputDir","/usr/root/inputdir") ;

            conf.setProperty("outputDir","/usr/root/outputdir") ;

            conf.setProperty("user.name","root") ;

            //提交并启动工作流作,会加载properties里面的属性配置

            String jobId = oozieClient.run(conf) ;

            System.out.println("工作流作业提交了");

            System.out.println(jobId);

            System.out.println("工作状态--->" + oozieClient.getJobInfo(jobId).getStatus());

            //等待工作流作业每10秒钟打印一次

            while (oozieClient.getJobInfo(jobId).getStatus() == WorkflowJob.Status.RUNNING){

                System.out.println("工作流作业正在进行...") ;

                logger.info("工作流作业正在进行...");

                Thread.sleep(10000);

            }

            while (oozieClient.getJobInfo(jobId).getStatus() == WorkflowJob.Status.SUCCEEDED){

                System.out.println("工作流作业执行成功...") ;

                logger.info("工作流作业执行成功.....");

                Thread.sleep(10000);

            }

            System.out.println("工作流执行结束");

        }

    }

    查看某个oozie任务的状态,使用命令:

    oozie  job  –oozie http://oozie服务所在服务器IP地址:port(默认是11000)/oozie  -info  oozie任务的ID (任务启动时会生成可以在控制台或日志中查看,也可以再oozie服务的11000WEB页面查看)

    例子:oozie job –oozie http://119.23.155.53:11000/oozie -info 0000000-180522133038283-oozie-oozi-W

    也可以在页面上web页面上查看当前任务的具体信息

    Oozie的生命周期

    PREP prep 预备,准备  一个工作流Job第一次创建将处于PREP状态,表示工作流Job已经定义,但是没有运行。

    RUNNING running 运转 当一个已经被创建的工作流Job开始执行的时候,就处于RUNNING状态。它不会达到结束状态,只能因为出错而结束,或者被挂起。

    SUSPENDED suspended 暂停的 一个RUNNING状态的工作流Job会变成SUSPENDED状态,而且它会一直处于该状态,除非这个工作流Job被重新开始执行或者被杀死。

    SUCCEEDED succeeded 成功,完成,到达 当一个RUNNING状态的工作流Job到达了end节点,它就变成了SUCCEEDED最终完成状态。

    KILLED killed 被杀死的 当一个工作流Job处于被创建后的状态,或者处于RUNNING、SUSPENDED状态时,被杀死,则工作流Job的状态变为KILLED状态。

    FAILED failed 失败了的,不成功的 当一个工作流Job不可预期的错误失败而终止,就会变成FAILED状态。

    工作流状态转移

    转移前状态

    转移后状态集合

    未启动

    PREP

    PREP

    RUNNING、KILLED

    RUNNING

    SUSPENDED、SUCCEEDED、KILLED、FAILED

    SUSPENDED

    RUNNING、KILLED

    KILLED                    SUCCEEDED                SUSPENDED

    以后有新的认识会更新上传到github,可以通过下面地址下载

    GitHub地址:https://github.com/privateGitLab/oozie-4.2.0

    git@github.com:privateGitLab/oozie-4.2.0.git

    相关文章

      网友评论

          本文标题:oozie服务安装及使用

          本文链接:https://www.haomeiwen.com/subject/xczneftx.html