Schedulis 普通版环境部署

2023-11-11

## Schedulis 普通版环境部署

一)、使用前置

  1. 请基于 Linux 操作系统操作(建议 CentOS)
  2. 创建新用户 hadoop, 并为该用户赋予 root 权限,用于部署schedulis
  3. 准备好 MySQL(版本5.5+) 的客户端和服务端
  4. 请确保已安装并且正确配置 JDK(版本1.8+)
  5. 配置集群各节点之间的免密码登录
  6. 请准备一台已经正确安装和配置 Maven(版本3.3+) 和 Git 的机器,用来编译代码
  7. 安装dss所需的安装包,以及pstree(shutdown时会用到)

二)、获取项目文件并编译打包

  1. 使用 Git 下载 Schedulis 项目文件 git clone https://github.com/WeBankFinTech/Schedulis.git
  2. 下载jobtype插件的依赖和配置,链接: 链接:https://pan.baidu.com/s/1FuSBdgdTAHL1PxUXnfbLBw 提取码:0cpo;(由于文件大小较大,所以放在网盘进行管理)
  3. 进入项目文件的根目录下,将第二步中下载的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 目录,为它们单独再次编译即可,如果没有打包进来则无法使用插件。
  4. 将以下文件复制到需要部署的 Executor 或者 WebServer 服务器:
    • Executor 或者 WebServer 安装包
    • 项目文件根目录下的 bin/construct 目录中的数据库初始化脚本 hdp_wtss_deploy_script.sql
    • 项目文件根目录下的 bin 目录中的环境检测脚本 checkEnv.sh
  5. 将安装包解压到合适的安装目录下,譬如:/appcom/Install/AzkabanInstall, 并将安装的根目录 /appcom 以及其下子目录的属主转换为 hadoop 用户, 且赋予 775 权限(/appcom/Install/AzkabnaInstall/ 为默认安装目录,建议创建该路径并将其作为安装路径,可避免一些路径的修改)
  6. 在开始下一步操作之前,为需要部署的机器运行 bin 目录下的环境检测脚本 checkEnv.sh,确认基础环境已经准备完成。若是报错,请用户参考"使用前置"章节为部署节点准备好基础环境
  7. 如果自行编译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 安装包的以下文件:

  1. Executor 下的 bin/internal/internal-start-executor.sh 和 Web 下的 bin/internal/internal-start-web.sh 文件中的 KEY 值 logFile, 设为自定义日志存放路径, 以及在两个文件中关于 “Set the log4j configuration file” 中的 -Dlog4j.log.dir 也修改为自定义的日志路径
  2. 两个服务中的 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);
    }

}

五、启动

对数据库进行初始化完毕,以及修改完以上的配置文件后,就可以启动了

  1. 进入 ExecutorServer 安装包路径,注意不要进到 bin 目录下
./bin/start-exec.sh
  1. 进入 WebServer 安装包路径,注意不要进到 bin 目录下
./bin/start-web.sh

此时若得到提示信息说启动成功,则可以进入验证环节了;若是出错,请查看日志文件,并按需先查看 QA 章节

六、测试

  1. 若是单 WebServer 部署模式,则在浏览器中输入 http://webserver_ip:webserver_port
  2. 若是多 WebServer 部署模式,则在浏览器中输入 http://nginx_ip:nginx_port
  3. 在跳出的登陆界面输入默认的用户名和密码
    username : superadmin
    pwd : Abcd1234
  4. 成功登陆后,请参考用户使用手册,自己创建一个项目并上传测试运行
  5. 运行成功,恭喜 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

image-20220318190904490

image-20220318190927410

七、常见问题处理

  1. azkaban-executor启动时出现conf/global.properties (No such file or directory)的问题解决

  2. maven跳过单元测试-maven.test.skip和skipTests的区别

    解决azkaban-exec-server模块的test文件夹的测试代码报错问题,

  3. ^M问题的原因与解决

  4. 登录异常,前端调试资源路径不对

    需要修改web项目中的azkaban.properties中的web.resource.dir为绝对地址

  5. 登录异常,前端登录无响应,控制态报opendj 的jar包错误

    需要确保 opendj-core-3.0.0.jar 和 abcd-grizzly-3.0.0.jar 正确,版本不能变。

  6. 使用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 部署

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Schedulis 普通版环境部署 的相关文章

随机推荐

  • 上海链节科技:区块链正加速赋能实体经济

    眼下 区块链技术的国家层面定位规格越来越高 随着 1024 会议的召开 新基建 范围的明确以及 十四五 规划纲要的正式对外公布 区块链技术的发展与应用逐渐成熟 区块链 正在释放更大的潜能 近日 在第十三届陆家嘴论坛上 前央行行长 博鳌亚洲论
  • 若依 默认展开侧边栏菜单

    打开文件 ruoyi ui src layout components Sidebar index vue 将下面代码覆盖掉原文件中的el menu节点相关代码 参考自 http doc ruoyi vip ruoyi vue other
  • 如何用Python进行数据分析,详细流程讲解!

    1 为什么选择Python进行数据分析 Python是一门动态的 面向对象的脚本语言 同时也是一门简约 通俗易懂的编程语言 Python入门简单 代码可读性强 一段好的Python代码 阅读起来像是在读一篇外语文章 Python这种特性称为
  • PYCHARM 之 VIM 操作

    1 主题 如果你是Vim的粉丝 并且不打算使用其他类型的编辑器 那么这篇教程将会比较适合你 这里将会详细介绍如何在Pycharm IdeaVim插件的帮助下下载 安装 使用Vim 至于有关Python编程以及Vim的用法 详见officia
  • Reachability from the Capital CodeForces - 999E(tarjan模板应用 )

    题目 Berland有n个城市和m条路 每条路连接两个城市 所有路都是单向的 为了能从首都到达所有城市 需要建造的最少的新道路的数量是多少 新建的道路也是单向的 em 其实就是说从这一点出发的 强连通 联想一下之前做过的 最少添加几条边是这
  • threejs三维地图大屏项目分享

    这是最近公司的一个项目 客户的需求是基于总公司和子公司的数据 开发一个数据展示大屏 大屏两边都是一些图表展示数据 中间部分是一个三维中国地图 点击中国地图的某个省份 可以下钻到省份地图的展示 地图上 会做一些数据的标注 信息标牌 如下图所示
  • 射频中的 IM3、IIP3、OIP3、G、P1dB指标之间的关系

    噪声系数与非线性失真是描述射频系统性能优劣的两个重要指标 噪声 限制了系统所能处理的最低信号电平 非线性失真 限制了系统所能处理的最高信号电平 在非线性器件 放大器 混频器等 输入端 输入等幅度不同频率的双音信号 f1 f2 由于器件的非线
  • Wordpress入门建站教程二:搭建WP站点的准备工作

    WordPress入门第一课就简单介绍了WordPress 它是一个使用 PHP语言和 MySQL数据库开发的开源 免费的建站程序 那么搭建WordPress站点 就要求一个能够运行PHP语言的主机空间和一个MySQL数据库 也许有些朋友会
  • JVM性能调优-JVM内存区域划分

    JVM性能调优 JVM内存区域划分 1 程序计数器 线程私有 结论 程序计数器线程私有 并且分配的空间大小不会随程序执行改变 所以不存在内存溢出等异常情况 程序计数器 Program Counter Register 也有称作为PC寄存器
  • 微电网中的最优调度matlab例程,用yalmip+cplex求解器求解,以一天的运行费用最小为目标函数,可用作参考学习。

    微电网中的最优调度matlab例程 用yalmip cplex求解器求解 以一天的运行费用最小为目标函数 可用作参考学习 9515644736113608浪迹天涯
  • 边缘计算——简单易懂的PPT+文字介绍

    边缘计算是续云计算 物联网 5G时代之后的有一个新生代宠儿 这里我分享一个彩蛋 昨天我一个同事理解边缘计算是一种识别算法 觉得通过识别图像数据中的实体的边缘轮廓 得出该实体所表现出来的动作 比如扒窃动作识别 打架行为识别等 其实不然 边缘计
  • Shell编程条件语句

    目录 一 条件测试 1 test命令 2 条件测试 常用的测试操作符 3 字符串比较 常用选项 4 逻辑测试 二 if语句 1 if单分支语句 2 if双分支语句 3 if多分支语句 学生考试成绩判断 圆的面积计算案例 三 case语句 1
  • 复变函数与积分变换系列(一) - 复变函数与解析函数

    复变函数与解析函数 Author Benjamin142857 TOC 0 几个基本概念 实虚部 P l u r a l
  • 关于代码评审

    代码评审实际是编写代码的开发人员在被复查 它是最小化缺陷的有效方法 无论公司实行代码评审的额外动机是什么 代码评审都是工业化的最优方法 一 代码评审目的 1 确保要发布质量可靠的代码 代码评审能非常有效地发现所有类型的错误 包括那些由于不正
  • Java基础三

    表达式自动提升类型 在程序中出现直接写出来的数字 如果是整数默认类型为int 如果为小数默认类型为double 一个表达式中包含多种数据类型时 结果的数据类型会自动提升 规则如下 byte short char 自动提升为int 整个表达式
  • selenium 二维码登陆解决方案

    selenium与api 的结合 获取到 qr id 然后api 带这个qr id 调用 然后就ok了 实现方式看代码 coding utf 8 auth cy create 11 27 18 update from time import
  • 告别if else!试试这款轻量级流程引擎吧,跟SpringBoot绝配!

    之前同事用了一款轻量级的规则引擎脚本AviatorScript 我也跟着用了起来 真的挺香 能少写很多代码 这期就给大家介绍一下这款规则引擎 简介 AviatorScript是一门高性能 轻量级寄宿于 JVM 包括 Android 平台 之
  • Mysql实现局域网访问

    Mysql实现局域网访问 文章目录 Mysql实现局域网访问 找到MYSQL数据库中的User表 找到自己账号的那条数据 将Localhost 改为 号 代表所有ip都可以访问 Localhost代表只有自己可以访问 这样就实现了局域网访问
  • 详解Mysql主键

    主键 对于关系表 有个很重要的约束 就是任意两条记录不能重复 不能重复不是指两条记录不完全相同 而是指能够通过某个字段唯一区分出不同的记录 这个字段被称为主键 对主键的要求 最关键的一点是 记录一旦插入到表中 主键最好不要再修改 因为主键是
  • Schedulis 普通版环境部署

    Schedulis 普通版环境部署 一 使用前置 请基于 Linux 操作系统操作 建议 CentOS 创建新用户 hadoop 并为该用户赋予 root 权限 用于部署schedulis 准备好 MySQL 版本5 5 的客户端和服务端