大数据实操篇 No.7-Azkaban HA高可用集群部署

第1章 Azkaban简介

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

第2章 编译与安装

安装之前,可以先了解以下,Azkaban的组成:Azkaban Web Server、Azkaban Executor Server、MySQL。(这里就不细讲了)

2.1 集群规划

 

Webapp200

Hadoop100

Hadoop101

Hadoop102

Metastore

 

 

 

azkaban-exec-server

 

 

azkaban-web-server

 

 

 

笔者这里只做了exec-server的高可用,metastore部分仍然采用的是一个MySQL,后续再进行拓展,考虑将mysql部分部署成主从模式。

2.2 下载源码进行编译

Azkaban官方不提供直接的安装文件,需要自己去官网(https://azkaban.github.io/)下载源码自行编译。

可以参考笔者的另外一篇文章:Azkaban源码编译

编译完成后一共生成3份文件:

azkaban-db-***.tar.gz:Azkaban元数据脚本

azkaban-exec-server-***.tar.gz:Azkaban Executor服务

azkaban-web-server-***.tar.gz:Azkaban Web服务

2.3 安装配置Metastore

2.3.1 安装MySQL

Azkaban的元数据需要保存在mysql当中,所以必须要安装mysql,mysql安装步骤本文就不细讲了,略过。

2.3.2 Azkaban脚本导入

编译好的3份文件中,有一份是SQL脚本,将其解压,找到create-all-sql-***.sql文件,到mysql中执行,将Azkaban的元数据建立好。

2.4 安装配置azkaban-exec-server

2.4.1 修改配置文件

到解压的conf目录下修改azkaban.properties文件

detault.timezone.id=Asia/Shanghai
executor.global.properties=/opt/module/azkaban-executor-3.86.0/conf/global.properties

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

修改完后分发到其他机器上。分发脚本可以参考我的另外一篇文章:大数据实操篇 No.2-Hadoop集群搭建 中的 3.2.2 编写xsync集群分发脚本

2.5 安装配置azkaban-web-server

2.5.1 配置SSL(生成密钥对和证书)

注意:Azkaban-3.X之后,可以不配置SSL,web服务可不通过https进行访问,直接通过http进行访问。

可以直接在azkaban.properties中设置

jetty.use.ssl=false

笔者这里安装过一次2.5.0,所以记录以下此版本的安装步骤

采用Keytool进行生成,Keytool是java数据证书管理工具,使用用户能够管理自己的公钥私钥对,及相关证书。

-keystore 指定密钥库的名称及位置(产生的各类信息将存在keystore文件中)

-genkey(或者-genkeypair)生产密钥对

-alias 为生产的密钥对指定别名,默认时mykey

-keyalg 指定密钥的算法RSA/DSA,默认时DSA

开始配置,先到web-server目录下执行如下命令

$ keytool -keystore keystore -alias zihaokey -genkey -keyalg RSA

根据提示,输入自己的信息 

Enter keystore password:  
Re-enter new password: 
What is your first and last name?
  [Unknown]:  zihao
What is the name of your organizational unit?
  [Unknown]:  
What is the name of your organization?
  [Unknown]:  
What is the name of your City or Locality?
  [Unknown]:  
What is the name of your State or Province?
  [Unknown]:  
What is the two-letter country code for this unit?
  [Unknown]:  
Is CN=zihao, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  y

Enter key password for <zihaokey>
        (RETURN if same as keystore password):  
Re-enter new password: 

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".

笔者这里输入的密钥库口令和zihaokey口令为123456

注意这种方式采用的是RSA非对称加密,公钥存在证书当中,私钥存在zihaokey当中

生成后可以用命令查看密钥和证书信息

$ keytool -keystore keystore -list

2.5.2 修改配置文件

到conf目录下,修改azkaban.properties文件

web.resource.dir= /opt/module/azkaban-web-3.86.0/web/
detault.timezone.id=Asia/Shanghai
user.manager.xml.file=/opt/module/azkaban-web-3.86.0/conf/azkaban-users.xml

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

jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
##客户端判断服务端是否可信,所用的的密钥信息
#密钥库
jetty.keystore=/opt/module/azkaban-web-3.86.0/keystore
#密钥库口令
jetty.password=123456
#密钥口令
jetty.keypassword=123456
##服务器判断客户端是否可信,所用的密钥信息
jetty.truststore=/opt/module/azkaban-web-3.86.0/keystore
jetty.trustpassword=123456

#发送者邮箱
[email protected]
mail.host=stmp.qq.com
[email protected]
#邮箱授权码
mail.password=******

(密码信息根据自己的配置进行填写)

然后修改azkaban-user.xml,添加所需用户

<user username=”admin” password=”admin” roles=”admin” />

这里用户名、密码都设置成admin

第3章 基本使用

3.1 启动/停止Executor服务

$ bin/start-exec.sh
$ bin/shutdown-exec.sh

进程名

AzkabanExecutorServer

注意azkaban3.X之后的版本,启动后要激活executor

Window浏览器访问地址激活:

http://hadoop100:12321/executor?action=activate

访问结果如下图:

 

或者

Linux系统下,在exec-server根目录下执行

curl -G " hadoop100:12321/executor?action=activate" && echo

可通过查看数据库azkaban数据库executors表查看是否激活

 

至此,exec-server就激活成功。

3.2 启动/停止web服务器

$ bin/start-web.sh
$ bin/shutdown-web.sh

进程名

AzkabanWebServer

打开浏览器进行验证,验证地址:https://hadoop102:8443/

至此,web-server就部署成功。同时,Azkaban整体也就安装部署完成。

第4章 常见错误

4.1 Executor启动错误

org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
Caused by: java.lang.NullPointerException
        at com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3286)

问题原因:笔者azkaban lib目录下mysql连接驱动与安装的mysql版本不一致

解决办法:更换驱动:

将默认的mysql-connector-java-5.1.28.jar文件删除,换成mysql-connector-java-5.1.44-bin.jar

 

4.2 任务提交后一直为Preparing状态

原因:akaban-web下的azkaban.properties配置文件了MinimumFreeMemory。滤器会检查 executor 主机空余内存是否会大于 6G,如果不足 6G,则 web-server 不会将任务交由该主机执行

解决办法:修改akaban-web下的azkaban.properties配置文件,去掉MinimumFreeMemory(或者直接给机器添加内存)

azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus

修改为

azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus

4.3 字符%0D问题

原因:由于windows下编写的shell脚本换行符是\r\n;而linux系统下换行符为\n

解决办法:用nodepad++替换字符;或者用dos2unix进行转换。

 

猜你喜欢

转载自blog.csdn.net/dzh284616172/article/details/107993030