• Oozie介绍


    1. Hadoop常见调度框架:

    (1)Linux Crontab:
    Linux自带的任务调度计划,在任务比较少的情况下,可以使用这种方式,直接执行脚本,例如添加一个执行计划: 0 12 * hive -f xxx.sql
    (2)Azkaban:
    (3)Oozie:Cloudera公司开源
    (4)Zeus:阿里开源。

    Oozie是管理Hadoop作业的工作流调度系统。Oozie定义了控制流节点和动作节点。Oozie实现的功能:
    (1)Workflow:顺序执行流程节点;
    (2)Coordinator:定时触发workflow;
    (3)Bundle Job:绑定多个Coordinator。
    Work Flow流程图:


    work flow.png


    Coordinator生命周期:


    coordinator.png


    Bundle:


    Bundle.png

    2. Oozie安装:

    Oozie不需要设置OOZIE_HOME环境变量(系统自行计算),推荐使用单独的用户(而不是root)来安装Oozie。

    1.编译源码,解压压缩包:

    官方文档

    如果需要对Oozie个性化修改,可以自行修改源代码并编译,这里我直接使用官网编译好的版本oozie-4.0.0-cdh5.3.6.tar.gz:

    $ tar zxf oozie-4.0.0-cdh5.3.6.tar.gz -C /opt/modules/

    以下配置添加到core-site.xml文件(使用用户和hostname替换文档中内容):
    $HADOOP_HOME/etc/hadoop/core-site.xml:

    <!-- OOZIE -->
    <property>
        <name>hadoop.proxyuser.natty.hosts</name>
        <value>hadoop-senior01.pmpa.com</value>
    </property>
    <property>
        <name>hadoop.proxyuser.natty.groups</name>
        <value>*</value>
    </property>

    修改oozie配置文件,$OOZIE_HOME/conf/oozie-site.xml:

    <property>
        <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
        <value>*=/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop</value>
        <description>
            Comma separated AUTHORITY=HADOOP_CONF_DIR, where AUTHORITY is the HOST:PORT of
            the Hadoop service (JobTracker, HDFS). The wildcard '*' configuration is
            used when there is no exact match for an authority. The HADOOP_CONF_DIR contains
            the relevant Hadoop *-site.xml files. If the path is relative is looked within
            the Oozie configuration directory; though the path can be absolute (i.e. to point
            to Hadoop client conf/ directories in the local filesystem.
        </description>
    </property>

    在解压oozie二进制发行包的目录,解压hadooplibs发行包,也就是oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz

    $ tar zxf oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C /opt/modules/

    这样,oozie的安装目录多了一个hadooplibs目录。

    2.详细配置:

    启动应该使用oozied.sh脚本,并添加,start、stop、run等参数。
    在oozie的解压目录下创建libext目录。并将hadooplibs下的jar包拷贝到这个目录里,需要注意的是hadooplibs目录下有个文件夹hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6,hadooplib-2.5.0-mr1-cdh5.3.6.oozie-4.0.0-cdh5.3.6;后者对应于mapreduce1,所以我们拷贝第一个文件夹下的jar包即可。
    拷贝extjs的压缩包到libext目录。

    $ mkdir libext
    $ cp hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/* libext/
    $ cp ext-2.2.zip /opt/modules/oozie-4.0.0-cdh5.3.6/libext/

    安装mysql数据库,并生成相关表(oozie是一个web系统,需要自己的知识库),所以,我们需要mysql connector驱动包,拷贝到$oozie_home/libext下。

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

    (1)生成mysql数据表(oozie所需要的)。
    我们可以使用 bin/oozie-setup.sh命令的“db create”参数,来操作mysql数据库创建相应的库和表。但在使用这个命令前,需要先给oozie关联上mysql。下面先做关联操作:
    修改oozie的配置文件($oozie_home/conf/oozie-site.xml),配置driver、url、username、password:

        <!-- Oozie Related Mysql -->
        <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://hadoop-senior01.pmpa.com:3306/oozie?createDatabaseIfNotExist=true</value>
        </property>
    
        <property>
            <name>oozie.service.JPAService.jdbc.username</name>
            <value>root</value>
        </property>
    
        <property>
            <name>oozie.service.JPAService.jdbc.password</name>
            <value>123456</value>
        </property>

    (2)关联好mysql之后,通过脚本创建mysql的库表:

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

    执行成功之后,登陆到mysql验证数据库表的创建情况:

    mysql> show tables;
    +------------------------+
    | Tables_in_oozie        |
    +------------------------+
    | BUNDLE_ACTIONS         |
    | BUNDLE_JOBS            |
    | COORD_ACTIONS          |
    | COORD_JOBS             |
    | OOZIE_SYS              |
    | OPENJPA_SEQUENCE_TABLE |
    | SLA_EVENTS             |
    | SLA_REGISTRATION       |
    | SLA_SUMMARY            |
    | VALIDATE_CONN          |
    | WF_ACTIONS             |
    | WF_JOBS                |
    +------------------------+
    12 rows in set (0.00 sec)

    (3)下面生成war包,供tomcat访问:

    $ bin/oozie-setup.sh prepare-war

    命令执行成功后,会提示war包已经生成在webapps目录下:New Oozie WAR file with added 'ExtJS library, JARs' at /opt/modules/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie.war
    (4)上传sharelib压缩包到HDFS上:
    在$oozie_home下,有2个sharelib压缩包,分别是oozie-sharelib-4.0.0-cdh5.3.6.tar.gz 和 oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz,很明显,我们必须拷贝第二个带yarn的压缩包(前边的是1.0版本的,不带yarn的)。

    $ bin/oozie-setup.sh sharelib create -fs hdfs://hadoop-senior01.pmpa.com:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz

    3.启动oozie和测试:

    启动oozie,使用oozied.sh脚本。

    $ bin/oozied.sh start

    启动后,访问网址http://hadoop-senior01.pmpa.com:11000/oozie/
    可以看到oozie的主页面:


    oozie的主页面.png

    3. Oozie测试和使用:

    1.执行官方example实例:

    Oozie官方提供了一个样例包,我们后边的开发都以这个example实例为模板进行。解压Oozie主目录下的example包:

    $ tar zxf oozie-examples.tar.gz 
    $ cd examples/apps

    apps目录下存放了我们需要配置的作业内容。


    apps目录内容.png


    在目录中可以看到,有关于map-reduce、sqoop、hive等很多类型的作业的配置的实例。下面,我以map-reduce作业为例来说明,oozie作业的配置方法。在map-reduce目录中有三个重要的内容:
    (1)job.properties:定义job相关的属性,比如输入输出目录、namenode节点等。定义了workflow.xml文件的位置。
    (2)workflow.xml:定义工作流相关的配置,start 、 end 、kill等
    (3)lib文件夹:存放job任务需要的jar包。
    注意:配置作业需要修改job.properties和workflow.xml两个文件。
    配置job.properties:

    nameNode=hdfs://hadoop-senior01.pmpa.com:8020
    jobTracker=hadoop-senior02.pmpa.com:8032
    queueName=default
    examplesRoot=examples
    user.name=natty
    
    oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce/workflow.xml
    outputDir=map-reduce

    jobTracker配置的是ResourceManager的端口。需要一定注意,我们的ResourceManager配置在senior02主机上,并且端口是8032(不是8088,8088端口是web界面查看的端口)
    配置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}/user/natty/${examplesRoot}/output-data/${outputDir}"/>
                </prepare>
                <configuration>
                    <property>
                        <name>mapred.job.queue.name</name>
                        <value>${queueName}</value>
                    </property>
                    <property>
                        <name>mapred.mapper.class</name>
                        <value>org.apache.oozie.example.SampleMapper</value>
                    </property>
                    <property>
                        <name>mapred.reducer.class</name>
                        <value>org.apache.oozie.example.SampleReducer</value>
                    </property>
                    <property>
                        <name>mapred.map.tasks</name>
                        <value>1</value>
                    </property>
                    <property>
                        <name>mapred.input.dir</name>
                        <value>/user/natty/${examplesRoot}/input-data/text</value>
                    </property>
                    <property>
                        <name>mapred.output.dir</name>
                        <value>/user/natty/${examplesRoot}/output-data/${outputDir}</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>

    上传examples目录到 HDFS的/user/natty/路径。

    $ /opt/modules/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put examples/ /user/natty/

    运行example应用:

    $ bin/oozie job -oozie http://hadoop-senior01.pmpa.com:11000/oozie -config examples/apps/map-reduce/job.properties -run

    杀掉job:

    $ bin/oozie job -oozie http://hadoop-senior01.pmpa.com:11000/oozie -kill 0000000-170423000216782-oozie-natt-W

    请注意,在执行应用前,要保证oozie是启动状态的。

    参考:

     
    关于oozie的FAQ参考网址:https://github.com/yahoo/oozie/wiki/FAQ
     
     
  • 相关阅读:
    Thinkphp 获取当前url
    Navicat Premium 11 For Mac 注册机
    android 客户端支付宝 php服务器端编写
    tp框架集成支付宝,中转页变成gbk编码
    sql,插入最大值加1
    获取php的配置
    百度授权回调问题
    模拟新浪微博textarea,刷新页面输入信息保留
    同一客户端使用多份SSH Key
    SSH 自动化安装部署遇到的问题
  • 原文地址:https://www.cnblogs.com/ilinuxer/p/6804339.html
Copyright © 2020-2023  润新知