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

引言

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

file

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

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

架构设计图

Apache DolphinScheduler 通常采用和 Hadoop 集群混合部署的方式部署。根据不同的调度工作负载的情况可以选择在 Hadoop 集群中 HDFS 的多台 Data Node 上进行部署。本博客探讨的数仓计算引擎 EMR Serverless 和 DolphinScheduler 是解耦部署的。在 3 个 EC2 实例上以集群模式部署 Apache DolphinScheduler 对 EMR Serverless 的 Job 进行编排。

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

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

DS集成和作业编排

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

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.properties 文件。文件中需要修改的部分如下所示:

#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-serverworker-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 脚本时(EMR 无服务器作业需要通过 shell 脚本或 python 脚本编排,而不是简单的 Hive 命令),DAG 编排器可以启动作业,但无法获取实时数据作业的状态,因此无法进一步执行工作流程。由于本例中的 DAG 非常复杂,因此修改 DAG 是不可行的,而是遵循直接迁移策略。

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

  • Application 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" ]; docase $state inRUNNING)state=$(job_state);;SCHEDULED)state=$(job_state);;PENDING)state=$(job_state);;FAILED)break;;esac
doneif [ $state == "FAILED" ]
thenfalse
elsetrue
fi

DolphinScheduler 版本推荐

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

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

DolphinScheduler 安装指南

针对 DolphinScheduler 的部署安装已经有 blog 做了不错的总结,这里不再赘述。

LOB 粒度资源消费分析

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

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

图 2 Cost Allocation Tags 在亚马逊云科技 Console 的显示示意

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

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

图 3 在 Billing 和 Cost Management Console 上按 Cost Center 的 Tag 显示资源消费情况

总结

Apache DolphinScheduler 作为大数据作业调度工具在华人开发者中非常流行。然而,其原生部署环境在 hadoop 上的现状和亚马逊云科技持续创新的新一代 Serverless 架构的产品服务之间存在一些 gap。本文结合实战总结了填补这些 gap 的方法,并探讨了通过打 Tag 的方式实现 LOB 粒度资源消费数据统计及可视化的方法。

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

本文由 白鲸开源科技 提供发布支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18 分页:介绍

目录 简单例子 页表存在哪里 列表中究竟有什么 分页&#xff1a;也很慢 内存追踪 小结 在解决大多数空间管理问题上面&#xff0c;操作系统有两种方法&#xff1a; 第一种就是将空间分割成不同长度的分片&#xff0c;类似于虚拟内存管理中的分段&#xff0c;但是这个方法…

电商平台自动回复脚本制作的流程!

随着电子商务的快速发展&#xff0c;电商平台在日常运营中面临着大量的客户咨询和服务需求&#xff0c;为了提高客户服务效率和质量&#xff0c;许多电商平台采用了自动回复脚本&#xff0c;以快速响应客户问题并提供准确的信息。 本文将详细介绍电商平台自动回复脚本制作的流…

证券期货市场失信记录代表什么?

证券期货市场失信记录是指参与证券期货市场的个人或机构在交易、信息披露、内部控制等方面存在违法违规失信行为的记录。 这些失信行为包括但不限于未履行承诺、拒不履行已达成的纠纷调解协议、未按期兑付本息、未按约定履行担保责任、实施犯罪行为&#xff0c;以及在融资融券…

SpringBoot MybatisPlus 配置动态表名多数据源

需求 业务场景&#xff1a; 日志、交易流水表或者其他数据量大的表&#xff0c;通过日期进行了水平分表&#xff0c;需要通过日期参数&#xff0c;动态的查询数据。 实现思路&#xff1a;利用MybatisPlus的动态表名插件DynamicTableNameInnerInterceptor ,实现Sql执行时&#…

Matten:视频生成与Mamba-Attention

Matten:视频生成与Mamba-Attention 摘要IntroductionRelated WorkMethodology Matten: Video Generation with Mamba-Attention 摘要 在本文中&#xff0c;作者介绍了Matten&#xff0c;一种具有Mamba-Attention架构的尖端潜在扩散模型&#xff0c;用于视频生成。在极小的计算…

带EXCEL附件邮件发送相关代码

1.查看生成的邮件 2.1 非面向对象的方式&#xff08;demo直接copy即可&#xff09; ​ REPORT Z12. DATA: IT_DOCUMENT_DATA TYPE SODOCCHGI1,IT_CONTENT_TEXT TYPE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE,IT_PACKING_LIST TYPE TABLE OF SOPCKLSTI1 WITH HEADER LIN…

《他强由他强,清风拂山岗;他横由他横,明月照大江》之三

常见的设计模式 1.策略模式 使用场景 通俗来说,策略模式就像是让你有一个策略的工具箱,在不同的情况下选择最合适的策略来解决问题。 使用场景通常包括以下一些: 多重条件判断语句: 当一个操作包含大量的条件判断语句,并且这些分支具有不同的行为时,可以使用策略模式来…

docker runc升级1.1.12

上传runc-1.1.12制品至中控机 874e970eaa932a97de9888344ae08f24 runc.arm64 将所有节点的runc文件备份 所有节点(包括master+node) vim host [all] 10.1.0.183 ansible_password=Bigdata@Ksyun123 ansible_user=root ansible_port=22 10.1.0.249 ansible_password=Bigdata…

关于 vs2019 c++ 20规范,STL 库提供的标准分配器 alloctor 及其 traits 及涉及分配器交换的全局函数 _Pocs

(1) 我们写 c 代码&#xff0c;使用 STL 库中的模板&#xff0c;很少自己写对象的分配器。用 STL 中的分配器也够用。研究 STL 中的分配器也可以为咱们自己写分配器提供参考。 咱们会遇到这样的场景&#xff0c;例如交换两个容器对象&#xff1a; list a ,b ; a .swap (b) ; 这…

自建XXL-JOB调度平台教程

一、XXL-JOB简介 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。它支持通过Web界面进行管理调度任务&#xff0c;包括任务的增删改查、执行状态监控等。同时&#xff0c;XXL-JOB提供了Java、Spring Boot等多种接入方式&am…

C++中向量的操作vector

在C中&#xff0c;std::vector 是一个非常有用的动态数组容器&#xff0c;它允许你在运行时动态添加或删除元素&#xff0c;并且提供了许多方法来操作这些元素。下面是一些常见的 std::vector 操作&#xff1a; 创建一个 vector&#xff1a; #include <vector> std::vec…

像编排容器一样编排进程

背景 当前微服务架构大行其道&#xff0c;一个业务应用往往是由多个独立的服务构成&#xff0c;通过K8S&#xff0c;Docker Compose等容器编排工具&#xff0c;以及Jekins等DevOPS工具&#xff0c;我们也能够很方便的将服务发布到容器&#xff0c;并通过配置和编排轻松部署到线…

std::async、std::future

async和future std::async和std::thread都是C11标准库中实现多线程的类。async是一种异步执行任务的方式&#xff0c;它可以在后台线程中执行一个函数或者函数对象&#xff0c;并返回一个std::future对象&#xff0c;可以用来获取函数的返回值或者异常信息。它允许线程返回fut…

40道 Nginx 高频面试题

Nginx 是一款轻量级的 Web 服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。那么关于 Nginx 的核心面试题有哪些呢&#xff1f;今天给大家整理了40道Nginx 高频面试题&#xff0c;最近…

麒麟kylin-v10系统,虚拟机kvm的使用

kvm的使用 虚拟机新建 点击选择对应的iso文件 选择相应的系统 &#xff08;注意&#xff0c;如果这里没有相应的系统比如&#xff1a;windows&#xff0c;可以直接选择Generic default这是通用默认的意思&#xff09; 选择cpu 完成即可 等待安装完毕 网络设置-ssh连接 虚拟…

Electron+Vue+pyinstaller服务打包

electron环境安装略 1. electron的入口文件配置test.js, 需要在package.json 配置文件中指定main: src/test.js const { app, BrowserWindow } require(electron)const createWindow () > {const win new BrowserWindow({width: 800,height: 600})// win.loadFile(inde…

实体类和对象之间的关系是什么

实体类&#xff08;Entity Class&#xff09;和对象&#xff08;Object&#xff09;在面向对象编程&#xff08;OOP, Object-Oriented Programming&#xff09;和ORM&#xff08;Object-Relational Mapping&#xff09;框架如Hibernate中扮演着重要的角色。以下是它们之间的关系…

守好参数之门:防止 IllegalArgumentException 入侵的七大策略

1. 原因分析 java.lang.IllegalArgumentException 是 Java 中的一个运行时异常&#xff0c;它通常表示向方法传递了一个不合法或不适当的参数。这种异常不会由 Java 虚拟机自动抛出&#xff0c;而是由程序员在编写代码时通过显式地调用 throw 语句来抛出&#xff0c;或者在某些…

如何利用python选股

使用Python进行选股是一个复杂但有趣的过程,它结合了数据分析、统计建模和机器学习等多个领域的知识。 由于篇幅限制,我将提供一个概述性的框架和关键步骤,并尽量保持内容的精炼和深入。 一、引言 背景介绍:简述股市投资的重要性和复杂性,以及利用Python进行量化选股的优…

红龙工业设备制造有限公司亮相2024杭州数字物流技术设备展

参展企业介绍 温州红龙工业设备制造有限公司成立于2015年11月。是中国先进的工业皮带设备研发制造和工业皮带整体解决方案运营服务商&#xff0c;现主营皮带接头机、皮带热压机、皮带接驳机、皮带打齿机、输送带打齿机、输送带分层级、输送带导条机、输送带裁切机、高频机等工业…