Hadoop工作流:Oozie与Azkaban

    xiaoxiao2021-03-25  138

    Hadoop 工作流

    (一)什么是工作流

    工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。

    工作流之JBpM

    工作流之Activiti

    (二)Hadoop内置工作流

    (1)Hadoop工作流--ChainMapper/ChainReducer

    ChainMapper/ChainReducer主要为了解决线性链式Mapper而提出的。也就是说,在Map或者Reduce阶段存在多个Mapper,这些Mapper像Linux管道一样,前一个Mapper的输出结果直接重定向到下一个Mapper的输入,形成一个流水线,形式类似于[MAp+ REDUCE MAp*]。上展示了一个典型的ChainMapper/ChainReducer的应用场景:在Map阶段,数据依次经过Mapper1和Mapper2处理;在Reduce阶段,数据经过shuffle和sort后;交由对应的Reducer处理,但Reducer处理之后并没有直接写到HDFS上,而是交给另外一个Mapper处理,它产生的结果写到最终的HDFS输出目录中

    (2)Hadoop工作流--JobControl

    ControlledJob job1 = new ControlledJob(new Configuration()); job1.setJobName("job1"); ControlledJob job2 = new ControlledJob(new Configuration()); job2.setJobName("job2"); ControlledJob job3 = new ControlledJob(new Configuration()); job3.setJobName("job3"); job1.addDependingJob(job2); job2.addDependingJob(job3); job3.addDependingJob(job1); JobControl jobControl = new JobControl("test"); jobControl.addJob(job1); jobControl.addJob(job2); jobControl.addJob(job3); jobControl.run();

    (三)Hadoop内置工作流的不足

    (1)支持job单一

    (2)硬编码

    (3)无可视化

    (4)无调度机制

    (5)无容错机制

    (四)第三方框架

    (1)Azkaban

    1)Azkaban是什么

    Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

    2)Azkaban的功能特点

    ①Web用户界面

    ②方便上传工作流

    ③方便设置任务之间的关系

    ④工作流调度

    ⑤认证/授权

    ⑥能够杀死并重新启动工作流

    ⑦模块化和可插拔的插件机制

    ⑧项目工作区

    ⑨工作流和任务的日志记录和审计

    3)Azkaban的架构

    MySQL实例 – Azkaban使用MySQL来存储项目和执行

    Azkaban Web服务器 – Azkaban使用Jetty作为Web服务器,用作控制器以及提供Web界面

    Azkaban执行服务器 – Azkaban执行服务器执行提交工作流

    4)Azkaban三种运行模式

    ①solo server mode

    H2

    web server和executor server运行在一个进程里

    ②two server mode

    MySQL(主从结构)

    web server和executor server运行在不同的进程

    ③multiple executor mode

    MySQL(主从结构)

    web server和executor server运行在不同的进程 

    executor server有多个

    (五)Azkaban 安装部署

    以下文档为QQ昵称为飞鹰同学整理的完整文档,供大家参考学习。也希望大家学习过程中,有好的文档和学习资料无私共享出来,共同学习和进步!

    系统时区配置

    1.查看时区

    [xxx@single azkaban-web-2.5.0]$ more /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=true ARC=false

    2.修改时区

    时区文件都在/usr/share/zoneinfo,复制相应时区覆盖/etc/localtime即可

    [lijia@single azkaban-web-2.5.0]$ ll /usr/share/zoneinfo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    *修改web server 和excutor server 都需要配置时区,必须和系统时区一致

    default.timezone.id=Asia/Shanghai

    安装mysql

    暂略,具体请参考<< CDH5.4.7离线安装手册.doc>>中mysql安装模块

    配置mysql

    下载mysql数据脚本

    wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-sql-script-2.5.0.tar.gz tar -zxvf azkaban-sql-script-2.5.0.tar.gz –C ~/azkaban/

    创建用户、分配权限并执行脚本

    mysql –uroot –pxxxx 创建数据库: CREATE DATABASE azkaban; 创建用户名:CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban' 分配权限:GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,INDEX ON `azkaban`.* TO 'azkaban'@'%' WITH GRANT OPTION; flush privileges; quit; 通过azkaban账号登录mysql:mysql –uazkaban –pazkaban Use azkaban; source ~/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql

    Azkaban Web Server 安装

    1.下载安装包

    wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-web-server-2.5.0.tar.gz tar –zxvf azkaban-web-server-2.5.0.tar.gz –C ~/azkaban/

    2.上传依赖包

    上传mysql驱动包至 ~/azkaban/azkaban-web-2.5.0/extlib/

    3.生成jetty ssl所需密钥文件

    keytool -keystore keystore -alias jetty -genkey -keyalg RSA Enter keystore password: mysteel What is your first and last name? [Unknown]: mysteel What is the name of your organizational unit? [Unknown]: mysteel What is the name of your organization? [Unknown]: mysteel What is the name of your City or Locality? [Unknown]:SH What is the name of your State or Province? [Unknown]:SH What is the two-letter country code for this unit? [Unknown]:CN Is CN=mysteel, OU= mysteel, O= mysteel, L=SH, ST=SH, C=CN correct? [no]: yes Enter key password for < mysteel > (RETURN if same as keystore password): mysteel

    注意:这里keystore的密码为mysteel,key的密码为mysteel可自行修改 最后将生成的keystore文件放到 Azkaban安装目录中~/azkaban/azkaban-web-2.5.0/ (也可通过修改配置文件改变其默认存放地址)

    4.修改配置文件 (conf/azkaban.propreties)

    修改首页样式及时区信息

    azkaban.name=Job Tasks azkaban.label=mysteel workflow azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=web/ default.timezone.id=Asia/Shanghai

    修改mysql连接,可自行修改

    database.type=mysql mysql.port=3306 mysql.host=192.168.200.184 mysql.database=azkaban mysql.user=azkaban mysql.password=azkaban mysql.numconnections=100

    修改 Jetty 服务器属性,包括 keystore 的相关配置

    jetty.maxThreads=25 jetty.ssl.port=8443 jetty.port=8081 jetty.keystore=keystore jetty.password=mysteel jetty.keypassword= mysteel jetty.truststore=keystore jetty.trustpassword= mysteel

    修改邮件设置(可选)

    mail.sender=xxxxxxx@mysteel.com mail.host=smtp.126.com mail.user= xxxxxxx@mysteel.com mail.password=xxx (注:发送邮箱的密码)

    5.用户及权限配置

    进入 azkaban web 服务器 conf 目录,修改 azkaban-users.xml ,增加管理员用户:

    < azkaban-users> < user username="azkaban" password="azkaban" roles="admin" groups="azkaban" /> < user username="metrics" password="metrics" roles="metrics"/> < user username="admin" password="admin" roles="admin,metrics" /> < role name="admin" permissions="ADMIN" /> < role name="metrics" permissions="METRICS"/> < /azkaban-users>

    Azkaban Executor Server安装

    1.下载安装包

    wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-executor-server-2.5.0.tar.gz tar –zxvf azkaban-executor-server-2.5.0.tar.gz –C ~/azkaban/

    2.修改配置文件 (conf/azkaban.propreties)

    修改时区信息

    default.timezone.id=Asia/Shanghai

    修改mysql连接,可自行修改

    database.type=mysql mysql.port=3306 mysql.host=192.168.200.184 mysql.database=azkaban mysql.user=azkaban mysql.password=azkaban mysql.numconnections=100

    配置端口,默认就好

    executor.maxThreads=50 executor.port=12321 executor.flow.threads=30

    在web server 的azkaban.properties配置executor的连接,特别注意,如果两个server不是在一台主机上,web server 需要配置executor.host

    # Azkaban Executor settings executor.port=12321 executor.host=ip/hostname

    启动验证

    启动web server

    ~/azkaban/azkaban-web-2.5.0/bin/azkaban-web-start.sh(azkaban-web-shutdown.sh停止) 访问 https://ip:8443 出现界面安装成功

    启动 executor server

    ~/azkaban/azkaban-executor-2.5.0/bin/azkaban-exec-start.sh(azkaban-executor-shutdown.sh 停止

    Azkaban web server插件安装

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

    安装HDFS Viewer插件

    1.解压插件

    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需要以下依赖:

    commons-cli-1.2.jar,hadoop-auth-2.5.1.jar,hadoop-common-2.5.1.jar hadoop-hdfs-2.5.1.jar,protobuf-java-2.5.0.jar

    注:这么做的缺点是以后hadoop如果升级,要将这些jar更新

    4.查看效果

    注意:如果hadoop集群已经有了用户及权限验证,需要配置代理用户等信息,具体请参考官方文档(http://azkaban.github.io/azkaban/docs/latest/#hadoopsecuritymanager)

    安装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链接

    Azkaban Executor Server 插件安装

    进入${AZKABAN_EXECUTOR_SERVER}/plugins目录,在该目录下解压azkaban-jobtype-2.5.0.tar.gz得到目录:azkaban-jobtype-2.5.0。将该目录更名为jobtypes。这个目录用来存放之后安装的所有插件,与Web Server中的viewer目录类似。每次插件的安装配置需要重启Executor Server。

    1.修改配置文件

    修改common.properties

    修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/common.properties,设置hadoop.home和hive.home,与你的环境变量HADOOP_HOME和HIVE_HOME分布保持一致。例如:

    hadoop.home=/usr/local/hadoop hive.home=/opt/hive

    修改commonprivate.properties

    修改${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/*

    2.安装Hive插件

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

    配置

    在配置之前需要注意的是,azkaban默认hive aux lib的目录是$HIVE_HOME/aux/lib,所以请在$HIVE_HOME目录下创建相应的目录,或者修改下面提到的两个配置文件中的hive.aux.jars.path和hive.aux.jar.path为你期望的路径,此外我在这两个属性值都加上file://,来指定使用本地文件。

    修改private.properties

    修改${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是你要的即可。

    修改plugin.properties

    修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/plugin.properties,如下:

    hive.aux.jars.path=file://${hive.home}/aux/lib

    源码的修改与编译

    这个版本的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

    配置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不一样,请注意修改

    配置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.classpath - 与hive插件的配置不一样,需要将插件本身的lib目录加入到classpath,以使用azkaban-reportal-2.5.jar,否则会报错。 jobtype.global.classpath - 已在${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中定义,可以注释掉。 hive.classpath.items - 未用,也可以注释掉。

    4.效果

    Ajax API适用

    http://azkaban.github.io/azkaban/docs/latest/#ajax-api

    Web 界面操作

    http://azkaban.github.io/azkaban/docs/latest/#using-azkaban

    2 / 4

    测一测

    1、Hadoop内置工作流的不足() A、支持job单一 B、无可视化 C、无调度机制 D、无容错机制

    答对了!出题老师哭晕在厕所!

    答错喽

    正确答案:A,B,C,D

    解析:

    详情请参考课件内容

    2、Azkaban三种运行模式() A、solo server mode,最简单的模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。 B、two server mode:数据库为mysql,管理服务器和执行服务器在不同进程,这种模式下,管理服务器和执行服务器互不影响 C、multiple executor mode:该模式下,执行服务器和管理服务器在不同主机上,且执行服务器可以有多个。

    答对了!出题老师哭晕在厕所!

    答错喽

    正确答案:A,B,C

    解析:

    详情请参考课件内容

    转载请注明原文地址: https://ju.6miu.com/read-3825.html

    最新回复(0)