DolphinScheduler二次开发

1.目的:将ds的数据库连接管理中心的数据库连接信息同步生成脚本同步到shell脚本中。

2.分析:

在DataSource创建的基础上 同时调用生成脚本并保存

创建脚本接口分析

url : http://192.168.18.51:12345/dolphinscheduler/resources/online-create

首先到controller层进行定位 接口传参如下:

type: FILE
pid: 81
currentDir: /bigdata/etl/common
fileName: testDataSource
suffix: sh
description: 测试dataSource
content: #!/bin/bash

3: 源码追踪

追踪到serviceImpl层

onlineCreateResource

// ResourceController 
/***
*content 脚本内容 
*loginUser 登录用户
* type udf or file 
*/
return resourceService.onlineCreateResource(loginUser, type, fileName, fileSuffix, description, content, pid, currentDir);

跟进到 ResourcesServiceImple 保存记录到mysql 并且将内容生成文件上传到hdfs

// save data
Date now = new Date();
Resource resource = new Resource(pid, name, fullName, false, desc, name, loginUser.getId(), type, content.getBytes().length, now, now);

resourcesMapper.insert(resource);
updateParentResourceSize(resource, resource.getSize());

putMsg(result, Status.SUCCESS);
Map<String, Object> resultMap = new HashMap<>();
for (Map.Entry<Object, Object> entry : new BeanMap(resource).entrySet()) {
    if (!Constants.CLASS.equalsIgnoreCase(entry.getKey().toString())) {
        resultMap.put(entry.getKey().toString(), entry.getValue());
    }
}
result.setData(resultMap);
// tenantCode 租户编码 如hdfs 是保存用户组信息
String tenantCode = tenantMapper.queryById(loginUser.getTenantId()).getTenantCode();

result = uploadContentToStorage(fullName, tenantCode, content);
if (!result.getCode().equals(Status.SUCCESS.getCode())) {
    throw new ServiceException(result.getMsg());
}
return result;

在DataSourceServiceImpl 中添加

在dataSource实体insert成功后 创建资源目录

调用afterCreateDataSource方法

实现如下:

/**
 * @author LBQ
 * @date 2022-06-27
 * @description: 描述: 将数据源中心与资源中心连接起来
 */
private void afterCreateDataSource(User loginUser) {

   //TODO 修改 在保存dataSource后同时创建生成 shell 脚本并且保存
   // TODO  先进行resource查询 查询出父资源ID 不存在则创建
   // TODO 有可能需要递归创建 使用/datasource目录
   // resourcesService.createDirectory()
   Result<Object> queryResource = resourcesService.queryResource("/datasource", null, ResourceType.FILE);
   int pid = 0;
   // 该目录不存在 根目录id -1
   if (queryResource.getCode() != 0) {
      logger.info("目录/datasource不存在,现在进行目录创建操作!");
      Result<Object> createResult = resourcesService.createDirectory(loginUser, "/datasource", "资源中心连接信息", ResourceType.FILE, -1, "/");
      // 创建目录失败
      if (createResult.getCode() != 0) {
         logger.error("创建/datasource目录失败,请检查当前用户:{}是否有权限进行目录操作!", loginUser.getUserName());
      }
   } else {
      Resource resource = (Resource) queryResource.getData();
      pid = resource.getPid();
   }
   ResourceType resourceType = ResourceType.FILE;
   String fileName = "DATA_SOURCE";
   String fileSuffix = "sh";
   String desc = "资源中心连接信息";
   String content = "#!/bin/bash";
   String currentDir = "/datasource";
   // pid 怎么获取
   if (pid != 0) {
      resourcesService.onlineCreateResource(loginUser, resourceType, fileName, fileSuffix, desc, content, pid, currentDir);
   }else{
       logger.warn("无法创建资源目录及资源文件,无法获取pid信息!");
       }
}

 同理后续需要对 update delete 等操作做同步资源文件操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Apache DolphinScheduler是一个新一代分布式大数据工作流任务调度系统,致力于“解决大数据任务之间错综复杂的依赖关系,整个数据处理开箱即用”。它以 DAG(有向无环图) 的方式将任务连接起来,可实时监控任务的运行状态,同时支持重试、从指定节点恢复失败、暂停及 Kill任务等操作。目前已经有像IBM、腾讯、美团、360等400多家公司生产上使用。 调度系统现在市面上的调度系统那么多,比如老牌的Airflow, Oozie,Kettle,xxl-job ,Spring Batch等等, 为什么要选DolphinSchedulerDolphinScheduler 的定位是大数据工作流调度。通过把大数据和工作流做了重点标注. 从而可以知道DolphinScheduler的定位是针对于大数据体系。DolphinScheduler 发展很快 很多公司调度都切换到了DolphinScheduler,掌握DolphinScheduler调度使用势在必行,抓住新技术机遇,为跳巢涨薪做好准备。 优秀的框架都是有大师级别的人写出来的,包含了很多设计思想和技术。DolphinScheduler也不例外,它是一个非常优秀的框架,用到很多技术和设计思想,本课程会带大家深入DolphinScheduler框架源码,包括设计的思想和技术都会讲解,DolphinScheduler源码很多,会按照模块进行讲解,学习完课程后,不仅可以熟悉DolphinScheduler使用,而且可以掌握很多优秀的设计思想和技术,给自己的技术带来很大提升,为跳巢涨薪做好准备。
DolphinScheduler是一款开源的分布式任务调度系统,可以实现自动化地调度和执行各种任务。如果需要对DolphinScheduler进行二次开发,并进行打包,需要按照以下步骤进行: 1. 克隆DolphinScheduler的源代码:在Github上找到DolphinScheduler的仓库并将其克隆到本地。 2. 将开发代码添加到源代码中:根据自己的需求,在克隆的源代码中添加新的功能或修改现有功能。可以根据实际情况修改调度器、执行器、调度API等。 3. 配置、编译和打包:根据二次开发所需的配置信息,修改`conf`目录下的相关配置文件。使用maven对代码进行编译,可以运行`mvn clean package -Dmaven.test.skip=true`命令进行打包,该命令会在`target`目录下生成打包结果。 4. 部署和运行:将打包的结果部署到服务器上,包括调度服务器和执行器节点。根据DolphinScheduler的部署文档将相关的配置文件、依赖库、打包结果等拷贝到相应的位置。运行DolphinScheduler的启动脚本以启动调度服务器和执行器节点。 5. 测试和验证:根据自己的需求进行相应的测试和验证,确保二次开发的功能能够正常运行。进行功能测试、性能测试、兼容性测试等,确保系统的稳定性和可靠性。 需要注意的是,二次开发需要对DolphinScheduler的源代码有一定的了解和熟悉。在进行二次开发之前,可以先阅读官方文档、源代码以及相关的社区讨论,这样能更好地理解整个系统的架构和设计理念,更方便进行二次开发和定制。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值