## Schedulis 普通版环境部署
一)、使用前置
- 请基于 Linux 操作系统操作(建议 CentOS)
- 创建新用户 hadoop, 并为该用户赋予 root 权限,用于部署schedulis
- 准备好 MySQL(版本5.5+) 的客户端和服务端
- 请确保已安装并且正确配置 JDK(版本1.8+)
- 配置集群各节点之间的免密码登录
- 请准备一台已经正确安装和配置 Maven(版本3.3+) 和 Git 的机器,用来编译代码
- 安装dss所需的安装包,以及pstree(shutdown时会用到)
二)、获取项目文件并编译打包
-
- 使用 Git 下载 Schedulis 项目文件 git clone https://github.com/WeBankFinTech/Schedulis.git
- 下载jobtype插件的依赖和配置,链接: 链接:https://pan.baidu.com/s/1FuSBdgdTAHL1PxUXnfbLBw 提取码:0cpo;(由于文件大小较大,所以放在网盘进行管理)
- 进入项目文件的根目录下,将第二步中下载的jobtypes文件解压后,将整个jobtypes文件夹放入项目module(azkaban-jobtyope)的根目录,然后使用 Maven 来编译打包整个项目
mvn clean install -Dmaven.test.skip=true
待整个项目编译打包成功后,用户可以在这两个服务(azkaban-web-server 和 azkaban-exec-server)各自的 target 目录下找到相应的 .ZIP 安装包(schedulis_*web.zip 和 schedulis*_exec.zip)。这里需要注意:打包完成后一定要确认安装包内是否有plugins目录,如发现安装包没有plugins,或者plugins为空,则分别进入 WebServer 和 ExecServer 目录,为它们单独再次编译即可,如果没有打包进来则无法使用插件。
- 将以下文件复制到需要部署的 Executor 或者 WebServer 服务器:
- Executor 或者 WebServer 安装包
- 项目文件根目录下的 bin/construct 目录中的数据库初始化脚本 hdp_wtss_deploy_script.sql
- 项目文件根目录下的 bin 目录中的环境检测脚本 checkEnv.sh
- 将安装包解压到合适的安装目录下,譬如:/appcom/Install/AzkabanInstall, 并将安装的根目录 /appcom 以及其下子目录的属主转换为 hadoop 用户, 且赋予 775 权限(/appcom/Install/AzkabnaInstall/ 为默认安装目录,建议创建该路径并将其作为安装路径,可避免一些路径的修改)
- 在开始下一步操作之前,为需要部署的机器运行 bin 目录下的环境检测脚本 checkEnv.sh,确认基础环境已经准备完成。若是报错,请用户参考"使用前置"章节为部署节点准备好基础环境
- 如果自行编译schedulis,那么编译出的linkis插件是不可用的,需要自行编译linkis1.0或者直接使用第二步中已经编译好的插件包(jobtypes)放入安装目录的plugins目录下,使用release包没有此问题
先编译:az-webank-system-manager
再编译:schedulis
三)、修改配置
1. 修改 host.properties 文件
此配置文件存放的路径请参考或者修改 ExecServer 安装包下的 bin/internal/internal-start-executor.sh 文件中的 KEY 值 hostConf
该文件记录的是 Executor 端的所有执行节点 Hostname 和 ServerId, 需保持每台执行机器上的该文件内容一致
示例:
vi /appcom/config/wtss-config/host.properties
文件内容如下:
executor1_hostname=1
executor2_hostname=2
executor3_hostname=3
其中executor1_hostname,executor2_hostname,executor3_hostname 为Executor节点所在机器的真实主机名。
2. 初始化数据库
在 MySQL 中相应的 database 中(也可新建一个),将前面复制过来的数据库初始化脚本导入数据库
#连接 MySQL 服务端
#eg: mysql -uroot -p12345,其中,username : root, password: 12345
mysql -uUserName -pPassword -hIP --default-character-set=utf8
#创建一个 Database(按需执行)
mysql> create database schedulis;
mysql> use schedulis;
# 初始化 Database
#eg: source hdp_wtss_deploy_script.sql
mysql> source 脚本存放目录/hdp_wtss_deploy_script.sql
3. Executor Server 配置修改
执行包修改
项目文件根目录下的 bin/construct 目录中任务执行依赖的包 execute-as-user ,复制到azkaban-exec-server的lib下,并且更新权限
sudo chown root execute-as-user
sudo chmod 6050 execute-as-user
plugins/jobtypes/commonprivate.properties
此配置文件存放于 ExecServer 安装包下的 plugins/jobtypes 目录下
此配置文件主要设置程序启动所需要加载的一些 lib 和 classpath
#以下四项配置指向对应组件的安装目录,请将它们修改成相应的组件安装目录
hadoop.home=/appcom/Install/hadoop
hadoop.conf.dir=/appcom/config/hadoop-config
hive.home=/appcom/Install/hive
spark.home=/appcom/Install/spark
#azkaban.native.lib 请修改成ExecServer 安装目录下 lib 的所在绝对路径
execute.as.user=true
azkaban.native.lib=/appcom/Install/AzkabanInstall/wtss-exec/lib
plugins/jobtypes/common.properties
此配置文件存放于 ExecServer 安装包下的 plugins/jobtypes 目录下
此配置文件主要是设置 DataChecker 和 EventChecker 插件的数据库地址,如不需要这两个插件可不用配置
#配置集群 Hive 的元数据库(密码用 base64 加密)
job.datachecker.jdo.option.name="job"
job.datachecker.jdo.option.url=jdbc:mysql://host:3306/db_name?useUnicode=true&characterEncoding=UTF-8
job.datachecker.jdo.option.username=username
job.datachecker.jdo.option.password=password
#配置 Schedulis 的数据库地址(密码用 base64 加密)
msg.eventchecker.jdo.option.name="msg"
msg.eventchecker.jdo.option.url=jdbc:mysql://host:3306/db_name?useUnicode=true&characterEncoding=UTF-8
msg.eventchecker.jdo.option.username=username
msg.eventchecker.jdo.option.password=password
#此部分依赖于第三方脱敏服务mask,暂未开源,将配置写为和job类型一样即可(密码用 base64 加密)
bdp.datachecker.jdo.option.name="bdp"
bdp.datachecker.jdo.option.url=jdbc:mysql://host:3306/db_name?useUnicode=true&characterEncoding=UTF-8
bdp.datachecker.jdo.option.username=username
bdp.datachecker.jdo.option.password=password
conf/azkaban.properties
此配置文件是 ExecServer 的核心配置文件, 该配置文件存放在 ExecServer 安装包下的 conf 目录下。
executor.global.properties必须是绝对路径,否则会报azkaban-executor启动时出现conf/global.properties (No such file or directory)的错误
# Azkaban
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes
# Loader for projects
executor.global.properties=/appcom/Install/AzkabanInstall/schedulis_0.5.0_exec/conf/global.properties
azkaban.project.dir=projects
#项目 MySQL 服务端地址(密码用 base64 加密)
database.type=mysql
mysql.port=3306
mysql.host=
mysql.database=
mysql.user=
mysql.password=
mysql.numconnections=100
#Executor 线程相关配置
executor.maxThreads=60
executor.port=12321
executor.flow.threads=30
jetty.headerBufferSize=65536
flow.num.job.threads=30
#此 server id 请参考1的 host.properties,改配置会在服务启动的时候自动从host.properties中拉取
executor.server.id=8
checkers.num.threads=200
#Web Sever url相关配置, eg: http://localhost:18081
azkaban.webserver.url=http://webserver_ip:webserver_port
plugins/alerter/WeBankIMS/conf/plugin.properties
此配置文件存放在 ExecServer 安装包下的 plugins/alerter/WeBankIMS/conf 目录下
该配置文件主要是设置 Executor 告警插件地址, 请用户基于自己公司的告警系统来设置
此部分依赖于第三方告警服务,如不需要可跳过配置
# webank alerter settings
alert.type=WeBankAlerter
alarm.server=ims_ip
alarm.port=10812
alarm.subSystemID=5003
alarm.alertTitle=WTSS Aleter Message
alarm.alerterWay=1,2,3
alarm.reciver=root
alarm.toEcc=0
conf/global.properties
该配置文件存放在 ExecServer 安装包下的 conf 目录下,该配置文件主要存放一些 Executor 的全局属性
#azkaban.native.lib,执行项目的 lib 目录,请修改成本机解压后的 ExecServer 安装包下 lib 的所在路径
execute.as.user=true
azkaban.native.lib=/appcom/Install/AzkabanInstall/wtss-exec/lib
plugins/jobtypes/linkis/private.properties
该配置文件存放在 ExecServer 安装包下的 plugins/jobtypes/linkis 目录下,主要是设置 jobtype 所需的 lib 所在位置
#将该值修改为 ExecServer 安装包目录下的 /plugins/jobtypes/linkis/extlib
jobtype.lib.dir=/appcom/Install/AzkabanInstall/wtss-exec/plugins/jobtypes/linkis/extlib
plugins/jobtypes/linkis/plugin.properties (按需修改)
若用户安装了 Linkis,则修改此配置文件来对接 Linkis,该配置文件存放在 ExecServer 安装包下的 plugins/jobtypes/linkis 目录下
#将该值修改为 Linkis 的gateway地址
wds.linkis.gateway.url=
4. Web Server 配置文件
conf/azkaban.properties
此配置文件是 WebServer 的核心配置文件, 该配置文件存放在 WebServer 安装包下的 conf 目录下
#项目 MySQL 配置(密码用 base64 加密)
database.type=mysql
mysql.port=
mysql.host=
mysql.database=
mysql.user=
mysql.password=
mysql.numconnections=100
#Azkaban jetty server properties
jetty.port=18081
#Executor 选择策略配置
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize
azkaban.queueprocessing.enabled=true
azkaban.webserver.queue.size=100000
azkaban.activeexecutor.refresh.milisecinterval=50000
azkaban.activeexecutor.refresh.flowinterval=5
azkaban.executorinfo.refresh.maxThreads=5
azkaban.executorselector.comparator.Memory=3
#azkaban.executorselector.comparator.CpuUsage=2
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
# LDAP 地址配置
ladp.ip=ldap_ip
ladp.port=ldap_port
# 如下地址改为绝对地址,如果设置错误登录界面会变形,所有前端请求路径会发生错误
web.resource.dir=/appcom/Install/AzkabanInstall/schedulis_0.5.0_web/web/
5. 修改日志存放目录(按需修改)
Schedulis 项目的日志默认存放路径为 /appcom/logs/azkaban, 目录下存放的就是 Executor 和 Web 两个服务相关的日志
若选择使用默认存放路径,则需要按要求将所需路径提前创建出来, 并将文件属主转换为 hadoop,赋予 775 权限;若要使用自定义的日志存放路径,则需要创建好自定义路径,并修改 ExecServer 和 WebServer 安装包的以下文件:
- Executor 下的 bin/internal/internal-start-executor.sh 和 Web 下的 bin/internal/internal-start-web.sh 文件中的 KEY 值 logFile, 设为自定义日志存放路径, 以及在两个文件中关于 “Set the log4j configuration file” 中的 -Dlog4j.log.dir 也修改为自定义的日志路径
- 两个服务中的 bin/internal/util.sh 文件中的 KEY 值 shutdownFile,改为自定义日志路径
6.密码加密问题
配置文件中的数据库密码,采用java base64方式加密,参考如下java加密算法
azkaban.base64Pwd
Base 64 加密后:amVyZWgxMjM=
Base 64 解密后:abcd123
sun.misc.BASE64 加密后:amVyZWgxMjM=
sun.misc.BASE64 解密后:abcd123
package azkaban;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.util.Base64;
public class base64Pwd {
public static void main(String[] args) throws Exception {
String str = "abcd123";
base64(str);
enAndDeCode(str);
}
/**
* Base64
*
*/
public static void base64(String str) {
byte[] bytes = str.getBytes();
//Base64 加密
String encoded = Base64.getEncoder().encodeToString(bytes);
System.out.println("Base 64 加密后:" + encoded);
//Base64 解密
byte[] decoded = Base64.getDecoder().decode(encoded);
String decodeStr = new String(decoded);
System.out.println("Base 64 解密后:" + decodeStr);
System.out.println();
}
/**
* BASE64加密解密
*/
public static void enAndDeCode(String str) throws Exception {
String data = encryptBASE64(str.getBytes());
System.out.println("sun.misc.BASE64 加密后:" + data);
byte[] byteArray = decryptBASE64(data);
System.out.println("sun.misc.BASE64 解密后:" + new String(byteArray));
}
/**
* BASE64解密
* @throws Exception
*/
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
/**
* BASE64加密
*/
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
}
五、启动
对数据库进行初始化完毕,以及修改完以上的配置文件后,就可以启动了
- 进入 ExecutorServer 安装包路径,注意不要进到 bin 目录下
./bin/start-exec.sh
- 进入 WebServer 安装包路径,注意不要进到 bin 目录下
./bin/start-web.sh
此时若得到提示信息说启动成功,则可以进入验证环节了;若是出错,请查看日志文件,并按需先查看 QA 章节
六、测试
- 若是单 WebServer 部署模式,则在浏览器中输入 http://webserver_ip:webserver_port
- 若是多 WebServer 部署模式,则在浏览器中输入 http://nginx_ip:nginx_port
- 在跳出的登陆界面输入默认的用户名和密码
username : superadmin
pwd : Abcd1234
- 成功登陆后,请参考用户使用手册,自己创建一个项目并上传测试运行
- 运行成功,恭喜 Schedulis 成功安装了
修改web访问端口
vim /appcom/Install/AzkabanInstall/schedulis_0.5.0_web/conf/azkaban.properties
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=18080
jetty.send.server.version=false
jetty.keystore=keystore/azkabanjetty.keystore
jetty.password=hadoop
jetty.keypassword=hadoop
jetty.truststore=keystore/azkabanjetty.keystore
jetty.trustpassword=hadoop
修改executor的配置
vim /appcom/Install/AzkabanInstall/schedulis_0.5.0_exec/conf/azkaban.properties
# Web Server
zakaban.webserver.url=http://localhost:18080
七、常见问题处理
-
azkaban-executor启动时出现conf/global.properties (No such file or directory)的问题解决
-
maven跳过单元测试-maven.test.skip和skipTests的区别
解决azkaban-exec-server模块的test文件夹的测试代码报错问题,
-
^M问题的原因与解决
-
登录异常,前端调试资源路径不对
需要修改web项目中的azkaban.properties中的web.resource.dir为绝对地址
-
登录异常,前端登录无响应,控制态报opendj 的jar包错误
需要确保 opendj-core-3.0.0.jar 和 abcd-grizzly-3.0.0.jar 正确,版本不能变。
-
使用mysql5数据库,有useSSL=false提示的错误,详细错误见如下链接
了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为“false”。您需要通过设置useSSL=false显式禁用SSL,或者设置useSSL=true并为服务器_座上来者皆为客的博客-CSDN博客
如果使用mysql5,需要手动挡更改mysql5的驱动jar包。
azkaban.utils.StdOutErrRedirect 65 write - Fri Mar 18 08:58:33 CST 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
对应的解决方案,修改配置文件azkaban.properties,增加如下配置
mysql.usessl=[#DB_USESSL]
修改MySQLDataSource代码,增加mysql5的支持,
final String usessl = props.getString("mysql.usessl");
addConnectionProperty("useSSL", usessl);
然后重新打包。
八、相关教程
参考官方部署文档:Schedulis/schedulis_deploy_cn.md at master · WeBankFinTech/Schedulis (github.com)
参考官方使用教程:Schedulis/schedulis_user_manual_cn.md at master · WeBankFinTech/Schedulis (github.com)
参考第三方教程:WeBank/Schedulis部署和开发_GliangJu的博客-CSDN博客_schedulis 部署