oozie 是hadoop 一个 工作流调度组件,能把多个MR作业组合为一个逻辑工作单元(一个工作流),从而自动完成任务调用。

  1. 从官方处 下载

  2. 解压之后进入目录, 执行 bin/mkdistro.sh -Dhadoop.auth.version=2.8.5 -Dhadoop.version=2.8.5 -Dsqoop.version=1.4.6 -DskipTests 进行编译, 这里我们不是用的 cdh 版本,所以直接编译就好

  3. 编译完成的文件会在 distro/target 目录下,解压编译好的压缩包安装

  4. 设置环境变量

    export OOZIE_HOME=/opt/oozie-5.0.0
    export OOZIE_LOG=/opt/logs/oozie
    export PATH=$OOZIE_HOME/bin:$PATH
    
  5. 修改配置文件

    # file: conf/oozie-site.xml
    set oozie.service.JPAService.create.db.schema=false # 启动不自动创建表头
    set oozie.service.ProxyUserService.proxyuser.hadoop.hosts=*
    set oozie.service.ProxyUserService.proxyuser.hadoop.groups=*
    # 设置数据库
    set oozie.service.JPAService.jdbc.driver=com.mysql.jdbc.Driver
    set oozie.service.JPAService.jdbc.url=jdbc:mysql://master:3306/oozie?createDatabaseIfNotExist=true&useSSL=false
    set oozie.service.JPAService.jdbc.username=oozie
    set oozie.service.JPAService.jdbc.password=oozie
    # hadoop 设置
    set oozie.service.HadoopAccessorService.hadoop.configurations=*=/opt/hadoop/etc/hadoop
    set oozie.service.HadoopAccessorService.action.configurations=*=/opt/hadoop/etc/hadoop
    # spark 设置
    set oozie.service.SparkConfigurationService.spark.configurations=*=/opt/spark/conf
    # lib 设置
    set oozie.service.WorkflowAppService.system.libpath=/user/hadoop/share/lib
    set oozie.use.system.libpath=true
    set oozie.processing.timezone=GMT+0800 # 设置时区
    # hostname
    set oozie.http.hostname=master # 重要
    set oozie.service.SchemaCheckerService.ignore.extras=false # 在启动的时候不校验表结构
    修改oozie-env.sh
    # 添加上该配置,在执行命令的时候就不用手动添加 oozie
    OOZIE_URL=http://master:11000/oozie
    
  6. 创建目录 OOZIE_HOME/libext, 在官方文档 处下载好 ExtJS library. 这个是 web console 需要的组件,直接放到目录中, 执行以下命令

    mkdir $OOZIE_HOME/libext
    cp ext-2.2.zip $OOZIE_HOME/libext
    
    # 执行以下命令会在当前目录创建lib包。并上传到hdfs, 会自动放在 hdfs:/user/<当前用户>/share/lib下,这个是 oozie 运行程序所需的包
    cp oracle/instantclient_12_2/ojdbc8.jar $OOZIE_HOME/libext # 复制 oracle 包
    cp mysql-connector-java-5.1.47-bin.jar $OOZIE_HOME/libext # 复制mysql jdbc
    # 拷贝hadoop 相关jar 包还有一些运行所需的附属包, 这里是 oozie 本身运行所需的 lib 目录
    find $HADOOP_HOME/share/hadoop -name "hadoop-*.jar" | xargs -n1 -I{} cp -f {} $OOZIE_HOME/libext
    ls $HADOOP_HOME/share/hadoop/common/lib/* | grep -v slf4j | xargs -n1 -I{} cp -f {} $OOZIE_HOME/libext
    # 这一步会做一些运行前准备工作,将jar包从压缩文件中拷贝出来,并创建 lib 目录
    oozie-setup.sh sharelib create -fs hdfs://HACluster -locallib ./oozie-sharelib-5.0.0.tar.gz
    
  7. 创建数据库 oozie 和用户 oozie 并分配权限, 执行以下命令

    bin/ooziedb.sh create -sqlfile oozie.sql -run # 创建 ooize 使用的数据表
    
  8. 执行 oozied.sh run 或者 oozied.sh start 启动

  9. 执行 oozie admin -oozie <http://master:11000/oozie> -status 检查服务状态 访问 web页面 , 并在页面上 setting 处修改 时区为 CST (Asia/Shanghai), 这样查看 jobinfo 就能看到正确的对应时间了

测试运行

测试oozie, 解压根目录中的 example.tar.gz ,修改 examples/apps/map-reduce/job.properties 中的nameNode 和 resourceManager 为自己集群的对应配置

将对应的 examples 文件夹上传到hdfs 下的 /user/当前用户目录下

执行命令测试 oozie job -oozie <http://master:11000/oozie> -config examples/apps/map-reduce/job.properties -run

这里-config 可以指定本地使用的 job.properties 配置 (只能是本地使用),在 job.properties 里有一项配置 oozie.wf.application.path 指定了程序在hdfs 上的路径, oozie 会根据该配置指定执行何种任务,寻找相应的配置。