使用 Git 下载 Schedulis 项目文件 git clone https://github.com/WeBankFinTech/Schedulis.git
下载jobtype插件的依赖和配置,链接: https://pan.baidu.com/s/1pKOjY6tgNkRD5rVmvU0RXg 提取码: wy7r ;(由于文件大小较大,所以放在网盘进行管理)
进入项目文件的根目录下,将第二步中下载的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 服务器:
将安装包解压到合适的安装目录下,譬如:/appcom/Install/AzkabanInstall, 并将安装的根目录 /appcom 以及其下子目录的属主转换为 hadoop 用户, 且赋予 775 权限(/appcom/Install/AzkabnaInstall/ 为默认安装目录,建议创建该路径并将其作为安装路径,可避免一些路径的修改)
修改schedulis_0.5.0_exec为wtss-exec
在开始下一步操作之前,为需要部署的机器运行 bin 目录下的环境检测脚本 checkEnv.sh,确认基础环境已经准备完成。若是报错,请用户参考"使用前置"章节为部署节点准备好基础环境
此配置文件存放的路径请参考或者修改 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节点所在机器的真实主机名。
在 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
项目文件根目录下的 bin/construct 目录中任务执行依赖的包 execute-as-user ,复制到azkaban-exec-server的lib下,并且更新权限
sudo chown root execute-as-user
sudo chmod 6050 execute-as-user
此配置文件存放于 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
此配置文件存放于 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
此配置文件是 ExecServer 的核心配置文件, 该配置文件存放在 ExecServer 安装包下的 conf 目录下
#项目 MySQL 服务端地址(密码用 base64 加密)
mysql.port=3306
mysql.port=3306
mysql.host=localhost
mysql.database=schedulis
mysql.user=root
mysql.password=MTIzNDU2 # 123456 base64 加密
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:8081
azkaban.webserver.url=http://webserver_ip:webserver_port
此配置文件存放在 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
该配置文件存放在 ExecServer 安装包下的 conf 目录下,该配置文件主要存放一些 Executor 的全局属性
#azkaban.native.lib,执行项目的 lib 目录,请修改成本机解压后的 ExecServer 安装包下 lib 的所在路径
execute.as.user=true
azkaban.native.lib=/appcom/Install/AzkabanInstall/wtss-exec/lib
该配置文件存放在 ExecServer 安装包下的 plugins/jobtypes/linkis 目录下,主要是设置 jobtype 所需的 lib 所在位置
#将该值修改为 ExecServer 安装包目录下的 /plugins/jobtypes/linkis/extlib
jobtype.lib.dir=/appcom/Install/AzkabanInstall/wtss-exec/plugins/jobtypes/linkis/extlib
若用户安装了 Linkis,则修改此配置文件来对接 Linkis,该配置文件存放在 ExecServer 安装包下的 plugins/jobtypes/linkis 目录下
#将该值修改为 Linkis 的gateway地址
wds.linkis.gateway.url=
此配置文件是 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 端口号需要和 azkaban.webserver.url 端口一致
jetty.port=8081
#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
Schedulis 项目的日志默认存放路径为 /appcom/logs/azkaban, 目录下存放的就是 Executor 和 Web 两个服务相关的日志
若选择使用默认存放路径,则需要按要求将所需路径提前创建出来, 并将文件属主转换为 hadoop,赋予 775 权限;若要使用自定义的日志存放路径,则需要创建好自定义路径,并修改 ExecServer 和 WebServer 安装包的以下文件:
对数据库进行初始化完毕,以及修改完以上的配置文件后,就可以启动了
./bin/start-exec.sh
./bin/start-web.sh
此时若得到提示信息说启动成功,则可以进入验证环节了;若是出错,请查看日志文件,并按需先查看 QA 章节
如何查看自己本机 Hostname ?
命令行输入 hostname
为什么先启动了 Webserver 再启动 Executorserver,没有报错,但在浏览器连接时却提示无法连接?
可以使用 Jps 命令确认 Webserver 进程是否启动了。一般情况下,建议先启动 ExecutorServer,再 WebServer。否则有可能 WebServer 先启动又被关掉。
两个服务关于 MySQL 的配置中密码已经使用了 base64 加密,日志中还是无法提示连接 MySQL?
请注意区分 Linux 下的 base64 加密与 Java base64 加密,我们使用的是后者。
两个服务使用相应的 shutdown 脚本总是提示找不到相应的 Pid?
若要关闭两个服务的话,请手动 Kill 掉相应的进程,并删除相应的 currentpid 文件。
怎么重启服务?
请参考4,将服务关闭再将服务开启。
为什么 ExecutorServer 显示 Connection Failed,而修改配置后再启动,却提示 Already Started?
此处请先将相应的 currentpid 文件删除,再重新启动。
为什么报错了,相应的日志文件没有更新?
请先确认配置的日志文件路径是否正确,再将日志文件属主修改为 hadoop 用户,并赋予 775 权限。
上传项目文件后,系统报错?
请确认 WebServer 安装包路径的 lib 目录下是否存在 common-lang3.jar,若没有请手动添加。
为什么报错了,却找不到相应的日志文件?
请确认已经正确配置日志文件路径。详情请参考参数配置中的修改日志存放路径。
为什么在 Maven 编译的时候会出现 systemPath 不是绝对路径?
首先确认是否已经设置了 MAVEN_HOME 的环境变量,并且确认是否已经刷新环境变量文件
若是上面步骤都已完成,可以在编译的时候传入参数
mvn install -Denv.MAVEN_HOME=dir of local repository set in settings.xml
编译时出现错误 “Could not find artifactor xxx”?
请确保 Maven下 conf/settigs.xml 或者用户的 settings.xml 是否有正确配置镜像地址和远程仓库地址
项目文件路劲和安装包路径有什么区别?
项目文件路径是 Git 下载下来后项目文件存放的地址;安装包路径是使用 Maven 编译后将安装包解压后存放的地址;数据库初始化脚本存于项目文件路径下;其他的参数配置文件都在安装包路径下
为什么使用 Executor 启动脚本启动 Executor 时,先是提示启动成功,后面又一直出现更新数据库失败的提示?
请耐心等待,直到确认已经全部失败后,再查看日志确认具体报错原因。
java.lang.NoClassDefFoundError: Could not initialize class org.forgerock.opendj.ldap.LDAPConnectionFactory
这个是因为web打包的时候少了opendj两个相关的包,需要把azkaban-common/extlib下opendj-core-3.0.0.jar和opendj-grizzly-3.0.0.jar添加到schedulis_0.5.0_web/lib里面
azkaban.executor.ExecutorManagerException: No active executors found
修改数据库schedulis下executors表active字段0修改为1(官网方法:curl http://localhost:12321/executor?action=activate),在重新启动web项目
所有配置文件找不到的
都使用绝对路径配置
azkaban.utils.StdOutErrRedirect - Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc.Driver’.
修改源码azkaban-db下 MySQLDataSource setDriverClassName(“com.mysql.cj.jdbc.Driver”)和azkaban-common 下MySQLBasicDataSource setDriverClassName(“com.mysql.cj.jdbc.Driver”);
Error injecting constructor, java.io.IOException: Cannot run program “chmod”: CreateProcess error=2, 系统找不到指定的文件。
重新运行服务就行;
为什么在启动 Executor 的时候,先是提示启动成功,后面就一直卡在更新数据库失败的提示很久,失败次数也没有更新?
对于这种情况,很大原因是数据库连接时出现了问题,请停止启动进程,并查看日志确认错误原因。按需查看 QA 章节。
启动配置文件环境变量添加azkaban-exec-server\src\绝对路径,让程序可以读取到conf/azkaban.properties配置文件
AZKABAN_HOME=G:\workspace\Schedulis\azkaban-exec-server\src\
conf/azkaban.properties配置文件程序读取找不到那个目录,就把配置文件里面参数修改为绝对路径
azkaban.properties配置文件主要配置
# Loader for projects 修改为绝对路径
executor.global.properties=G:/workspace/Schedulis/azkaban-exec-server/src/conf/global.properties
azkaban.project.dir=projects
database.type=mysql #数据库类型(目前只支持mysql)
mysql.port=3306 #数据库端口号
mysql.host=localhost #数据库IP地址
mysql.database=schedulis #数据库实例名
mysql.user=root #数据库用户名
mysql.password=MTIzNDU2 #数据库密码
mysql.numconnections=100 #最大连接数
executor.server.id=2 #注册executors时使用ID,记录的是 Executor 端的所有执行节点 Hostname 和 ServerId
executor.port=12321 #端口号(如修改,请与web服务中一致)
# Web Server curl http://localhost:8081/executor?action=activate
azkaban.webserver.url=http://localhost:8081
启动配置文件环境变量添加azkaban-web-server\src\绝对路径,让程序可以读取到conf/azkaban.properties配置文件
AZKABAN_HOME=G:\workspace\Schedulis\azkaban-web-server\src\
ldap的jar包引入
复制azkaban-common/extlib下opendj-core-3.0.0.jar、opendj-grizzly-3.0.0.jar到azkaban-web-server/extlib
azkaban-web-server的pom.xml文件加入
<dependency>
<groupId>org.opendj.commons</groupId>
<artifactId>opendj-core</artifactId>
<version>-3.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/extlib/opendj-core-3.0.0.jar</systemPath>
</dependency>
<dependency>
<groupId>org.opendj.commons</groupId>
<artifactId>opendj-grizzly</artifactId>
<version>3.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/extlib/opendj-grizzly-3.0.0.jar</systemPath>
</dependency>
conf/azkaban.properties配置文件主要配置
# Azkaban Personalization Settings
azkaban.name=WeDataSphere #服务器UI名称,用于服务器上方显示的名字
azkaban.label=WeBank #描述
azkaban.color=#FF3601 #UI颜色
azkaban.default.servlet.path=/index
web.resource.dir=G:/workspace/Schedulis/azkaban-web-server/src/web #默认根web目录
default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海 默认为美国
# Azkaban UserManager class
#user.manager.class=WebankXmlUserManager
user.manager.class=com.webank.wedatasphere.schedulis.common.user.SystemUserManager #用户权限管理默认类
user.manager.xml.file=conf/azkaban-users.xml #用户配置,具体配置参加下文
#cd /azkaban-web-2.5.0/conf/
#vi azkaban-users.xml
#增加管理员用户
#<azkaban-users>
# <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
# <user username="metrics" password="metrics" roles="metrics"/>
# <user username="admin" password="admin" roles="admin,metrics" />
# <role name="admin" permissions="ADMIN" />
# <role name="metrics" permissions="METRICS"/>
#</azkaban-users>
# Loader for projects
executor.global.properties=conf/global.properties # global配置文件所在位置
azkaban.project.dir=projects
database.type=mysql #数据库类型(目前只支持mysql)
mysql.port=3306 #数据库端口号
mysql.host=localhost #数据库IP地址
mysql.database=schedulis #数据库实例名
mysql.user=root #数据库用户名
mysql.password=MTIzNDU2 #数据库密码
mysql.numconnections=100 #最大连接数
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25 #最大线程数
jetty.ssl.port=8443 #Jetty SSL端口
jetty.port=8081 #Jetty端口
jetty.send.server.version=false
jetty.keystore=keystore/azkabanjetty.keystore #SSL文件名
jetty.password=hadoop #SSL文件密码
jetty.keypassword=hadoop #Jetty主密码 与 keystore文件相同
jetty.truststore=keystore/azkabanjetty.keystore #SSL文件名
jetty.trustpassword=hadoop # SSL文件密码
#jetty.hostname=[#jetty_host]
# Azkaban Executor settings
executor.port=12321 #执行服务器端口
# mail settings
mail.sender=azkaban #发送邮箱
mail.host=[#Mail_host] #发送邮箱smtp地址
#mail.user=azkaban@ptbird.cn
#mail.password=hadoop
#job.failure.email= #任务失败时发送邮件的地址
#job.success.email= #任务成功时发送邮件的地址
cache.directory=cache #缓存目录
# LDAP Connection settings
ladp.ip=172.18.42.176
ladp.port=9001
viewer.plugin.dir=G:/workspace/WeBank/Schedulis-master/azkaban-web-server/src/plugins/viewer