十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

华为云数据中台实战:OBS+DLI+DGC构建可运行数据管道

华为云数据中台实战:OBS+DLI+DGC构建可运行数据管道 简介华为云数据中台解决方案介绍是一份面向企业数据架构师、大数据平台工程师及售前顾问的技术文档旨在帮助企业构建统一的数据管理平台解决多源数据汇聚、存储、加工、服务与治理等核心问题。资源包内为1个PDF文件大小2.44MB内容聚焦华为云数据中台的完整方案。文档重点解析了贴源层、共享层、分析层、应用层四层架构及选型原因贴源层负责数据采集、存储与高并发写入共享层提供高效数据访问与更新删除能力分析层支撑高并发查询与强资源隔离应用层提供多种API接口。同时对DRS、MRS、DWS、DLI、DAYU五大组件进行功能拆解DWS支持流式数据实时入库与万亿级数据毫秒级查询DAYU提供数据资产管理和血缘分析DLI支持跨源分析以打破数据孤岛MRS则提供大数据分析引擎。读者可从中获取数据集成、数据仓库建设、数据治理与跨源分析的设计参考应用场景覆盖大数据分析与挖掘、数据资产管理、数据安全审计、数据集成与交换等并包含电力、电网等行业的落地案例。目前已有977人学习适合作为数据平台规划、技术选型和售前方案撰写的参考资料。1. 数据中台不是买来的华为云这份 PDF 能给你的和给不了你的拿到《华为云数据中台解决方案介绍.pdf》这类文档很少会有工程师逐字读完。大家真正想要的是看完能不能给客户或老板讲清楚数据中台怎么搭以及动手时第一步做什么。这类 PDF 通常会把数据接入、数据处理、数据治理、数据服务画成一张光鲜的架构图但它不会告诉你租户权限怎么分、调度参数怎么设、冷数据何时归档。这里把 PDF 里的高频组件映射到具体工程动作用 OBS、DLI、DGC 组合出一条可运行的数据链路再把成本、一致性、验收这些容易被方案介绍带过的话题讲透。适合正在做中台选型的数据架构师也适合要交付 POC 的数据开发和云服务运维人员。2. 华为云数据中台的架构分层与核心组件选型常见方案 PDF 会画一个“数据源 → 数据接入 → 数据开发 → 数据资产 → 数据服务”的架构对应到华为云通常由一组服务组合而成而不是一个单独的“中台产品”。如果只能用一句话记住那就是OBS 放原始数据DGC 做治理和编排DLI/DWS 做计算ROMA 做服务共享。下面按层拆开看。2.1 数据接入层CDM、DIS、ROMA Connect 的选型边界接入层最常见的是数据库同步、日志流、API 调用三种场景。CDM 用于快速迁移和周期批量同步适合 MySQL、Oracle 到 OBS 或 DWS 的数据搬迁DIS 用于实时流接入适合 IoT 设备日志、Web 埋点这类持续产生的数据ROMA Connect 用于企业系统间 API、消息和事件集成适合异构系统打通。这三者并不是互斥关系很多中台会同时使用。工具典型场景数据形态边界与注意点CDM数据库全量/增量迁移批量对复杂转换支持有限清洗逻辑交给 DGCDIS流式数据接入实时或准实时消费端必须做幂等否则重复计算ROMA ConnectAPI/消息集成事件、API适合接口级同步不适合海量原始数据搬运选型时可以优先看“数据是批量到、还是持续到”。批量到用 CDM持续到用 DIS如果两个系统之间还要做接口编排再叠加 ROMA Connect。POC 阶段从 CDM 开始成本最低一条链路跑通后再加流式接入也不迟。2.2 数据开发与治理中枢DGC 把中台动作变成作业DGCDataArts Studio承担数据开发、作业编排、调度、血缘和质量管理。在方案图里DGC 作业由节点和连线构成一个最简单的周期作业可以只包含一个 SQL 节点先清理昨天的临时表再重建。下面这份 JSON 是 DGC 作业定义的简化示例对应控制台“数据开发 → 作业开发”页面里的配置结构{ name: ods_user_log_daily, nodes: [ { name: clean_and_build_ods, type: DLI_SQL, properties: { sql: CREATE TABLE IF NOT EXISTS ods.user_log ..., database: ods, queue: default } } ], schedule: { type: CRON, cron: 0 0 2 * * ? } }这里的type对应 DGC 支持的节点类型此处使用 DLI_SQL 表示在 DLI 队列上执行 SQL。schedule.cron是 Quartz 风格表达式0 0 2 * * ?表示每天凌晨 2 点触发?用于“不指定星期几”。SQL 节点里的database和queue决定作业在哪个库、哪个计算队列上跑这两个参数在多人共用一个 DGC 环境时必须显式设置否则作业会落到别人的默认资源上。调度参数是 DGC 使用里最容易踩坑的地方参数示例值说明cron0 0 2 * * ?每天 02:00 执行避开业务高峰timeout600单个节点超时时间单位秒retry2失败自动重试次数建议不超过 5retryInterval60重试间隔单位秒失败策略终止作业批处理通常选终止避免错误数据扩散DGC 的作业之间可以设置依赖关系例如“数据质量作业”必须在上游作业成功后运行。血缘关系会自动生成在数据资产模块中可以看到表级链路。多团队共享 DGC 时建议给作业加后缀区分环境比如prd_ods_daily、dev_ods_daily避免互相覆盖。2.3 数据湖与数据仓库OBS、DLI、DWS、MRS 的分工数据存哪里决定中台是“湖”还是“仓”。OBS 是对象存储所有原始文件都放这里DLI 是无服务器 SQL 引擎直接在 OBS 上做探索适合临时分析DWS 是数据仓库适合高并发报表和固定模型MRS 是托管大数据集群适合 Spark、Flink、Hive 这类需要自定义运行时的计算。方案里写“湖仓一体”时通常就是 OBS DLI/DWS 并存。下面是一段在 DLI 上创建外表映射 OBS 文件的 SQLCREATE TABLE IF NOT EXISTS dws_demo.user_log ( user_id STRING COMMENT 用户ID, action STRING COMMENT 动作, event_time TIMESTAMP COMMENT 事件时间 ) USING CSV OPTIONS ( path obs://your-data-lake-bucket/raw/logs/, header true );path指向 OBS 桶中的原始目录header true表示 CSV 文件第一行是表头。使用CREATE TABLE ... USING CSV时DLI 并不会立即读取数据而是建立表与文件的映射关系第一次查询时才启动计算引擎扫描文件。因此建表阶段即使源文件字段顺序有问题也不会立刻暴露只有查询时才会报错。对固定报表场景建议把高频查询的数据从 OBS 落到 DWS用 DWS 的列存和索引换查询性能。3. 最小闭环落地用 DGC DLI OBS 从零构建一条数据链路方案 PDF 看完下一步是在云账号里跑通“文件进来、数据能查、任务每天跑”的最小闭环。不需要一开始就上完整的数据治理和指标平台只需要一个 OBS 桶、一个 DLI 队列、一个 DGC 作业。3.1 创建 OBS 桶与目录规划OBS 桶是数据中台的家建议按业务建桶而不是把所有数据塞进一个桶。目录按分层命名raw放原始数据processed放清洗后数据archive放冷数据temp放临时文件。在服务器上安装 obsutil 后用下面的脚本初始化#!/bin/bash # 创建 OBS 桶并初始化分层目录 BUCKETyour-data-lake-bucket REGIONcn-north-4 obsutil mb obs://$BUCKET -location$REGION for dir in raw processed archive temp; do echo .keep obsutil cp .keep obs://$BUCKET/$dir/.keep doneobsutil mb用于创建桶-location必须和后续计算资源所在区域一致否则跨区域读写在性能和流量费上都不划算。obsutil cp在这里是上传一个空占位文件避免控制台上看不到“空目录”。实际运行中archive目录往往放在单独的低频或归档存储桶中由生命周期规则管理而不是和热数据混在一起。3.2 创建 DLI 队列与数据连接DLI 队列有按需和包周期两种计费模式。POC 阶段选按需测试完及时删除避免闲置扣费。在 DGC 中创建数据连接时需要填 DLI 队列名、OBS 桶路径和 AK/SK 或委托。连接类型选 DLI访问方式建议用委托而不是长期密钥这样 DGC 作业运行时能临时获取权限密钥不落盘。这里最常犯的错误是只建队列不配置队列资源规格导致 SQL 调度时因为内存不足直接失败。3.3 配置调度、重试与失败告警把刚才的 SQL 节点包装成周期作业调度周期支持分钟、小时、天和自定义 cron。生产环境通常配置每天凌晨执行因为上游数据源一般按天产出。调度参数需要重点关注配置项推荐值原因周期天cron0 0 2 * * ?避开业务高峰留出源数据产出时间失败重试1~2 次多数失败是网络抖动重试超过 3 次会导致资源反复空转重试间隔60 秒太短会让下游资源池持续抖动运行超时预计时长的 1.5 倍防止死锁和异常资源占用失败通知短信或邮件必须有值班人员能第一时间介入DGC 支持配置“依赖作业”在周期调度中选择上游作业只有上游成功后当前作业才会启动。例如先执行原始数据接入作业再执行指标计算作业最后执行数据质量检查。建议把每个作业名加上环境前缀比如prd_dws_daily、prd_dqc_daily这样调度监控页面上扫一眼就能分辨任务归属。4. 冷热数据分层与归档表降低中台存储成本数据中台运行半年后存储成本通常超过计算成本。几十 TB 的日志被反复查询的机会远低于新鲜数据。热数据在 DWS/DLI 中被高频访问不需要立即归档中低频明细数据放在 OBS 标准存储超过 90 天、只做审计或追偿的数据应该进入低频访问或归档存储。这就是冷热分离。4.1 用访问频次而不是“年龄”定义冷热判断冷热不能只看数据生产时间。一个分区最近 30 天没有被查询且下游任务只有月度批量读取可以视为温数据超过 180 天没有查询且不需要单条随机读取就是冷数据。反过来一张生产日期很早的系统维表如果每天被 join仍然是热数据。常见做法是在数据资产平台记录表或分区最后访问时间再结合下游调度依赖确定分级策略。存储等级适用数据成本特点查询能力OBS 标准最近 7 天原始数据高毫秒级OBS 低频访问7~90 天明细数据中低延迟有访问费用OBS 归档超过 180 天审计数据低需要先解冻分钟级DWS/DLI 托管表热点汇总数据计算存储同时计价毫秒级4.2 按时间分区在写数据时就为归档做好准备归档的前提是表有清晰分区否则无法按时间批量搬移。在 DLI 或 DWS 中时间字段设置为分区列比建一张大表再删历史高效得多。下面是一个以天为分区的归档表创建示例CREATE TABLE IF NOT EXISTS dws_demo.user_log_archive ( user_id STRING, action STRING, event_time TIMESTAMP ) PARTITIONED BY (dt STRING);PARTITIONED BY (dt STRING)表示按天分区分区值作为独立字段出现在查询条件中。查询时用WHERE dt 2026-01-01 AND dt 2026-02-01能触发分区裁剪只扫描对应目录。归档时也只需要复制或移动对应分区目录不需要重写全表。需要注意分区字段不能出现在字段表里否则建表会报重复定义。4.3 用 OBS 生命周期策略自动将冷分区沉降到归档存储手动搬数据不现实OBS 支持桶级生命周期规则按对象前缀自动转换存储类别。例如把processed/下超过 90 天的对象转低频超过 180 天转归档。下面是一份生命周期规则配置{ rules: [ { id: move_processed_to_archive, prefix: processed/, status: Enabled, filter: { prefix: processed/ }, transitions: [ { days: 90, storageClass: STANDARD_IA }, { days: 180, storageClass: GLACIER } ] } ] }prefix限定规则只作用于processed/目录下的对象第一个transition表示 90 天后转低频访问第二个表示 180 天后转归档。规则设置前要确认下游任务是否还会读取这些文件否则产品同学临时要求查历史明细时需要等待解冻流程。归档表不是一个物理上的大表而是一组前缀一致、分区清晰的数据文件目录生命周期规则就相当于归档执行器。5. 分布式事务与数据一致性中台调度必须避开的坑数据中台的调度器天然是分布式定时任务。当任务被拆到多个节点并行运行时数据一致性不再是单库事务能解决的。你需要处理的是任务级别的幂等、重试、补偿和对账。DGC 只管触发和执行不会替业务数据做去重和校验。5.1 数据管道也有事务边界数据库事务强调 ACID但数据管道面对的是多个系统、多张表很难用全局锁。常见做法是把一个作业拆成“读取 → 写入 → 确认 → 通知”四个阶段事务边界设在“写入成功”这个节点。如果写入中途失败重试时可能已经写了一半所以必须让目标写入是幂等的或者有清理步骤。很多方案里用“先删分区再写”来实现这一点但删和写之间如果间隔过长查询会看到空分区。5.2 幂等写入目标表要有唯一键和去重逻辑最简单的幂等设计是在目标表上建唯一键导入时用INSERT OVERWRITE或MERGE。DWS 支持 upsertDLI 可以先在临时表里去重再写回目标表。下面这句 DLI SQL 示意如何按用户和时间去重避免重复入库INSERT OVERWRITE TABLE dws_demo.user_log SELECT user_id, action, event_time FROM ( SELECT user_id, action, event_time, ROW_NUMBER() OVER (PARTITION BY user_id, event_time ORDER BY action) AS rn FROM ods.user_log ) t WHERE rn 1;ROW_NUMBER()按user_id和event_time分组重复数据只保留字典序最小的action行。结合INSERT OVERWRITE覆盖目标表分区即使上游重复推送最终结果也不会出现双份。使用MERGE时要注意更新键选择键选择不好会引发目标表锁竞争尤其是在多作业同时写一张表时。5.3 分布式定时任务的重试、补偿和告警DGC 的节点重试只针对任务执行失败不解决业务数据缺失。比如源端数据已经被清理目标端没有补到数据任务重试也一样成功。因此需要数据对账层每个作业结束前自动对比源表和目标表的记录数超过阈值就告警。这属于补偿机制比重试更可靠。失败类型自动重试补偿手段告警级别网络超时2 次间隔 60 秒无需补偿警告SQL 执行失败1 次检查语法和前日数据严重源表无数据不重试触发上游重跑严重目标表数据偏差不重试对账脚本回刷严重建议把统一前缀作为告警关键字在云监控中按作业名过滤避免每个节点失败都通知所有人。调度编排时把“数据对账”作为每个链路的最后一个节点它失败才算整条链路失败。6. 从 PDF 解析到交付验收把方案文档变成可执行清单6.1 用 PDF 解析把方案文档变成验收清单方案 PDF 里的表格和架构图只靠人眼翻很难保证验收时每个组件都被覆盖。可以写一个 PDF 解析脚本把表格内容抽出来转成 CSV再在 CSV 旁边增加“已配置”列作为交付清单。import csv import pdfplumber with pdfplumber.open(solution.pdf) as pdf: rows [] for page in pdf.pages: for table in page.extract_tables(): for row in table: rows.append(row) with open(solution_checks.csv, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([组件, 规格, 用途, 已配置]) writer.writerows(rows)pdfplumber适合处理文字型 PDF扫描版 PDF 需要先做 OCR否则抽取出来的是空列表。抽取结果不一定完全规整每张表转成一行后可能出现空单元格需要人工确认一遍。脚本输出的 CSV 可以作为交付核对表逐行对应到云环境里的实际资源OBS 桶有没有建生命周期规则有没有生效DLI 作业有没有配置调度DGC 作业的失败告警有没有绑定到责任人。每一行都变成可勾选的交付项验收就从“读过方案”变成“服务已配置并可运行”。本文还有配套的精品资源点击获取
返回列表