利用 Databend 生态构建现代数据湖工作流

news2024/11/14 18:44:26

数据是洞察力的基石,越来越多的企业开始建设以数据资产为中心的存储和分析一体化方案,这要求 Data Infra 架构能够提供可扩展、灵活且统一的数据工作流。现代数据湖架构同时兼顾数据湖的可扩展性和数据仓库的性能,满足对大规模数据处理的需求,并应对数据的复杂性挑战。本文将介绍如何围绕 Databend 生态系统构建现代数据湖,并且提供可一个简单的示例,展示如何结合 Apache DolphinScheduler 和 DataX 等工具,构建一个高效、可靠的现代数据湖工作流。

基于 Databend 的现代数据湖架构概述

现代数据湖的典型特征之一是能够灵活和高效地利用云上的基础设施,并且使用对象存储作为数据的存储方案。作为一款云原生、湖仓一体的数据管理系统,Databend 基于对象存储进行设计,存算分离的架构进一步匹配云上计算资源灵活调度的模式,现代 MPP 架构和充分的优化能够充分释放算力。

开放数据格式(如 Parquet、ORC)与表格式(如 Apache Iceberg 和 Delta Lake)的兴起,使得存储方案可以从原有存储方案自然迁移到对象存储上,并且可以进一步构建包括 Time Travel 和数据分支等在传统数仓中鲜有实现的高级特性。Databend 充分利用开源开放的数据生态,除了支持多种结构化和半结构化数据格式之外,还允许用户以 Catalog 和 表引擎形式挂载多种数据源,丰富的数据处理技术栈,使得围绕 Databend 构建的现代数据湖可以从容应对数据量和复杂性挑战。

接下来我们尝试从一个分层模型上观察围绕 Databend 生态所构建的现代数据湖架构:

  • 数据消费层:包含用于数据可视化和商业分析的工具,如 FineBI 和 DataEase 等。此外,这一层也会包含需要访问数据湖结果的应用程序和机器学习工作负载。

  • 数据处理层:Databend 提供湖仓一体,可以弹性扩缩容的高性能计算集群,满足数据转换和查询分析的复杂需求,够高效处理大规模数据查询和分析任务。Databend 是一种关系型数据管理系统,同时兼具向量支持和处理能力,也能为上层的 MLOps 工具和生成式 AI 提供支持。此外,Databend 还支持丰富的 UDFs 能力,用户可以根据业务实际场景构建解决方案。

  • 数据访问层:尽管对象存储是现代数据湖的主要存储服务,但是实际的存储架构可能更加复杂,这是由于现代数据湖需要兼顾不同来源和历史的数据。

    • Apache OpenDAL 提供了统一的数据访问层,使得可以在同一个模型下管理位于对象存储、HDFS 、文件系统和互联网上的数据集。
    • 由于开放表格式技术在现代数据湖架构中的广泛应用,这一层还需要包含用于挂载到处理层的一些数据服务。Databend 现已支持 Apache Hive、Apache Iceberg 和 Delta Lake ,能够有效地访问位于不同数据湖中的数据。
  • 数据摄取和任务调度层:包含用于管理和调度各种数据处理任务的工具,并为数据的摄入提供支持。

    • Apache DolphinScheduler 是一个分布式和可扩展的开源工作流协调平台,提供可视化的 DAG 工作流管理和调度数据任务,能够在不影响工作流模板的情况下,支持工作流实例的修改、回滚和重新运行。
    • DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
    • 借助 Flink CDC,可以实时捕获并同步源数据库的变更数据。
  • 数据源:尽管数据源并不属于现代数据湖架构的一部分,但支持复杂多样的结构化和半结构化数据已经是现代数据湖必须具备的能力。

此外,考虑到现代数据湖架构对监控和告警系统的需要,可以结合 Grafana 和 Prometheus,对整个数据湖资源进行实时监控和告警,比如查询响应时间、并发连接数、慢查询日志等。

实践经验与 最佳实践

数据摄取与处理

  1. 增量更新与全量更新结合: 对于数据量较大的表,采用增量更新策略可以显著减少数据处理时间。只有在必要时才进行全量更新。
  2. 数据质量监控: 建立数据质量监控机制,及时发现并处理数据异常。可以使用 Apache DolphinScheduler 定期运行数据校验任务,确保数据的一致性和完整性。

性能优化

  1. 集群配置调整:根据实际业务需求动态调整 Databend 集群资源配置,以平衡性能和成本。也可以结合 Databend Cloud 实现实时混合云架构,进一步提高资源调度能力。
  2. 缓存:利用 Databend 的多层缓存机制,减少重复查询对系统性能的影响。
  3. 聚类 键和聚合索引:通过精心设计聚类键,并引入聚合索引,可以有效提高查询性能。
  4. 定期进行 Compact 和 Recluster:优化存储空间的使用,提升查询效率。这些操作会重组数据,从而减少碎片化,提升整体性能。

安全与合规

  1. 访问控制:充分利用 Databend 的所有权机制,为不同角色和用户配置细粒度的访问控制策略,确保只有经过授权的用户才能访问敏感数据。
  2. 存储加密:利用 Databend 的存储加密能力,可以有效保护数据的机密性和完整性。
  3. 日志审计:启用日志审计功能,记录所有数据访问和操作日志,以便追踪和分析潜在的安全事件。

监控与告警

  1. 系统监控:实时监控整个数据湖的运行状态,包括 CPU、内存、磁盘 I/O 等关键指标。Databend 也提供基于 Grafana 和 Prometheus 的监控方案。
  2. 告警设置:配置合理的告警规则,当系统出现异常时,及时通知运维人员进行处理。
  3. 性能分析:通过 Databend 内置的性能剖析能力和第三方性能分析工具,定期分析系统瓶颈,进一步保障数据湖平稳运行。

Workshop: 使用 Databend 和 Apache DolphinScheduler 构建现代数据湖 工作流

在接下来的 Workshop 中,我们将会提供一个简单的示例,帮助你了解如何结合 Databend、Apache DolphinScheduler 和 DataX 构建一个简单的现代数据湖工作流,实现 MySQL 到 Databend 的异构数据库合并。

准备数据并建表

首先在 MySQL 中创建相关的表结构和数据。

MySQL> create database db;
MySQL> create table db.tb01(id int, d double, t TIMESTAMP,  col1 varchar(10));
MySQL> insert into db.tb01 values(1, 3.1,now(), 'test1'), (1, 4.1,now(), 'test2'), (1, 4.1,now(), 'test2');

在 Databend 中建立对应的表结构。(将 MySQL 的 db.tb01 数据迁移至 Databend 的 migrate_db.tb01)

databend> create database migrate_db;
databend> create table migrate_db.tb01(id int null, d double null, t TIMESTAMP null,  col1 varchar(10) null);

准备 DataX

根据文档准备 DataX 可执行环境,这里使用预先编译好的二进制进行。

也可以按照下面的方式自行编译,编译好的 DataX 将位于 {DataX_source_code_home}/target/datax/datax/ 目录下。

git clone git@github.com:alibaba/DataX.git
cd DataX
mvn -U clean package assembly:assembly -Dmaven.test.skip=true

启动 dolphinscheduler

启动之前先设置 Datax 依赖的环境变量:

export DATAX_HOME=/your/path/to/datax
export PYTHON_HOME=/your/path/to/python3

参考文档启动 DolphinScheduler Standalone 快速开发模式,前后端均启动成功后访问 http://localhost:12345/dolphinscheduler/ui 即可登录系统 UI。默认的用户名和密码是 admin/dolphinscheduler123

创建 数据源

点击 源中心->创建源 创建 MySQL 和 Databend 两个数据源

MySQL

Databend

创建任务

  • 点击项目管理 -> 项目名称 -> 工作流定义,点击“创建工作流”按钮,进入 DAG 编辑页面;
  • 拖动数据集成工具栏的
  • 任务节点到画板中。

填写 Datax 任务模板

选择 自定义模板

将下面的 json 配置填入:

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "MySQLreader",
          "parameter": {
            "username": "root",
            "password": "password",
            "column": [
              "id", "d", "t", "col1"
            ],
            "connection": [
              {
                "jdbcUrl": [
                  "jdbc:MySQL://127.0.0.1:3306/db"
                ],
                "driver": "com.MySQL.cj.jdbc.Driver",
                "table": [
                  "tb01"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "databendwriter",
          "parameter": {
            "username": "root",
            "password": "",
            "column": [
              "id", "d", "t", "col1"
            ],
            "batchSize":1000000,
            "batchByteSize": 1000000000,
            "preSql": [
            ],
            "postSql": [
            ],
            "connection": [
              {
                "jdbcUrl": "jdbc:databend://127.0.0.1:8000/migrate_db",
                "table": [
                  "tb01"
                ]
              }
            ]
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 10,
        "byte": -1,
        "record": -1,
        "batchSize": 1000000
      }
    }
  }
}

任务上线

点击 工作流定义 -> 上线

任务执行

执行 Datax 任务之前先检查一下目标表的情况:

点击 运行 DataX 任务开始执行,数据开始从 MySQL 导入 Databend。

任务开始后可以到 任务实例 中查看任务运行情况和相应的日志:

可以看到运行一段时间后,数据已经从 MySQL 同步到 Databend,数据可以进行进一步查询分析或者供上层工作负载消费。

控制工作流

工作流实例 中可以编辑、暂停、重跑工作流。

总结

利用 Databend 及其生态系统可以构建可扩展、灵活和统一的现代数据湖,结合 Apache DolphinScheduler 和 DataX 等工具,可以实施高效、可靠的现代数据湖工作流。这种架构不仅提高了数据处理的效率,还增强了系统的稳定性和可监控性,为企业提供强大的数据洞见与决策支持能力。

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

👨‍💻‍ Databend Cloud:Databend Cloud - 开源云数据仓库替代方案 | Databend Platform

📖 Databend 文档:Databend

💻 Wechat:Databend

✨ GitHub:GitHub - datafuselabs/databend: 𝗗𝗮𝘁𝗮, 𝗔𝗻𝗮𝗹𝘆𝘁𝗶𝗰𝘀 & 𝗔𝗜. Modern alternative to Snowflake. Cost-effective and simple for massive-scale analytics. https://databend.com

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

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

相关文章

视频文件怎么压缩到最小 视频文件怎么压缩到最小内存 4个简单的方法工具分享简单步骤

如何压缩大视频文件以减小其大小?在分享或存储大视频文件时,有效压缩是关键,以降低文件大小且不显著牺牲视觉和听觉质量。视频文件的大小直接影响传输、分享和存储的成本与便捷性。掌握压缩视频的技能对于数字内容处理至关重要,能…

【Android】linux

android系统就是跑在linux上的系统。Linux层里面包含系统和硬件驱动等一些本地代码的环境。 linux的目录 mount: 用于查看哪个模块输入只读,一般显示为: [rootlocalhost ~]# mount /dev/cciss/c0d0p2 on / type ext3 (rw) proc on /proc type proc (…

SpringBoot 实现图形验证码

一、最终结果展示 二、前端代码 2.1 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title>验证码</title><style>#inputCaptcha {height: 30px;vertical-align: middle;}#verifica…

(leetcode学习)236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自己的祖…

Q238. 除自身以外数组的乘积

思路 一开始想到的是按位乘 看了题解&#xff0c;思路是存i左边的乘积和 与 i右边的乘积和 代码一&#xff1a; 需要三次循环,需要额外空间 left和right数组 代码&#xff1a; public int[] productExceptSelf(int[] nums) {int[] left new int[nums.length];int[] right …

python题解

空间三角形 输入在三维空间的三角形三个顶点A&#xff0c;B&#xff0c;C的坐标&#xff08;x,y,z&#xff09;&#xff0c;计算并输出三角形面积。不考虑不能构成三角形的特殊情况。 格式 输入格式&#xff1a; 依次输入三个顶点A&#xff0c;B&#xff0c;C的坐标&#xff…

CISSP,信息安全圈公认的高含金量证书

在数字化和信息化迅速发展的时代&#xff0c;信息安全的重要性愈发突出。 网络攻击、数据泄露和隐私问题频发&#xff0c;使得企业和组织对信息安全专业人士的需求不断增加。 CISSP&#xff08;Certified Information Systems Security Professional&#xff09;作为信息安全领…

文字描边效果

文字描边效果可以通过text-shadow来实现&#xff0c;也可以通过-webkit-text-stroke来实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

MySQL数据库练习(5)

1.建库建表 # 使用数据库 use mydb16_trigger;# 表格goods create table goods( gid char(8) primary key, name varchar(10), price decimal(8,2), num int);# 表格orders create table orders( oid int primary key auto_increment, gid char(10) not null, name varchar(10…

MYSQL第五次作业

1、触发器 建立两个表:goods(商品表)、orders(订单表) mysql> use mydb16_trigger; Database changed mysql> create table goods-> (-> gid char(8) primary key,-> name varchar(10),-> price decimal(8,2),-> num int-> ); Query O…

MySQL零散拾遗(四)--- 使用聚合函数时需要注意的点点滴滴

聚合函数 聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。 常见的聚合函数&#xff1a;SUM()、MAX()、MIN()、AVG()、COUNT() 对COUNT()聚合函数的更深一层理解 COUNT函数的作用&#xff1a;计算指定字段在查询结果中出现的个数&#xff08;不包含NULL值&#…

C++操作Smgp协议的相关教程

SGIP是中国网通为实现短信业务而制定的一种通信协议&#xff0c;用于在短消息网关&#xff08;SMG&#xff09;和服务提供商&#xff08;SP&#xff09;之间、短消息网关&#xff08;SMG&#xff09;和短消息网关&#xff08;SMG&#xff09;之间通信。 Perl的IO::Async模块提…

SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)

上一章讲了计划运行的5大步骤中的前两步&#xff0c;计算净需求和计算批量大小。 SAP PP学习笔记30 - 计划运行的步骤1 - Net requirements calculation 计算净需求(主要讲了安全库存要素)&#xff0c;Lot-size calculation 计算批量大小-CSDN博客 本章继续讲计划运行的后面几…

Q380 O(1)时间获取插入删除元素

思路 insert 其实用得到search&#xff0c;remove也是&#xff0c;当时o(1)想到的是hash set&#xff0c;但是对于random取,随机数相当于获得的是index,根据index获取元素 Set 数据结构不符合。 随机获取应该是数组&#xff0c;但是数组搜索和删除不是o(1) 最后的思路是 用h…

怎么防止文件在通讯软件外泄

为了防止文件在通讯软件外泄&#xff0c;企业可以采取一系列综合性的措施来加强管理和防护。 1. 使用高级别软件 企业级聊天软件&#xff1a;使用企业级聊天软件&#xff0c;这类软件通常具备更强大的安全管理功能&#xff0c;如文件传输加密、访问权限控制、审计日志记录等。…

【C++】深度解析:用 C++ 模拟实现 list 类,探索其底层实现细节

目录 list介绍 list模拟实现 list 节点类 list 的迭代器 定义 构造函数 解引用 operator前置和--与后置和-- operator与operator! list 类 构造函数 begin()和end() 拷贝构造 erase() clear() 析构函数 insert push_back 和 push_front pop_back 和 pop_front…

CTF-pwn-虚拟化-vmmware 前置

文章目录 参考vmware逃逸简介虚拟机和主机通信机制(guest to host)共享内存&#xff08;弃用&#xff09;backdoor机制Message_Send和Message_RecvGuestRPC实例RpcOutSendOneRawWork实例 vmware-rpctool info-get guestinfo.ip各个步骤对应的backdoor操作Open RPC channelSend …

数据结构初阶(c语言)-双向链表

这里首先纠正上篇文章一个错误&#xff0c;链表的一个有效数据点应该称为结点而不是节点。 一&#xff0c;双向链表的概念与结构 1.1概念与结构示意图 我们所说的双向链表全称为带头双向循环链表&#xff0c;也就是说此链表带有哨兵位结点(不存放任何数据的结点&#xff0c;且…

Oauth2协议的四种模式

B站视频 概念 Oauth2.0&#xff08;Open Authorization&#xff09; 一个关于授权的开放网络标准 允许用户授权第三方应用访问用户存储在其他服务提供者上的信息 不需要将用户名和密码提供给第三方应用 Oauth2中的各个角色 授权码模式 第一步 获取授权码 以上流程中的授…

产品经理NPDP好考吗?

NPDP是新产品开发专业人员的资格认证&#xff0c;对于希望在产品管理领域取得认可的专业人士来说&#xff0c;NPDP认证是一项重要的资格。 那么&#xff0c;产品经理考取NPDP资格认证究竟难不难呢&#xff1f; 首先&#xff0c;NPDP考试的难易程度取决于考生的背景和准备情况…