您的位置:首页 > 运维架构

hadoop2.6.0 + Azkaban2.5.0 任务调度系统实践

2016-06-06 13:52 501 查看
Azkaban is a batch workflow job scheduler created at LinkedIn to run Hadoop jobs. Azkaban resolves the ordering through job dependencies and provides an easy to use web user interface to maintain and track your workflows.



Azkaban有三种运行模式:
solo server mode:最简单的模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。
two server mode:数据库为mysql,管理服务器和执行服务器在不同进程,这种模式下,管理服务器和执行服务器互不影响

multiple executor mode:该模式下,执行服务器和管理服务器在不同主机上,且执行服务器可以有多个。

本文使用two server mode

组件版本

Centos 6.5 64位
Java 1.8
Hadoop 2.6.0
Hive 1.1.0
MySQL 5.5
Azkaban2.5.0

准备工作

从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

一、安装mysql

暂略,具体查看源码编译安装mysql

二、配置mysql

1、下载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

    

2、登陆mysql执行脚本
    mysql -uroot -p123456

    #创建数据库

    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;

    exit

    #使用azkaban登陆

    mysql -uazkaban -pazkaban

    use azkaban;

    #执行初始化脚本

    source /home/lijia/Ning/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql

    下面安装Azkaban后需要检查下载包web和executor的lib文件下是否有mysql驱动,若不存在,需拷贝一个

三、配置Azkaban Web Server

1、wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-web-server-2.5.0.tar.gz
2、tar xf azkaban-web-server-2.5.0.tar.gz -C ~/azkaban

3、上传mysql驱动包到 ~/azkaban/azkaban-web-2.5.0/extlib

4、配置jetty ssl,在azkaban-web-2.5.0目录中换个执行,下面命令之后会生成keystore文件

    keytool -keystore keystore -alias jetty -genkey -keyalg RSA

    Enter keystore password:  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=jetty.mortbay.org, OU=Jetty, O=Mort Bay Consulting Pty. Ltd.,

    L=Unknown, ST=Unknown, C=Unknown correct?

      [no]:  yes

    Enter key password for <azkaban>

            (RETURN if same as keystore password):  password

    注意:这里keystore的密码为password,key的密码为password  可自行修改

5、修改conf/azkaban.properties

    *修改ssl配置

        jetty.maxThreads=25

        jetty.ssl.port=8443

        jetty.port=8081

        jetty.keystore=keystore

        jetty.password=password(你设置的密码)

        jetty.keypassword=password

        jetty.truststore=keystore

        jetty.trustpassword=password

    *修改mysql连接,可自行修改

        database.type=mysql

        mysql.port=3306

        mysql.host=single

        mysql.database=azkaban

        mysql.user=azkaban

        mysql.password=azkaban

        mysql.numconnections=100

6、启动web server

    bin/azkaban-web-start.sh或者后台运行 nohup ./bin/azkaban-web-start.sh &

    访问提示不安全,点击仍然继续,访问地址为:https://{localhost}:8443,默认的帐号为azkaban/azkaban

    停止 - 在${AZKABAN_WEB_SERVER}目录,运行如下命令停止服务:bin/azkaban-web-shutdown.sh

三、配置Azkaban Executor Server

    1、wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-executor-server-2.5.0.tar.gz
    2、tar xf azkaban-executor-server-2.5.0.tar.gz -C ~/azkaban

    3、pwd

        /home/lijia/azkaban/azkaban-executor-2.5.0

    4、配置mysql连接

        database.type=mysql

        mysql.port=3306

        mysql.host=single

        mysql.database=azkaban

        mysql.user=azkaban

        mysql.password=azkaban

        mysql.numconnections=100

    5、配置端口,默认就好

        executor.maxThreads=50

        executor.port=12321

        executor.flow.threads=30

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

        # Azkaban Executor settings

        executor.port=12321

        executor.host=single

    7、启动bin/azkaban-exec-start.sh,测试是否能在web界面上执行作业调度

四、时区配置

    *配置系统时区

        查看时区

        [xxx@azkaban-web-2.5.0]$ more /etc/sysconfig/clock

        ZONE="Asia/Shanghai"

        UTC=true

        ARC=false

        

        修改时区,时区文件都在/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

五、邮件设置web server 配置azkaban.properties

    # mail settings

    mail.sender=xxxxxxx@126.com

    mail.host=smtp.126.com

    mail.user=xxxxxxx

    mail.password=11111111

    #job.failure.email=

    #job.success.email=

    用户名和密码修改好即可

六、插件配置

    1、web server配置hdfs插件

    wget https://s3.amazonaws.com/azkaban2/azkaban-plugins/2.5.0/azkaban-hdfs-viewer-2.5.0.tar.gz
    cd azkaban-web-2.5.0/

    ll

    cd plugins/

    ll

    mkdir viewer

    cd viewer/

    ll

    tar xf ~/Ning/azkaban/azkaban-hdfs-viewer-2.5.0.tar.gz -C ./

    mv azkaban-hdfs-viewer-2.5.0 hdfs

    2、配置azkaban.properties

    viewer.plugins=hdfs

    3、官网只提供到上面的教程,其实还不够的,增加步骤,

    参考:http://blog.csdn.net/tianliangsxy/article/details/40589571

    4、删除azkaban-web-2.5.0/plugins/viewer/hdfs/extlib下的hadoop-core包

    5、添加2.x的jar包到azkaban-web-2.5.0/extlib,jar包如下:

        protobuf-java-2.5.0.jar

        hadoop-hdfs-2.5.0-cdh5.2.4.jar

        hadoop-common-2.5.0-cdh5.2.4.jar

        hadoop-auth-2.5.0-cdh5.2.4.jar

        commons-cli-1.2.jar

    6、需要将集群的core-site.xml放到hadoop-common-2.5.0-cdh5.2.4.jar的根目录,这样才能读取到hdfs的目录,否则读取的是系统的家目录

    7、重启生效

七、创建工程
首页有四个菜单

projects:最重要的部分,创建一个工程,所有flows将在工程中运行。

scheduling:显示定时任务

executing:显示当前运行的任务

history:显示历史运行任务

主要介绍projects部分

首先创建一个工程,填写名称和描述,比如newlog

Flows:工作流程,有多个job组成

Permissions:权限管理

Project Logs:工程日志

创建工程:

创建之前我们先了解下之间的关系,一个工程包含一个或多个flows,一个flow包含多个job。job是你想在azkaban中运行的一个进程,可以是简单的linux命令,可是java程序,也可以是复杂的shell脚本,当然,如果你安装相关插件,也可以运行插件。一个job可以依赖于另一个job,这种多个job和它们的依赖组成的图表叫做flow。

job创建

创建job很简单,只要创建一个以.job结尾的文本文件就行了,例如我们创建一个工作,用来将日志数据导入hive中(关于大数据方面的东

西,不在重复,可以理解为,将日志所需数据导入的mysql中),我们创建newjob.job

vi newjob.job

#newjob.job(必须有这行,不然打成zip包上传总报错)

type=command

command=echo "hello world"

一个简单的job就创建好了,解释下,type的command,告诉azkaban用unix原生命令去运行,比如原生命令或者shell脚本,当然也有其他类型,后面说。

vi newjob.job

#newjob.job(必须有这行,不然打成zip包上传总报错Installation Failed. Error found in upload. Cannot upload. Job doesn't

have type set 'newjob'. )

type=command

command=sh /var/lib/hadoop-hdfs/wordcount/word_job.sh

需要将所有文件都打包到zip中 python写的wordcount程序,打包为newjob.zip
newjob.job
mapper.py
reducer.py
wordcount_job.sh(这个文件可以不打包进去,azkaban服务器上存在就行,需要执行)

一个工程不可能只有一个job,我们现在创建多个依赖job,这也是采用azkaban的首要目的。

flows创建

我们说过多个jobs和它们的依赖组成flow。怎么创建依赖,只要指定dependencies参数就行了。比如导入hive前,需要进行数据清洗,数

据清洗前需要上传,上传之前需要从ftp获取日志。

定义5个job:

1、job_2_hive.job:将清洗完的数据入hive库

2、job_clean_data.job:调用mr清洗hdfs数据

3、job_up_2_hdfs.job:将文件上传至hdfs

4、job_get_file_ftp1.job:从ftp1获取日志

5、job_get_file_ftp2.job:从ftp2获取日志

依赖关系:

3依赖4和5,2依赖3,1依赖2,4和5没有依赖关系。

vi job_2_hive.job
#job_2_hive.job
type=command
# 执行sh脚本,建议这样做,后期只需维护脚本就行了,azkaban定义工作流程
command=sh /job/o2o_2_hive.sh
dependencies=o2o_clean_data

vi job_clean_data.job
#job_clean_data.job
type=command
# 执行sh脚本,建议这样做,后期只需维护脚本就行了,azkaban定义工作流程
command=sh /job/o2o_clean_data.sh
dependencies=o2o_up_2_hdfs

vi job_up_2_hdfs.job
#job_up_2_hdfs.job
type=command
#需要配置好hadoop命令,建议编写到shell中,可以后期维护
command=hadoop fs -put /data/*
#多个依赖用逗号隔开
dependencies=o2o_get_file_ftp1,o2o_get_file_ftp2

vi job_get_file_ftp1.job
#job_get_file_ftp1.job
type=command
command=wget "ftp://file1" -O /data/file1

vi job_get_file_ftp2.job
#job_get_file_ftp2.job
type=command
command=wget "ftp:file2" -O /data/file2


可以运行unix命令,也可以运行python脚本(强烈推荐)。将上述job打成zip包。

ps:为了测试流程,我将上述command都改为echo +相应命令

Flow view:流程视图。可以禁用,启用某些job

Notification:定义任务成功或者失败是否发送邮件

Failure Options:定义一个job失败,剩下的job怎么执行

Concurrent:并行任务执行设置

Flow Parametters:参数设置。

1.执行一次

设置好上述参数,点击execute

绿色代表成功,蓝色是运行,红色是失败。可以查看job运行时间,依赖和日志,点击details可以查看各个job运行情况。

2.定时执行

定时执行

这时候注意到cst了吧,之前需要将配置中时区改为Asia/shanghai。

可以选择"天/时/分/月/周"等执行频率。

azkaban还有很多强大的功能,如它开放了相关api,我们将它可以嵌入到自己的app等等。

参考:
http://blog.csdn.net/tianliangsxy/article/details/40589571 http://www.jianshu.com/p/484564beda1d http://www.jianshu.com/p/484564beda1d http://blog.itpub.net/29754888/viewspace-1418203/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: