Azkaban2.5.0与Hadoop2.5.1的集成


本文主要介绍Azkaban与Hadoop2.5.1、Hive0.13.1的集成安装部署。以前一直再用oozie和Hadoop1,这是第一次接触Azkaban和Hadoop2,对它们的理解不深,所以文章中有错误的地方还望不吝赐教。本文主要是抛砖引玉,让有需要的人不用再跳到同样的坑里

组件版本

  • Centos 6.5 64位
  • Java 1.7
  • Hadoop 2.5.1
  • Hive 0.13.1
  • MySQL 5.5

预装需求

  • Hadoop集群 - 保证可用,并配置了相关的环境变量,包括:JAVA_HOME、HADOOP_HOME、HADOOP_MAPRED_HOME、HADOOP_COMMON_HOME、HADOOP_HDFS_HOME、HADOOP_YARN_HOME、HADOOP_CONF_DIR。
    Hadoop集群总共3台服务器,ip分别为:namenode:192.168.20.221、datanode:192.168.20.222和192.168.20.224,Hadoop没有启用任何安全性。
    假设HADOOP_HOME=/usr/local/hadoop
  • Hive - 在192.168.20.222上已经部署,并配置HIVE_HOME环境变量,将$HIVE/bin和$HADOOP_HOME/bin加入到环境变量PATH中。
    假设HIVE_HOME=/opt/hive
  • MySQL Server可用

准备工作

下载安装包

http://azkaban.github.io/downloads.html下载如下安装包:

  • azkaban-web-server-2.5.0.tar.gz
  • azkaban-executor-server-2.5.0.tar.gz
  • azkaban-sql-script-2.5.0.tar.gz
  • azkaban-jobtype-2.5.0.tar.gz
  • azkaban-hdfs-viewer-2.5.0.tar.gz
  • azkaban-jobsummary-2.5.0.tar.gz
  • azkaban-reportal-2.5.0.tar.gz

下载azkaban plugins源码

安装过程中需要修改一些bug,重新编译azkaban plugins。

下载地址:https://github.com/azkaban/azkaban-plugins,并切换到release-2.5分支下。为了描述方便,假设解压的完整路径是${AZKABAN_PLUGINS_SOURCE}。

用于编译的机器需要jdk1.6+和ant,请提前准备好。为了节省时间具体的插件编译到具体的目录下执行,例如:${AZKABAN_PLUGINS_SOURCE}/plugins/reportal/

此外,最好在根目录下直接运行sudo ant命令编译一部分,例如产生dist/package.version或基本的依赖,这过程中可能出现错误,例如,缺少dustc可执行命令等,但是对本文中提到的编译没有直接的影响。

部署拓扑

本文将azkaban web server和azkaban executor server分开部署,azkaban web server部署在192.168.20.221;azkaban executor server部署在192.168.20.222。本文中的所有配置都是满足我目前需要的配置,如果需要其他配置请自行查阅在线文档或源码 - -

Azkaban Web Server的部署

数据库初始化

这部分与azkaban文档基本一致
  1. 创建数据库
    在数据库管理端执行:
    CREATE DATABASE `azkaban` /*!40100 DEFAULT CHARACTER SET utf8 */;
  2. 建表
    解压azkaban-sql-script-2.5.0.tar.gz,在上步中创建的azkaban库上执行解压包内的create-all-sql-2.5.0.sql

解压部署

解压azkaban-web-server-2.5.0.tar.gz,为了方便描述,以下使用${AZKABAN_WEB_SERVER}作为安装目录路径为,这个版本的azkaban在lib中自带了mysql-connector-java-5.1.28.jar,如果版本不一致请自行替换

生成keystore

在${AZKABAN_WEB_SERVER}/conf下运行如下命令:
keytool -keystore keystore -alias azkaban -genkey -keyalg RSA
输入/输入如下:所有密码假设输入为password
 Enter keystore password:  
     Re-enter new password: 
     What is your first and last name?
       [Unknown]:  azkaban.test.com
     What is the name of your organizational unit?
       [Unknown]:  azkaban
     What is the name of your organization?
       [Unknown]:  test
     What is the name of your City or Locality?
       [Unknown]:  beijing
     What is the name of your State or Province?
       [Unknown]:  beijing
     What is the two-letter country code for this unit?
       [Unknown]:  CN
     Is CN=azkaban.test.com, OU=azkaban, O=test, L=beijing, ST=beijing, C=CN correct?
       [no]:  yes

     Enter key password for <azkaban>
             (RETURN if same as keystore password):  
命令成功后,会在当前文件夹下生成名为keystore的文件

配置

所有配置都是保证最小运行,如需其他功能自行查询,修改${AZKABAN_WEB_SERVER}/conf/azkaban.properties
  1. 配置时区
     default.timezone.id=Asia/Shanghai
  2. 配置数据库
    按照实际MySQL信息修改mysql.xxx属性
  3. 配置keystore
    jetty.keystore=conf/keystore
    jetty.password=password
    jetty.keypassword=password
    jetty.truststore=conf/keystore
    jetty.trustpassword=password
  4. 配置jetty host
    jetty.hostname=192.168.20.221
  5. 配置Azkaban Executor Server信息
    executor.host=192.168.20.222
    executor.port=12321
  6. 配置邮箱
    mail.sender=azkaban@xxxx.com
    mail.host=mail.xxxx.com
    mail.user=mailuser
    mail.password=password

启动/停止服务

  • 启动 - 启动之前先在${AZKABAN_WEB_SERVER}目录下创建logs目录,进入${AZKABAN_WEB_SERVER}目录,运行如下命令:
    bin/start-web.sh
    访问地址为:https://{localhost}:8443,默认的帐号为azkaban/azkaban
  • 停止 - 在${AZKABAN_WEB_SERVER}目录,运行如下命令停止服务:
    bin/azkaban-web-shutdown.sh

插件安装

为了以后插件的安装,需要在${AZKABAN_WEB_SERVER}/plugins/目录下创建viewer目录,用来安装各种viewer插件。当安装好一个插件后需要重启服务,让插件生效。

安装HDFS Viewer插件

  1. 解压插件
    在viewer目录中解压azkaban-hdfs-viewer-2.5.0.tar.gz,得到azkaban-hdfs-viewer-2.5.0目录,将其更名为hdfs。最终,这个插件的目录路径是:${AZKABAN_WEB_SERVER}/plugins/viewer/hdfs。
  2. 配置HDFS Viewer
    修改${AZKABAN_WEB_SERVER}/plugins/viewer/hdfs/conf/plugin.properties。根据应用场景修改proxy.user。需要注意的是配置viewer.external.classpaths并没有任何效果,不知是bug还是我用错了,以至于需要使用下面的步骤来配置
  3.  增加依赖jar
    这个版本的Azkaban无法找到Hadoop2中的相关依赖jar,而HDFS Viewer需要以下依赖:
    [root@mn extlib]# ll
    total 10448
    -rw-r--r-- 1 root root   41123 Oct 29 18:09 commons-cli-1.2.jar
    -rw-r--r-- 1 root root   52418 Oct 29 18:09 hadoop-auth-2.5.1.jar
    -rw-r--r-- 1 root root 2962475 Oct 29 18:09 hadoop-common-2.5.1.jar
    -rw-r--r-- 1 root root 7095356 Oct 29 18:09 hadoop-hdfs-2.5.1.jar
    -rw-r--r-- 1 root root  533455 Oct 29 18:09 protobuf-java-2.5.0.jar
    这么做的缺点是以后hadoop如果升级,别忘了将这些jar更新!
  4. 效果
    可以看到导航栏多了一个HDFS标签

安装Job Summary插件

  1. 解压插件
    在viewer目录中解压azkaban-jobsummary-2.5.0.tar.gz,得到azkaban-jobsummary-2.5.0目录,将其更名为job summary。最终,这个插件的目录路径是${AZKABAN_WEB_SERVER}/plugins/viewer/jobsummary
  2. 配置Job Summary
    默认情况下不用做任何改到,如果需要修改${AZKABAN_WEB_SERVER}/plugins/viewer/jobsummary/conf/plugin.properties。
  3. 效果


安装Reportal插件

Reportal插件的安装不仅是要在Azkaban Web Server上进行(Viewer插件),也需要在Azkaban Executor Server上进行(Jobtype插件)。本小节主要是说明如何在前者上的安装;后者上的安装参考Azkaban Executor Server的安装和部署。
  1. 解压插件
    由于azkaban-reportal-2.5.0.tar.gz中不仅包含Viewer插件,还包含Jobtype插件,所以先在一个临时目录中解压这个包,然后将解压得到的viewer/reportal/目录拷贝到上步中的viewer目录下。最终这个插件的目录路径为:
    ${AZKABAN_WEB_SERVER}/plugins/viewer/reportal。
  2. 配置Reportal Viewer
    修改${AZKABAN_WEB_SERVER}/plugins/viewer/reportal/conf/plugin.properties。由于Web Server和Executor Server是分开部署,不能使用本地文件存储report任务的结果,而是用hdfs存储:
    reportal.output.filesystem=hdfs
    
  3. 效果
    配置成功后,首页导航栏会出现Reportal链接,但是目前还无法正常运行report任务

Azkaban Executor Server的部署

解压部署

解压azkaban-executor-server-2.5.0.tar.gz到安装目录,为了方便描述,假设该路径为${AZKABAN_EXECUTOR_SERVER}。这个版本的azkaban在lib中自带了mysql-connector-java-5.1.28.jar,如果版本不一致请自行替换。

配置

修改${AZKABAN_EXECUTOR_SERVER}/conf/azkaban.properties
  • 设置时区
    default.timezone.id=Asia/Shanghai
  • 设置数据库,与Web Server中的数据库设置一致

启动/停止服务

  • 启动 - 与Web Server的启动/停止类似,首先在${AZKABAN_EXECUTOR_SERVER}目录下创建logs,然后进入${AZKABAN_EXECUTOR_SERVER}目录,运行如下命令启动:
    bin/start-exec.sh
  • 停止 - 在${AZKABAN_EXECUTOR_SERVER}目录下运行如下命令停止:
    bin/azkaban-executor-shutdown.sh

插件安装准备

进入${AZKABAN_EXECUTOR_SERVER}/plugins目录,在该目录下解压azkaban-jobtype-2.5.0.tar.gz得到目录:azkaban-jobtype-2.5.0。将该目录更名为jobtypes。这个目录用来存放之后安装的所有插件,与Web Server中的viewer目录类似。每次插件的安装配置需要重启Executor Server。
修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/common.properties,设置hadoop.home和hive.home,与你的环境变量HADOOP_HOME和HIVE_HOME分布保持一致。例如:
hadoop.home=/usr/local/hadoop
hive.home=/opt/hive
修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties,同样需要设置hadoop.home和hive.home。另外修改jobtype.global.classpath。例如:
hadoop.home=/usr/local/hadoop
hive.home=/opt/hive
jobtype.global.classpath=${hadoop.home}/etc/hadoop,${hadoop.home}/share/hadoop/common/*,${hadoop.home}/share/hadoop/common/lib/*,${hadoop.home}/share/hadoop/hdfs/*,${hadoop.home}/share/hadoop/hdfs/lib/*,${hadoop.home}/share/hadoop/yarn/*,${hadoop.home}/share/hadoop/yarn/lib/*,${hadoop.home}/share/hadoop/mapreduce/*,${hadoop.home}/share/hadoop/mapreduce/lib/*

安装Hive插件

在上步中hive插件已经被安装了,这里主要是如何配置hive插件。

  1. 配置
    在配置之前需要注意的是,azkaban默认hive aux lib的目录是$HIVE_HOME/aux/lib,所以请在$HIVE_HOME目录下创建相应的目录,或者修改下面提到的两个配置文件中的hive.aux.jars.path和hive.aux.jar.path为你期望的路径,此外我在这两个属性值都加上file://,来指定使用本地文件。
    1.1. 修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/private.properties,如下:
    jobtype.classpath=${hive.home}/conf,${hive.home}/lib/*
    hive.aux.jar.path=file://${hive.home}/aux/lib
    jobtype.classpath与${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中的jobtype.global.classpath一起组合成hive任务的classpath。所以这两个属性如何赋值,可以灵活设置,保证classpath是你要的即可。
    1.2. 修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/plugin.properties,如下:
    hive.aux.jars.path=file://${hive.home}/aux/lib
  2. 源码的修改与编译
    这个版本的Azkaban中的${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/azkaban-jobtype-2.5.0.jar有bug,在Hadoop2.5.1上(其他2.x未验证),运行hive任务会抛出如下异常:
    Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hive.shims.HadoopShims.usesJobShell()Z
         at azkaban.jobtype.HadoopSecureHiveWrapper.runHive(HadoopSecureHiveWrapper.java:148)
         at azkaban.jobtype.HadoopSecureHiveWrapper.main(HadoopSecureHiveWrapper.java:115)
    解决办法是修改${AZKABAN_PLUGINS_SOURCE}/plugins/jobtype/src/azkaban/jobtype/HadoopSecureHiveWrapper.java,找到如下代码片段:
    if (!ShimLoader.getHadoopShims().usesJobShell()) {
    ...
    ...
    }
    将其中的if条件去掉,也就是删除两行。然后进入${AZKABAN_PLUGINS_SOURCE}/plugins/hadoopsecuritymanager/目录,运行:
    sudo ant
    再进入${AZKABAN_PLUGINS_SOURCE}/plugins/jobtype,同样运行:
    sudo ant
    成功后会生成${AZKABAN_PLUGINS_SOURCE}/dist/jobtype/jars/azkaban-jobtype-2.5.0-rc3.jar,使用这个jar来替换${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/azkaban-jobtype-2.5.0.jar。

安装Reportalhive插件

  1. 解压部署
    解压azkaban-reportal-2.5.0.tar.gz,将jobtypes/reportalhive/拷贝到${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes目录。完整的目录路径是:${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive。
  2. 更新依赖jar
    在Reportalhive插件根目录下的azkaban-hadoopsecuritymanager-2.2.jar和azkaban-jobtype-2.1.jar两个jar和当前版本不一致。需要用hive插件中的对应jar(${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive)来替换掉这两个jar,否则在运行report任务时会如下报错:
    Exception in thread "main" java.lang.ClassNotFoundException: azkaban.jobtype.ReportalHiveRunner
         at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
         at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
         at azkaban.jobtype.HadoopJavaJobRunnerMain.getObject(HadoopJavaJobRunnerMain.java:299)
         at azkaban.jobtype.HadoopJavaJobRunnerMain.(HadoopJavaJobRunnerMain.java:146)
         at azkaban.jobtype.HadoopJavaJobRunnerMain.main(HadoopJavaJobRunnerMain.java:76)
    ${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive/lib/azkaban-reportal-2.5.jar也有bug,需要修改${AZKABAN_PLUGINS_SOURCE}/plugins/reportal/src/azkaban/jobtype/ReportalHiveRunner.java文件,找到如下代码片段:
    if (!ShimLoader.getHadoopShims().usesJobShell()) {
    ...
    ...
    }
    删除if条件,然后进入${AZKABAN_PLUGINS_SOURCE}/plugins/reportal,运行sudo ant生成${AZKABAN_PLUGINS_SOURCE}/dist/reportal/jars/azkaban-reportal-2.5.jar,用这个jar来替换掉${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive/lib/azkaban-reportal-2.5.jar,否则在运行report任务时会报如下错误:
    Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hive.shims.HadoopShims.usesJobShell()Z
         at azkaban.jobtype.HadoopSecureHiveWrapper.runHive(HadoopSecureHiveWrapper.java:148)
         at azkaban.jobtype.HadoopSecureHiveWrapper.main(HadoopSecureHiveWrapper.java:115)
    
  3. 配置Reportalhive
    3.1. 配置plugin.properties
    可以注释掉hive.home,因为我们在${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/common.properties和${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中已经配置过了,其他修改的属性:
    hive.aux.jars.path=file://${hive.home}/aux/lib
    hadoop.dir.conf=${hadoop.home}/etc/hadoop
    
    hive.aux.jars.path - 使用本地的hive aux lib,如果使用hdfs,将file改为hdfs即可 
    hadoop.dir.conf - hadoop2的配置目录与hadoop1不一样,请注意修改

    3.2. 配置private.properties
    同上,可以注释掉hive.home,其他修改的属性:
    jobtype.classpath=${hadoop.home}/conf,${hadoop.home}/lib/*,${hive.home}/lib/*,./lib/*
    hive.aux.jars.path=file://${hive.home}/aux/lib
    hadoop.dir.conf=${hadoop.home}/etc/hadoop
    #jobtype.global.classpath=
    #hive.classpath.items=
    jobtype.classpath - 与hive插件的配置不一样,需要将插件本身的lib目录加入到classpath,以使用azkaban-reportal-2.5.jar,否则会报错。
    jobtype.global.classpath - 已在${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中定义,可以注释掉。
    hive.classpath.items - 未用,也可以注释掉。
  4. 效果


最后,部署完毕,可以运行多种任务了

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值