参考文章:
- 1.http://azkaban.github.io/azkaban/docs/latest/
- 2.http://blog.csdn.net/gaoqida/article/details/72288900
- 3.http://blog.csdn.net/huohuotu/article/details/77487007
- 4.https://zhuanlan.zhihu.com/p/22224805
Step0:
在各个节点建立azkaban用户并配置ssh免密登陆
Step1:
下载jar包并且编译它:
1、在home目录下,下载源码:
cd /home/azkaban; git clone git@github.com:azkaban/azkaban.git
2、编译进入到下载的azkaban目录中进行编译:
# Build Azkaban ./gradlew build(这一步需要等待的时间略久,需要提前安装git、gcc等软件,否则会报错) # Clean the build ./gradlew clean # Build and install distributions ./gradlew installDist # Run tests ./gradlew test # Build without running tests ./gradlew build -x test
(上面如果报错,执行 ./gradlew distTar)
相关目录介绍如下: azkaban-common : 常用工具类 azkaban-db : 对应的sql脚本 azkaban-Hadoop-secutity-plugin : hadoop有关kerberos插件 azkaban-solo-server: web和executor运行在同一进程的项目 azkaban-web-server:azkaban的web-server单独模块 azkaban-executor-server: azkaban的executor-server单独模块 azkaban-spi: azkaban存储接口以及exception类
3.将编译好的文件拷贝出来:
# mkdir Azkaban_package # cp azkaban-master/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz Azkaban_package/ # cp azkaban-master/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz Azkaban_package/ # cp azkaban-master/azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz Azkaban_package/ # cp azkaban-master/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz Azkaban_package/
4.解压:
# cd azkaban_package # tar xvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz # tar xvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz # tar xvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz # tar xvf azkaban-db-0.1.0-SNAPSHOT.tar.gz
Step2:配置mysql数据库
1.安装Mysql
这里就不详细说明了2.创建数据库
创建一个azkaban数据库用户。
创建一个azkaban的数据库:
mysql -uroot -p CREATE DATABASE azkaban;
授权:
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'; GRANT ALL ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION; flush privileges; EXIT
3、导入建表语句
mysql -uazkaban -p use azkaban SOURCE azkaban_package/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;
Step3:配置WebServer(选择一台服务器作为webServr)
1.在webServer中创建文件夹/home/azkaban/azkaban-web-server,将之前解压出来的azkaban-web-server-0.1.0-SNAPSHOT.tar.gz中的三个目录拷贝进来,同时将/azkaban-solo-server-0.1.0-SNAPSHOT中的conf,plugins拷贝进来,在azkaban-web-server手动创建extlib文件夹
bin 启动脚本存放目录 conf 配置文件存放目录(没有的话从solo-server的目录中拷贝过来) lib 依赖jar包存放目录 extlib 附加jar包存放目录(没有的话手动创建) plugins 插件安装目录(事实上azkaban的web并不需要这个文件夹,为了安全起见,从solo-server的目录中拷贝) web web资源文件
2.配置jetty ssl
keytool -keystore keystore -alias jetty -genkey -keyalg RSA Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: YY What is the name of your organizational unit? [Unknown]: YY What is the name of your organization? [Unknown]: YY What is the name of your City or Locality? [Unknown]: shanghai What is the name of your State or Province? [Unknown]: shanghai What is the two-letter country code for this unit? [Unknown]: CN Is CN=YY, OU=YY, O=YY, L=shanghai, ST=shanghai, C=CN correct? [no]: yes
将生成的keystone文件拷贝到web-server的安装目录下,和conf等目录同级
-3. 修改conf/azkaban.properties配置文件
# Azkaban Personalization Settings
azkaban.name=Test #服务器UI名称,用于服务器上方显示的名字
azkaban.label=My Local Azkaban #描述
azkaban.color=#FF3601 #UI颜色
azkaban.default.servlet.path=/index
web.resource.dir=web/ #默认根web目录
default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类
user.manager.xml.file=conf/azkaban-users.xml #用户配置,具体配置参见下文
# Loader for projects
executor.global.properties=conf/global.properties #globa配置文件所在位置
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties. #jetty服务器属性
jetty.maxThreads=25 #最大线程数
jetty.ssl.port=8443 #jetty ssl端口号
jetty.port=8081 #jetty端口
jetty.keystore=keystore #SSL文件名
jetty.password=bigdata@123 #SSL文件密码
jetty.keypassword=bigdata@123 #jetty主密码与keystore文件相同
jetty.truststore=keystore #SSL文件名
jetty.trustpassword=bigdata@123 #SSL文件密码
# Azkaban Executor settings
executor.port=12321 #执行服务器端口
# mail settings #邮件配置(暂没有配置)
mail.sender= #发送邮箱
mail.host= #发送邮箱smtp地址
mail.password= #邮箱密码
job.failure.email= #任务失败时发送邮件的地址
job.success.email= #任务成功时发送邮件的地址
lockdown.create.projects=false
cache.directory=cache #缓存目录
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes
database.type=mysql #数据库类型
mysql.port=3306 #数据库端口号
mysql.host= #数据库连接地址
mysql.database=azkaban #数据库实例名
mysql.user=azkaban #数据库用户名
mysql.password=azkaban #数据库密码
mysql.numconnections=100 #数据库最大连接数
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1
4.上传log4j文件
在conf目录中创建文件 log4j.properties,同时写入
log4j.rootLogger=INFO,File log4j.appender.File=org.apache.log4j.DailyRollingFileAppender log4j.appender.File.File=/home/azkaban/azkabna-web-server/logs/azkaban_executor log4j.appender.File.DatePattern='_'yyyy-MM-dd'.txt' #log4j.appender.File.MaxFileSize=100KB #log4j.appender.File.MaxBackupIndex=100 log4j.appender.File.Append=true log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=%d %t %-5p [%c] %m%n
如果没有log4j文件,将会以下错误:
Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHan
5.用户配置
在conf/azkaban-users.xml中可以添加管理员用户及密码
6.启动web-server
在azkaban-web-server牡蛎下启动:
bash bin/start-web.sh
打开浏览器,访问https://webserverIP:8081,用 账号azkaban 密码azkaban登录。
Step5 Executor服务器安装
- 1 在executor服务器中创建azkaban用户
2 在/home/azkaban目录中创建azkaban-executor-server,将 azkaban-exec-server-0.1.0-SNAPSHOT中的bin,lib复制到azkaban-executor-server,将azkaban-solo-server-0.1.0-SNAPSHOT中conf,plugins复杂到azkaban-executor-server,创建extlib文件夹
bin 启动脚本存放目录 conf 配置文件存放目录(没有的话从solo-server的目录中拷贝过来) lib 依赖jar包存放目录 extlib 附加jar包存放目录(没有的话手动创建) plugins 插件安装目录
3.修改azkaban.properties
# Azkaban Personalization Settings default.timezone.id=Asia/Shanghai # Loader for projects #executor.global.properties=conf/global.properties azkaban.project.dir=projects # Azkaban plugin settings azkaban.jobtype.plugin.dir=plugins/jobtypes executor.maxThreads=50 executor.port=12321 executor.flow.threads=30 azkaban.native.lib=false//这个属性很奇怪,暂时先设置为false database.type=mysql mysql.port=3306 mysql.host=192.168.11.201 mysql.database=azkaban mysql.user=root mysql.password=root mysql.numconnections=100
4.修改plugins/jobtepe/commmonprivate.properties
# set execute-as-user execute.as.user=true azkaban.native.lib=/home/azkaban/azkaban-native-lib
-
在conf目录中创建文件 log4j.properties,同时写入
log4j.rootLogger=INFO,File log4j.appender.File=org.apache.log4j.DailyRollingFileAppender log4j.appender.File.File=/home/azkaban/azkaban-exec-server/logs/azkaban_executor log4j.appender.File.DatePattern='_'yyyy-MM-dd'.txt' log4j.appender.File.MaxFileSize=100KB log4j.appender.File.MaxBackupIndex=100 log4j.appender.File.Append=true log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=%d %t %-5p [%c] %m%n
-
在mysql的azkaban数据库中,将executor服务器的ID加入executors表
insert into executors(host,port) values("EXECUTOR_HOST",EXECUTOR_PORT); 比如insert into executors(host,port) values("196.12.22.123",12321); 同时将active设置为1
-
启动executor服务器
bash /home/azkaban/azkaban-exec-server/bin/start-exec-*.sh;
-8.添加用户转化功能
我们用azkaban用户登陆azkaban,但是却可以通过user.proxy.user切换到任何用户执行任务,原因是我们进行了plugins配置,配置步骤如下
1.在azkaban-exec-server同一层创建azkaban-native-lib
2.cp azkaban/az-exec-util/src/main/c/execute-as-user.c azkaban-native-lib
3.gcc execute-as-user.c -o execute-as-user
4.chown root execute-as-user (you might need root privilege)
5.chmod 6050 execute-as-user (you might need root privilege)