龙空技术网

Azkaban 任务调度系统(安装搭建)

大数据与人工智能分享 405

前言:

现时朋友们对“dl388g9安装centos66”大约比较注意,姐妹们都需要分析一些“dl388g9安装centos66”的相关文章。那么小编同时在网摘上搜集了一些关于“dl388g9安装centos66””的相关知识,希望兄弟们能喜欢,姐妹们快快来了解一下吧!

一 ,基础介绍为什么需要任务调度?

一个完整的数据分析系统(业务系统)通常都是由大量任务单元组成:

shell脚本程序java,python程序mapreduce程序hive脚本等...等等

各任务单元之间存在时间先后及前后依赖关系 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;

1、 通过Hadoop先将原始数据同步到HDFS上;2、 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;3、 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;4、 将明细数据进行复杂的统计分析,得到结果报表信息;5、 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。

每一个任务都依赖于上一个任务的结构,在这样的一个复杂度下显然Crontab已经满足不了需求,应为复杂度的提升还会出现失败处理分支和重试机制等

Azkaban的三种模式

Azkaban是一套简单的任务调度服务,整体包括三部分webserver、dbserver、executorserver

solo-server模式:exec进程和web进程为同一个进程,存放元数据的数据库为H2two-server模式:与之前的单机版本类似,exec进程和web进程分开,存放元数据的数据库为mysqlmultiple-executor模式:exec进程和web进程在不同的机器上,存放元数据的数据库为mysql二, 安装

使用系统组件版本如下:

centos-7.4mysql-5.7azkaban-3.50.0

首先修改主机名Azkaban(方便配置时直接配置主机名即可)

> hostnamectl --static set-hostname azkaban

安装Mysql 推荐使用oneinstack的方式安装,它会把基础的依赖安装好,比如ntp时间同步,git和gcc-c++

> mkdir -p /app/install> cd /app/install> wget  && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --db_option 2 --dbinstallmethod 1 --dbrootpwd Sunmi388# 当然还需要安装一下java环境,可以通过yum安装或者手动安装都行> yum install java

下载Azkaban-3.50.0以及修改邮件代码

> wget ; tar -zxvf 3.50.0.tar.gz> cd azkaban-3.50.0# azkaban关于通知邮件存在一个问题需要修改一段代码> vim azkaban-common/src/main/java/azkaban/utils/EmailMessage.java# 找到邮件参数配置的地方:/props# 增加如下语句props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");#Gradle是一个基于Apache Ant和Apache Maven的项目自动化构建工具。-x test 跳过测试

使用gradle开始编译,并且把编译出来的tar包从文件的深层次拷贝出来

> ./gradlew build installDist -x test > ll azkaban-*/build/distributions/*.tar.gz> cp azkaban-*/build/distributions/*.tar.gz ./

编译完成之后我们就可以获取到solo,web,exec,db的编译出来的可执行文件

三, Azkaban-Solo 方式运行

solo方式其实就是单机模式,运行起来非常简单,可以简单地体验Azkaban的使用,数据库使用的是内置的H2数据库

> tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz> mv azkaban-solo-server-0.1.0-SNAPSHOT /usr/local/azkaban-solo-server

修改配置文件

> vim /usr/local/azkaban-solo-server/conf/azkaban.propertiesdefault.timezone.id=Asia/Shanghai

启动

# 一定要在azkaban更目录运行,它的配置文件默认是相对路径> cd /usr/local/azkaban-solo-server/> bin/start-solo.sh

访问8081就可以看到具体的页面了,用户名密码默认就是Azkaban,可以通过编辑配置文件中的azka`ban-user.xml更改

如果需要关闭可以执行如下指令

> /usr/local/azkaban-solo-server/bin/shutdown-solo.sh
四, 简单的job任务

生成job任务zip包

> vim  command.job#command.jobtype=commandcommand=echo 'hello' > zip -r command.zip command.job

通过右上角的uplad上传

五 two-server 方式运行

tow和solo最大的不同在于solo是在一个进程下启动的,tow模式分别启动了web-service和exec-server,虽然都是在同一台机器启动,tow需要使用mysql作为数据库解压

> cd /app/install/azkaban-3.50.0/> tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz > tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz > tar -xzvf azkaban-db-0.1.0-SNAPSHOT.tar.gz

初始化Mysql用户表.权限.数据

> mysql -u root -pmysql > CREATE DATABASE azkaban_two_server;mysql > CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';mysql > GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban_two_server.* to 'azkaban'@'%' WITH GRANT OPTION;mysql > use azkaban_two_server;mysql > source /app/install/azkaban-3.50.0/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;

配置web-server

> mv azkaban-web-server-0.1.0-SNAPSHOT /usr/local/azkaban-web-server# 因为web-server 和 exec-server都没有默认配置文件我们需要复制solo的配置文件> cp -r /usr/local/azkaban-solo-server/conf/ /usr/local/azkaban-web-server> cp /app/install/azkaban-3.50.0/azkaban-web-server/src/test/resources/log4j.properties /usr/local/azkaban-web-server/conf> vim /usr/local/azkaban-web-server/conf/azkaban.properties #需要修改的地方default.timezone.id=Asia/Shanghai#database.type=h2#h2.path=./h2#h2.create.tables=truedatabase.type=mysqlmysql.port=3306mysql.host=azkabanmysql.database=azkaban_two_servermysql.user=azkabanmysql.password=azkabanmysql.numconnections=100

添加azkaban.native.lib=false 和 execute.as.user=false属性

> mkdir -p plugins/jobtypes> vim commonprivate.properties azkaban.native.lib=falseexecute.as.user=false

启动web-serrver并验证

# 先关闭之前启动的solo实例> /usr/local/azkaban-solo-server/bin/shutdown-solo.sh> cd /usr/local/azkaban-web-server> bin/start-web.sh

可以正常登陆即可

因为我们只运行了web没有运行exec节点如果执行任务会出现如下报错

启动exec

> mv /app/install/azkaban-3.50.0/azkaban-exec-server-0.1.0-SNAPSHOT /usr/local/azkaban-exec-server> cd /usr/local/azkaban-exec-server> cp -r ../azkaban-web-server/conf/ ./> cp -r ../azkaban-web-server/plugins/ ./# 运行exec> bin/start-exec.sh

然后在尝试执行任务已经能够正常执行了

六 , multiple-executor 方式运行

我们先关闭本机上的exec

> /usr/local/azkaban-exec-server/bin/shutdown-exec.sh 

笔者这边准备了之前搭建好的CDH集群下的master-1 和 master-2 节点作为exec运行节点

首先互相配置好hosts在master-1 和 master-2 中配置 Azkaban的IP

> vim /etc/hosts192.168.1.158 azkaban

在Azkaban服务器上配置master-1和master-2的IP

> vim /etc/hosts192.168.3.21 master-1192.168.3.22 master-2

拷贝exec到master-1和master-2节点

> scp -r /usr/local/azkaban-exec-server root@master-1:/usr/local/azkaban-exec-server> scp -r /usr/local/azkaban-exec-server root@master-2:/usr/local/azkaban-exec-server

关闭web-server修改配置文件

> /usr/local/azkaban-web-server/bin/shutdown-web.sh> vim /usr/local/azkaban-web-server/conf/azkaban.properties#启用multiple-executor模式azkaban.use.multiple.executors=true

两种节点选择规则,我们因为不一定资源非常的空闲我们选择第二种对比选择的方式选择执行任务的节点

#在每次分发job时,先过滤出满足条件的executor,然后再做比较筛选#如最小剩余内存,MinimumFreeMemory,过滤器会检查executor空余内存是否会大于6G,如果不足6G,则web-server不会将任务交由该executor执行。可参考Azkaban Github源码#如CpuStatus,过滤器会检查executor的cpu占用率是否达到95%,若达到95%,web-server也不会将任务交给该executor执行。可参考Azkaban Github源码。#参数含义参考官网说明 由于是虚拟机,不需要过滤,只需要比较即可# 某个任务是否指定了executor idazkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1# 是否比较内存azkaban.executorselector.comparator.Memory=1# 是否最后一次被分发azkaban.executorselector.comparator.LastDispatched=1# 是否比较CPUazkaban.executorselector.comparator.CpuUsage=1

在azkabantwoserver库executors表中添加executor

> mysql -u root -pmysql > use azkaban_two_server;mysql > insert into executors(host,port,active) values("master-1",12321,1);mysql > insert into executors(host,port,active) values("master-2",12321,1);

然后可以启动程序了,顺序为web-server -> master-1 exec-server -> master-2 exec-server

> cd /usr/local/azkaban-web-server/> ./bin/start-web.sh
> cd /usr/local/azkaban-exec-server/> bin/start-exec.sh

我们在运行一下test的job发现已经是在其他节点执行了,多跑几次会发现它会在master-1和master-2上来回的切换

标签: #dl388g9安装centos66