暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

构建无服务器数仓(二)Apache DolphinScheduler 集成以及 LOB 粒度资源消费分析

海豚调度 2024-06-14
142

引言

在数据驱动的世界中,企业正在寻求可靠且高性能的解决方案来管理其不断增长的数据需求。本系列博客从一个重视数据安全和合规性的B2C金融科技客户的角度来讨论云上云下面部署的情况下如何利用亚马逊混合科技云原生服务、开源社区产品以及第三方工具构建无服务器数据仓库的解耦方法。


Apache DolphinScheduler 是一种与 EMR Serverless 解耦部署的高效多功能工作流调度程序,可确保可靠的数据编排和处理。对于金融科技客户,EMR Serverless 提供业务线(LOB)级别的精细资源消耗分析,从而实现精确的监控和优化成本。这一功能在金融领域尤其有价值。因为在该领域,运营敏捷性和效率成本至关重要。

本文博客探讨 Apache DolphinScheduler 与 EMR Serverless 的集成 LOB 粒度的资源以及消耗分析方案。

上篇文章传送门:利用Amazon EMR Serverless、Athena与Dolphinscheduler构建云上云下数据同步方案

架构设计图

Apache DolphinScheduler 通常采用和 Hadoop 集群部署混合的方式部署。根据不同的调度工作负载的情况可以选择在 Hadoop 集群中 HDFS 的多台节点上进行部署。

本数据博客探讨数仓计算引擎 EMR Serverless 和 DolphinScheduler 是在3个EC2实例上以集群模式部署Apache DolphinScheduler对EMR Serverless的Job进行编排。

DolphinScheduler 集群另外编排的 EMR 作业解耦配置,实现了整个系统的高可靠性:一个(EMR 作业或调度器)发生故障不会影响另一个(调度器或 EMR 作业)。

图1:解决方案系统架构图

DS集成和作业编排

Apache DolphinScheduler 是现代数据编排平台。以低代码创建快速高性能工作流程。它还提供了强大的用户界面,致力于解决数据管道中复杂的任务依赖,并提供开箱即用的各种类型的关系Apache DolphinScheduler 由 WhaleOps 开发和,并以 WhaleStudio 的产品名称上架亚马逊维护云科技市场。

Apache DolphinScheduler 集群集成 Hadoop。从两点可以具体看出:第一,DolphinScheduler 集群模式默认建议部署在 Hadoop 集群上(通常在数据节点上);第二,上传到 DolphinScheduler 资源管理器的 HQL 脚本默认存储在HDFS上,并且可以通过本机的hive shell命令直接编译,如下图:

Hive -f example.sql

另外,对于这个具体案例,编排 DAG 相当复杂,每个 DAG 包含 300 个多个作业。几乎所有作业都是存储在资源管理器中的 HQL 脚本。

因此,只有成功完成下面队列的任务,才能实现 DolphinScheduler 和 EMR Serverless 之间的无缝集成。

步骤1:将DolphinScheduler资源中心的存储层从HDFS切换到S3

分别编辑文件夹/home/dolphinscheduler/dolphinscheduler/api-server/conf
和文件夹/home/dolphinscheduler/dolphinscheduler/worker-server/conf
下的common.propertie
文件。文件中需要修改的部分如下所示:

#resource storage type: HDFS, S3, OSS, NONE
#resource.storage.type=NONE
resource.storage.type=S3
# resource store on HDFS/S3 path, resource file will store to this base path, self configuration, please make sure the directory exists on hdfs and have read write permissions. "/dolphinscheduler" is recommended
resource.storage.upload.base.path=/dolphinscheduler

# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This configuration is required
resource.aws.access.key.id=AKIA************
# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This configuration is required
resource.aws.secret.access.key=lAm8R2TQzt*************
# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This configuration is required
resource.aws.region=us-east-1
# The name of the bucket. You need to create them by yourself. Otherwise, the system cannot start. All buckets in Amazon S3 share a single namespace; ensure the bucket is given a unique name.
resource.aws.s3.bucket.name=<target bucket name>
# You need to set this parameter when private cloud s3. If S3 uses public cloud, you only need to set resource.aws.region or set to the endpoint of a public cloud such as S3.cn-north-1.amazonaws.com.cn
resource.aws.s3.endpoint=s3.us-east-1.amazonaws.com

编辑并保存这两个文件后,通过在文件夹路径/home/dolphinscheduler/dolphinscheduler/bin/
下执行以下命令重新启动api-server
worker-server

bash ./binstart-all.sh
bash ./bin/stop-all.sh
bash ./bin/status-all.sh

存储层切换到S3是否成功可以通过DolphinScheduler资源中心加载脚本来检查,检查是否可以在相关的S3文件夹中找到该文件然后。

步骤2:确保通过S3直接上传的作业脚本可以通过DolphinScheduler资源中心控制台找到并操作

完成第一步,可以实现从 DolphinScheduler 资源中心脚本,以及这些脚本在 S3 中。但是,在实战中,客户需要将所有脚本直接迁移到 S3。在 S3 中的脚本脚本应通过 DolphinScheduler 资源中心控制台创建和操作。为了实现这一点,需要通过插入所有脚本的元数据来进一步修改资源中心名为“t_ds_resources”的元数据表。插入命令如下:

insert into t_ds_resources values(4, '<target_script_name>''wordcount.java','',1,0,2100,'2023-11-13 10:46:44''2023-10-31 10:46:44', 2, '<target_script_name>',0);

步骤3:让DolphinScheduler DAG编排器了解作业的状态(FAILED/SUCCESS/SCHEDULED/PENDING),方便DAG能够根据作业的具体状态前进或采取相关操作

如上所述,DolphinScheduler 已与 Hadoop 生态系统直接集成,HQL 脚本可以由 DolphinScheduler DAG 编排器通过 Hive -f xxx.sql 命令编排。因此,当脚本改为 shell 脚本或 python 脚本时(EM 无服务器作业需要通过) ) shell 脚本或 python 脚本编排,不是简单的 Hive 命令),DAG 编排器可以启动作业,但无法获取实时数据作业的状态,因此无法进一步执行工作流程。由于实例中的 DAG 本非常复杂,修改 DAG是不支持的,但是遵循直接迁移策略。

活动推荐

近期,Apache DolphinScheduler联合亚马逊云科技准备举办一场联合Meetup,本活动旨在基于推广大数据调度技术在AWS的构建,结合云原生服务与开源组件的架构设计更灵活的实现数据业务价值,欢迎感兴趣的同学提前预约!





因此,编写了以下脚本来实现作业状态捕获和处理。

  • 应用程序ID列表持久化
var=$(cat applicationlist.txt|grep appid1)
applicationId=${var#* }
echo $applicationId

通过 linux shell 启用 ds 步骤状态自动检查

app_state
{
  response2=$(aws emr-serverless get-application --application-id $applicationId)
  application=$(echo $response1 | jq -r '.application')
  state=$(echo $application | jq -r '.state')
  echo $state
}

job_state
{
  response4=$(aws emr-serverless get-job-run --application-id $applicationId --job-run-id $JOB_RUN_ID)
  jobRun=$(echo $response4 | jq -r '.jobRun')
  JOB_RUN_ID=$(echo $jobRun | jq -r '.jobRunId')
  JOB_STATE=$(echo $jobRun | jq -r '.state')
  echo $JOB_STATE
}

state=$(job_state)

while [ $state != "SUCCESS" ]; do
  case $state in
    RUNNING)
         state=$(job_state)
         ;;
    SCHEDULED)
         state=$(job_state)
         ;;
    PENDING)
         state=$(job_state)
         ;;
    FAILED)
         break
         ;;
   esac
done

if [ $state == "FAILED" ]
then
  false
else
  true
fi

DolphinScheduler版本推荐

实战发现不是最高版本的DolphinScheduler是最好的,截止作者写这篇文章,最高的版本是3.2.1,使用后面几个版本会比较安全。

本案例分别测试了3.1.4、3.1.5 、3.1.8,其中3.1.4最稳定,仅供参考。

DolphinScheduler 安装指南

针对DolphinScheduler的配置安装已经有博客做了不错的总结,。这里不再赘述。

LOB粒度资源消费分析

如前所述,企业客户,尤其是金融科技客户,已经建立了内部人民币机制的需求。亚马逊云科技成本分配标记机制完美满足了这一要求。所有实例,无论是配置的还是无服务器的,都可以作为标签附加。可以通过Web控制台或亚马逊云科技的CLI将标签附加到实例。

标记后,您可以在亚马逊云科技发票/成本分配标签控制台中激活标签,如下图所示。

图2 亚马逊云科技控制台的成本标签分配显示示意图

激活标签后,标签的状态立即更改为“活动”。需要注意的是,通过发票和成本管理/成本浏览器控制台可视化标签的财务数据几乎需要一天的时间。

如图3所示,在右侧的标签下拉框CostCenter之后,中间的柱状图显示了打了CostCenter这个标签的不同价值值的服务消费情况。这里,价值的价值设计成需要了解资源消费的情况LOB的名称可以在LOB粒度上实现对资源消费情况进行统计以及可视化测量。

图 3 在计时器和成本管理控制台上按成本中心的标签显示资源消费情况

总结

Apache DolphinScheduler作为大数据作业调度工具在华人开发者中非常流行。然而,其原有的部署环境在hadoop上的现状与亚马逊云科技持续创新的新一代无服务器架构的产品服务之间存在一些差距。

论文结合实战总结了弥补这些差距的方法,并探讨了通过打标签的方式实现LOB粒度资源消耗数据及可视化的方法。

此前,白鲸开源已将旗下产品WhaleStudio(基于Apahce DolphinScheduler及SeaTunnel开发的商业版本)上线亚马逊云科技平台,感兴趣的朋友可访问订阅:https://aws.amazon.com/marketplace/pp/prodview-563cegc47oxwm?sr=0-1&ref_=beagle&applicationId=AWSMPContessa

亚马逊云科技为客户提供的云平台及服务在安全和合规方面积累了非常丰富的认证,包括平台整体认证、适配所在国家/地区监管法规的认证、行业认证等等;同时亚马逊云科技也开发了非常丰富的产品服务帮助客户应对数据安全合规角度的各种需求。


文章来源于网络:https://aws.amazon.com/cn/blogs/china/build-a-serverless-data-warehouse-in-a-hybrid-deployment-environment-part-two/


<🐬🐬 >

推荐阅读

用户实践案例
奇富科技  蜀海供应链 联通数科 拈花云科
蔚来汽车 长城汽车 集度 长安汽车
思科网讯 生鲜电商 联通医疗 联想
新网银行 消费金融  腾讯音乐 自如
有赞 伊利 当贝大数据
联想 传智教育 Bigo
通信行业  作业帮 太美医疗


迁移实践
Azkaban   Ooize   
Airflow (有赞案例) Air2phin(迁移工具)
Airflow迁移实践
Apache DolphinScheduler 3.0.0 升级到 3.1.8 教程


新手入门
选择Apache DolphinScheduler的10个理由
Apache DolphinScheduler 3.1.8 保姆级教程【安装、介绍、项目运用、邮箱预警设置】轻松拿捏!
Apache DolphinScheduler 如何实现自动化打包+单机/集群部署?
Apache DolphinScheduler-3.1.3 版本安装部署详细教程
Apache DolphinScheduler 在大数据环境中的应用与调优

< 🐬🐬 >
参与社区

参与Apache DolphinScheduler 社区有非常多的参与贡献的方式,包括:


贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689

非新手问题列表:https://github.com/apache/dolphinscheduler/issues?
q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22

如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的!

文章转载自海豚调度,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论