hadoop oozie

Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起,这样才能够达到目的。在Hadoop生态圈中,有一种相对比较新的组件叫做Oozie,它让我们可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。

   Oozie是一种Java Web应用程序,它运行在Java servlet容器——即Tomcat——中,并使用数据库来存储以下内容:


   a. 工作流定义

   b. 当前运行的工作流实例,包括实例的状态和变量


   Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,HadoopMap/Reduce作业、Pig作业等),其中指定了动作执行的顺序。我们会使用hPDL(一种XML流程定义语言)来描述这个图。


以上只是oozie的一个简单的介绍,具体的可以参看oozie的官方网站。本文将阐述oozie的具体安装过程。PS: 本安装的oozie的版本为cloudera CDH4 hadoop版本也是CDH4


   1、下载

   wget http://archive.cloudera.com/cdh4/cdh/4/oozie-3.3.2-cdh4.3.0.tar.gz


下载ext-2.2.zip


   2tar zxvf oozie-3.3.2-cdh4.3.0.tar.gz 解压到你的目录下

设置环境变量:vi ~/.bashrc  

添加   export OOZIE_HOME=

             export PATH= $OOZIE_HOME/bin

             exportOOZIE_URL=http://IP:11000/oozie

执行source ~/.bashrc


   3、进入conf/action-conf,修改hive.xml(如果需要支持hive的话),修改如下:


 <property>

    <name>hadoop.bin.path</name>

    <value>hadoop安装目录/bin/hadoop</value>

 </property>


 <property>

    <name>hadoop.config.dir</name>

    <value>hadoop安装目录/etc/hadoop</value>

 </property>


修改conf/oozie-env.sh,配置你自己的参数值


修改conf/oozie-site.xml

如果使用的是mysql的话,则修改以下配置

   <property>

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

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

      <description>

          JDBC driver class.

      </description>

  </property>


  <property>

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

      <value>jdbc:mysql://你的IP:3306/${oozie.db.schema.name}?     useUnicode=true&amp;characterEncoding=utf8</value>

      <description>

          JDBC URL.

      </description>

  </property>


      <property>

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

      <value>用户</value>

      <description>

          DB user name.

      </description>

  </property>


  <property>

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

      <value>密码</value>

      <description>

          DB user password.


          IMPORTANT: if password is emtpy leave a 1 space string, the servicetrims the value,

                      if empty Configuration assumes it isNULL.

      </description>

  </property>


   4、解压oozie-hadooplibs-3.3.2-cdh4.3.0.tar.gz,在oozie的主目录下生成oozie-3.3.2-cdh4.3.0目录,在oozie主目录下创建libext目录,把刚才解压的目录下的文件,我的是oozie/oozie-3.3.2-cdh4.3.0/hadooplibs/hadooplib-2.0.0-cdh4.3.0.oozie-3.3.2-cdh4.3.0下的jar包拷贝到libext目录下;再把ext-2.2.zipmysql的驱动包拷贝到libext目录下。


   5、执行bin/oozie-setup.shprepare-war -hadoop 2.x hadoop安装目录 -extjs ext-2.2.zip路径这样在oozie-server/webapps目录下将会生成一个oozie.war文件,刚才的ext-2.2也包含在里面了,用于oozie控制台。


   6、解压oozie-sharelib-3.3.2-cdh4.3.0.tar.gz,在oozie主目录下生成share文件夹,拷贝mysql驱动包到该目录下的lib/hive中(hive会用到),然后把lib下的文件拷到到HDFS的目录/user/${user.name}/share/lib下。


   7、在mysql上创建oozie库,执行bin/ooziedb.shcreate -sqlfile oozie.sql -run DB Connection 这样将会在oozie库中创建oozie运行需要的表。


   8、执行bin/oozie-start.sh启动oozieweb控制台访问地址为http://IP:11000/oozie

通过bin/oozie admin -oozie http://localhost:11000/oozie -status这个命令可以查看oozie的状态



Oozie 实例


A 修改 hadoop 配置文件增加

修改core-site.xml

<!-- OOZIE -->

                 <property>

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

                 <value>slave2</value>

             </property>

            <property>

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

          </property>

B 启动

bin/oozie-start.sh &


C 运行实例

$OOZIE_HOME/bin/oozie job -ooziehttp://localhost:11000/oozie-config examples/apps/map-reduce/job.properties–run

运行之前注意:

job中的配置属性这两个属性:

nameNode=hdfs://master:9000

jobTracker=master:9001

D 修改成mysql

1.      修改属性

oozie-site.xml中加入

 <property>
      <name>oozie.service.JPAService.jdbc.driver</name>
      <value>com.mysql.jdbc.Driver</value>
       <description>
           JDBCdriverclass.
       </description>
   </property>

   <property>
      <name>oozie.service.JPAService.jdbc.url</name>
       <value>jdbc:mysql://
你的IP:3306/${oozie.db.schema.name}?     useUnicode=true&amp;characterEncoding=utf8</value>
    </property>

   <property>
      <name>oozie.service.JPAService.jdbc.username</name>
       <value>用户</value>

  </property>

  <property>
       <name>oozie.service.JPAService.jdbc.password</name>
       <value>
密码</value>
  </property>


2.如何数据库没有整理好,如下是mysql数据库数据库文件创建和赋值权限

在本机的mysql中创建oozie对应的数据库和用户名,密码

$ mysql -u root -p

Enter password: ******

mysql> create database oozie;

Query OK, 1 row affected (0.03 sec)

mysql>  grant all privileges on oozie.* to  'oozie'@'localhost' identified by 'oozie';

Query OK, 0 rows affected (0.03 sec)

mysql>  grant all privileges on oozie.* to  'oozie'@'%' identified by 'oozie';

Query OK, 0 rows affected (0.03 sec)

mysql> exit

Bye


启动后,

如果报错,查看logs/下,如果缺少jar包,可以把相关jar包拷贝到oozie-server/lib/

接下来去看页面就ok

http://slave2:11000/oozie/