构建无服务器数仓(二)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" ]; 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 的部署安装已经有 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/

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用OpenShift的ImageStream部署临时版本

公司是港企&#xff0c;项目都部署在OpenShift上统一管理&#xff0c;因为运行环境为香港网络(外网)&#xff0c;配置、中间件等大陆无法直接访问联通。因此在大陆开发时&#xff0c;测试是个很大的问题。为了避免往Git上频繁提交未确定可用的版本&#xff0c;选择用利用OpenSh…

java-函数式编程-jdk

背景 函数式接口很简单&#xff0c;但是不是每一个函数式接口都需要我们自己来写jdk 根据 有无参数&#xff0c;有无返回值&#xff0c;参数的个数和类型&#xff0c;返回值的类型 提前定义了一些通用的函数式接口 IntPredicate 参数&#xff1a;有一个&#xff0c;类型是int类…

基于CCS5.5的双音多频(DTMF)信号检测仿真实验(①检测型音频文件②输入生成音频并检测)

DTMF的优点 我们知道,DTMF根本上仍然是频谱分析,基础还是DFT,但DFT通常需要对一整段数据做变换,而DTMF不同,每输入一个采样点就计算一次,更有利于硬件实现。 基于CCS的双音多频(DTMF)信号检测原理 公式详细推导 详细的公式推导在下面这篇博客中已经进行了详细的描述,…

哈希算法在区块链中的应用

哈希算法是区块链技术的核心组件之一&#xff0c;它确保了区块链数据的不可篡改性和安全性。在本文中&#xff0c;我们将探讨哈希算法的基本原理&#xff0c;以及它在区块链中的具体应用。 哈希算法的基本原理 哈希算法是一种数学函数&#xff0c;它接收输入&#xff08;或“消…

Shell编程之循环语句

目录 1.for循环语句&#xff08;遍历循环&#xff09; 1.1 for语句的结构 1.2 for语句的执行流程 1.3 for语句应用示例 1.4 echo命令参数 2.while循环语句 2.1 while语句应用示例 2.2 通过while循环读取行内容 3.until 4.双重循环 4.1 双重循环案例 4.2 循环的退出 …

达梦数据库连接失败:Connect Failure! “Encryption module failed to load“

初次安装达梦数据库&#xff1a;V7 QT5.12.12版本开发调用数据库&#xff0c;最基础的原型调用&#xff1a; { //执行查询语句或则执行sql语句 QSqlDatabase qDb; QSqlDatabase db QSqlDatabase::addDatabase("QDM"); db.setHostName("192.168.2…

CCF CSP 认证考试历年真题满分题解(所有前四题)

CCF CSP 认证考试历年真题满分题解&#xff08;所有前四题&#xff09; 前言 原本刷题的动机仅仅是为研究生复试的机试环节做准备&#xff0c;我通过刷csp的真题来锻炼自己&#xff0c;因为上次的机试题目全部是csp真题&#xff0c;最后也是顺利上岸。空闲之际&#xff0c;我…

圆柱齿轮的旋向如何判断?

上期出了个题&#xff0c;给了两个内齿轮&#xff0c;请大家来判断他们的旋向&#xff0c;看到了有不少小伙伴评论给出了自己的答案&#xff0c;正确和错误差不多各半吧&#xff0c;错的占比要大一些。这期咱们就好好聊一聊这个问题。 外齿轮的旋向大家貌似判断都没什么问题&a…

Raspberry Pi Connect 官方树莓派远程连接新方式

系列文章目录 前言 2024 年 5 月 7 日 戈登-霍林沃思 今天&#xff0c;我们很高兴地宣布 Raspberry Pi Connect 测试版发布&#xff1a;这是一种安全、易用的方法&#xff0c;只需使用网络浏览器&#xff0c;就能从地球上的任何地方远程访问您的 Raspberry Pi。 远程访问 Rasp…

理解JavaScript递归

什么是递归 程序调用自身的编程技巧称为递归&#xff08;recursion&#xff09; 递归的基本思想是将一个复杂的问题分解成更小、更易于管理的子问题&#xff0c;这些子问题与原始问题相似&#xff0c;但规模更小。 递归的要素 基本情况&#xff08;Base Case&#xff09;&…

BIERv6测试解析— 如何使用仪表进行转发性能测试

什么是BIERv6 BIERv6&#xff08;Bit Index Explicit Replication IPv6 encapsulation&#xff09;是一种新型组播方案。 BIERv6使用比特串封装目的节点集合&#xff0c;无需建立组播分发树或保存流状态&#xff0c;简化了网络节点操作。它与SRv6无缝融合&#xff0c;高效承载…

靠谱的知识竞赛活动公司怎么去找

搞知识竞赛活动&#xff0c;找一家靠谱的知识竞赛活动公司来承办是重中之重&#xff0c;他直接决定了竞赛活动的成败和效果。那么&#xff0c;如何去找这样一家公司呢&#xff1f; 知识竞赛活动一般包括两大部分内容&#xff0c;一部分是舞台及其包装&#xff0c;另一部分是知识…

python实现九宫格图片切割

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 朋友圈九宫格是一种在社交媒体上展示图片或内容的常见布局方式,特别是在微信朋友圈中非常流行。这种布局由九个相同大小的格子组成,通常用于展示一组相关的图片或内容。&…

ESP32-C3-MINI-1

https://www.espressif.com.cn/sites/default/files/documentation/esp32-c3-mini-1_datasheet_cn.pdf 芯片 https://files.seeedstudio.com/wiki/XIAO_WiFi/Resources/esp32-c3_datasheet.pdf 结果参考&#xff1a; https://blog.csdn.net/iamxxdd/article/details/12386419…

Html + Express 实现大文件分片上传、断点续传、秒传

在日常的网页开发中&#xff0c;文件上传是一项常见操作。通过文件上传技术&#xff0c;用户可以将本地文件方便地传输到Web服务器上。这种功能在许多场景下都是必不可少的&#xff0c;比如上传文件到网盘或上传用户头像等。 然而&#xff0c;当需要上传大型文件时&#xff0c;…

人工智能的未来:Sam Altman 揭穿搜索引擎谣言,调侃 ChatGPT 和 GPT-4 的“神奇”更新

人工智能的未来&#xff1a;Sam Altman 揭穿搜索引擎谣言&#xff0c;调侃 ChatGPT 和 GPT-4 的“神奇”更新 概述 科技界充斥着有关人工智能研究先驱组织 OpenAI 将推出类似谷歌搜索引擎的传言。然而&#xff0c;首席执行官 Sam Altman 已经平息了这些谣言&#xff0c;并透露…

机器学习:葡萄酒品质预测

说明&#xff0c;此项目是我的期末大作业&#xff0c;包括了对数据集探索&#xff0c;预处理以及分类的各个详细过程与描述&#xff0c;代码简单&#xff0c;主要是一个分类项目的流程&#xff0c;并没有对模型进行深度研究&#xff0c;因此我写在这里。 目录 一、问题介绍 …

【Win10点击任务栏刷屏,卡死转圈(亲测有效)】

计算机疑难杂症001 Win10点击任务栏刷屏&#xff0c;卡死转圈(亲测有效)1、问题状况2、问题原因3、问题解决 Win10点击任务栏刷屏&#xff0c;卡死转圈(亲测有效) 1、问题状况 在偶然间&#xff0c;发现任务栏点不动了&#xff0c;点击无反应&#xff0c;再多点击几次&#x…

.[sqlback@memeware.net].2700勒索病毒如何防护和恢复数据?

.[sqlbackmemeware.net].2700介绍&#xff1a; .[sqlbackmemeware.net].2700 勒索病毒是一种恶意软件&#xff0c;它通过加密用户文件并索要赎金来实施勒索&#xff0c;快速恢复重要数据请添加技术服务号(safe130)。以下是关于这种勒索病毒的一些关键信息&#xff1a; 病毒性质…

通用人工智能AGI,究竟是一个哲学问题还是技术问题?

引言 在探索人工智能的未来方向中&#xff0c;人工通用智能&#xff08;AGI&#xff09;的概念逐渐成为科技领域和哲学探讨的焦点。AGI旨在创建可以执行任何智能任务的机器&#xff0c;甚至在某些方面超越人类的能力。然而&#xff0c;关于AGI的研究不仅仅是技术问题&#xff…