Azkaban适配gaussdb任务心得
背景介绍
开源for Huawei(参考:https://developer.huaweicloud.com/programs/opensource/contributing/) 通过和公司、高校、社区的开发者合作,完成鲲鹏、昇腾、欧拉、鸿蒙、高斯、云服务等与开源软件的适配开发,帮助繁荣Huawei的基础生态,同时让开源软件能够更加简单、高效的运行于华为云上。
开始之前,开发者可以下载 开源for Huawei Wiki(参考:https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/overview) 了解详细的开发步骤,技术准备,以及开发过程需要的各种资源。
1 适配思路
- azkaban作为一个强大的任务调度平台,本身支持MySQL、H2存储任务信息,本次功能开发 将gaussdb作为azkaban存储任务信息的数据库;
2. 采用java设计模式中策略模式 根据配置文件中传入的database.type 去选择不同的数据源 从而将mysql、h2、gaussdb 三种数据库 方便用户更好的选择 。
3. 本次适配使用华为云官网 下载JDBC或ODBC驱动_数据仓库服务 GaussDB(DWS)_华为云 gsjdbc4.jar 驱动 与PostgreSQL保持兼容,其中类名、类结构与PostgreSQL驱动完全一致
2 适配准备
准备一台弹性云服务器ECS,用于鲲鹏EulerOS环境适配GaussDB测试 以及用于测试使用的Gaussdb实例。
2.1 ECS配置
鲲鹏:
产品名称 |
CPU架构 |
实例类型 |
公共镜像 |
镜像版本 |
弹性云服务器 |
鲲鹏计算 |
鲲鹏通用计算增强型 |
Huawei Cloud EulerOS |
Huawei Cloud EulerOS 2.0标准版 64位 ARM版(10GiB) |
GaussDB:
产品名称 |
产品类型 |
数据库引擎版本 |
内核引擎版本 |
实例类型 |
部署形态 |
云数据库GaussDB |
基础版 |
V2.0-8.* |
505.1.* |
集中式 |
1主2备 |
3 Demo开发
-
环境中安装gradle5.0版本和node8.10版本 jdk的配置和正常使用
- demo中使用多任务编排进行任务运行 以及任务执行流程记录到gaussdb中
- 确保任务正常执行 任务信息记录gaussdb正常
- 本次适配 采用本地打包 将tar包从本地上传到服务器 运行方式去部署项目
4 适配过程中的问题
- 本地打包的时候 遇到az卡板和本地版本不兼容问题
解决方法:查看gradle/wrapper/gradle-wrapper.properties 中 distributionUrl 与本地保持一致 或者再idea上面选择本地的gradle
- azkaban打包涉及前端node 打包时发现 并没有采用本地已安装的node8.10.0 而是程序自己下载 而且经常超时失败
解决方法:在azkaban-web-server 中的build.gradle 文件中 node选项 download 改为false
- azkaban启动 先启动Executor 再启动web程序 发现启动web程序之后报错 找不到执行器
ERROR [ExecutorManager] [Azkaban] Rolling back executor assignment for execution
通过翻看 Azkaban Executor Server 源码,发现 Executor 提供了 rest 接口,来手动激活 Executor. 不自动激活 Executor 官方解释如下
We don't update prior to web-server start.
Let me introduce how we do a regular Executor deployment. Both old webserver and old executor(3.a) are up initially, and old executor is running jobs (we can not interrupt it). Executor Deployment starts:
install new Executor (3.b) on our box without activating.
Run job tests, which targets 3.b and make sure 3.b is working.
Activate 3.b, and deactivate 3.a. Even though 3.a is deactivated, jobs still keep runnig there.
Deployment completes.
We would better run tests against new executor before activating it. Is it a bit clear now?
解决方法:数据表中 exectors表中的信息 并且再服务器执行 curl http://${executorHost}:${executorPort}/executor?action=activate 就可以正常使用了 localhost为服务器ip
- 点赞
- 收藏
- 关注作者
评论(0)