ARTICLE DETAIL

资讯详情

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

集团数据平台分层架构设计:从贴源区到集市区的工程实践

集团数据平台分层架构设计:从贴源区到集市区的工程实践 简介企业数字化底座与数字化转型方案是一份81页的PPTX演示文稿由郎丰利于2023年整理制作聚焦企业数字化转型中的数据平台、数据分析工具、业务应用系统与数字化管理面向企业架构师、数据管理人员、IT规划人员及数字化转型项目组成员。方案按综述、总体架构、规划设计、建设运营、未来展望五部分展开系统阐述统一数据架构、数据质量治理、元数据管理、客户360度视图、风险评估体系及关键绩效指标体系等建设要点并结合供应链金融、人人贷、保理等业务场景说明如何整合集团内外部数据、搭建统一数据视图为管理分析和决策支持提供基础。资源为1个pptx文件压缩包大小8.53MB页面编排清晰图文结合正文含具体架构图、建设目标与预期收益可直接用于内部培训、方案评审或项目启动阶段的框架参考。已有119人学习适合需要快速理解数字化底座整体思路与落地步骤的读者尤其适合在金融、扶贫等数据密集型场景中规划BI应用与数据中台的建设团队。1. 数字化底座不是一套软件而是一张分层的数据地图集团型企业做数字化转型最容易踩的坑是把“数字化底座”理解成采购一套BI报表工具或数据中台产品。真正拆过这类项目就会明白底座的内核是“数据怎么分层、每一层用什么引擎、数据如何在层与层之间流转”。这份81页的方案里反复强调的其实是同一件事数据产生层、交换层、存储层、调度层、管控层各司其职BI只是最上层的消费出口。没有底层的数据分区设计和采集通道报表做得再漂亮也是空中楼阁。本文按“架构拆解→存储设计→采集与交换实现→调度编排→管控与BI落点”的顺序把一份集团级数字化底座方案还原成可执行的工程细节适合正在做数据平台规划、数据仓库建模或数字化转型售前方案的同学对照参考。2. 数据平台分层架构七个数据区各管一摊别混着用先看整体骨架。方案里的数据平台不是一个大而全的Hadoop集群而是按数据生命周期和价值密度拆成七个数据区临时区、贴源区、主题区明细/汇总、大数据区、沙盘区、集市区、归档区。每一层的数据模型、保留周期、访问模式和计算负载都不同混着用会在运维阶段付出惨痛代价。2.1 数据区划分与选型逻辑数据区核心作用数据模型保留周期访问模式典型引擎临时数据区承接源系统增量文件暂存待处理文件/原始表短处理后即清仅ETL程序访问NAS Hive Table贴源数据区按原结构存储业务系统前日快照贴源模型建议7天~30天批量作业抽取Hadoop Hive主题数据区按客户、协议、产品等主题整合第三范式模型长期历史日终批量ETL、挖掘预测Hadoop Hive MR UDF大数据区存非结构化、半结构化数据HDFS文件建议1年MapReduce处理HDFS MR Storm沙盘演练区支撑数据科学家临时分析按需求定制演练周期内灵活查询独立Hadoop集群应用集市区面向BI和报表的预汇总数据维度模型/宽表按需求BI工具高频查询MPP数据库 内存库历史归档区各数据区过期数据归档源格式/压缩建议7年低频历史查询独立Hadoop集群这里的关键决策是主题区不要直接对BI服务。主题区虽然做了跨条线的整合但模型是第三范式关联查询代价高。必须先经过集市区的预连接、预汇总把结果物化成宽表才能扛住BI工具的高并发访问。方案里“集市数据区通过Sqoop或数据库外部表技术执行归档”这句话对应的就是MPP数据库和Hadoop集群之间的数据通道。2.2 从贴源到主题的ELT加工路径数据从贴源区到主题区走的不是传统ETL抽取-转换-加载而是ELT抽取-加载-转换。也就是先把源数据原样Load进Hive表再用Hive SQL做标准化和整合充分发挥分布式计算的优势。实操中我一般会在贴源区先做三层动作标准化字段类型、补齐缺失时间分区、标记增量或全量标识。-- 贴源区原始数据加载示例 LOAD DATA INPATH /data/landing/finance/contract/20230801 INTO TABLE ods_finance_contract PARTITION (dt2023-08-01); -- 主题区客户主题整合合并多业务条线客户 INSERT OVERWRITE TABLE dwd_customer_dim SELECT COALESCE(a.cust_id, b.cust_id) AS cust_id, NVL(a.cust_name, b.cust_name) AS cust_name, a.risk_level, b.product_hold_flag, CURRENT_TIMESTAMP AS etl_time FROM ods_loan_customer a FULL OUTER JOIN ods_factoring_customer b ON a.cust_id b.cust_id WHERE a.dt 2023-08-01 OR b.dt 2023-08-01;LOAD DATA命令把源系统推送的增量文件从临时目录搬进贴源区Hive表按日期分区隔离每一天的数据快照。INSERT OVERWRITE是ELT里的核心动作通过FULL OUTER JOIN把供应链金融和保理两套客户数据合并成单一客户视图COALESCE保证客户ID优先取主业务线NVL兜底字段缺失。实际在集团项目里合并逻辑远比这个复杂——同名客户、一人多户、企业关联方识别都要在这一层处理方案里说的“打破业务条线整合数据”指的就是这层动作。2.3 主题区建模的边界第三范式是手段不是目的很多团队在主题区建模时纠结要不要严格遵循第三范式。方案明确写的是“第三范式模型”但实际落地时我做的是折中方案核心维度表客户、协议、产品严格范式化事实表适度冗余。原因是Hive的JOIN成本高过度范式化会让日终批量ETL的时间从2小时拖到6小时。我的经验是主题区保留范式化骨架但允许事实表冗余维度描述字段把JOIN下推到集市区的物化阶段。3. 数据交换层三种采集组件的分工与容错设计数据交换层是整个底座里最容易出故障的地方。方案把交换拆成三类组件数据库数据交换组件结构化数据、大数据交换组件非结构化数据、数据区交换组件平台内部数据流转。很多人以为用Sqoop一把梭就行但真实场景里源系统数据库类型杂、增量识别方式不统一、非结构化数据量大必须分类处理。3.1 数据库数据交换组件Perl轮询 LZO压缩 Hive Load结构化数据的采集链路是云数据推送平台分析源库日志识别增量 → 数据文件落地NAS指定目录 → Perl程序轮询目录获取文件 → 执行质量校验 → 加载到临时区Hive表。#!/usr/bin/perl use strict; use warnings; use File::Basename; my $nas_dir /data/nas/incoming/finance; my $backup_dir /data/nas/backup/finance; my $hive_table tmp_finance_contract; # 轮询目录处理LZO压缩数据文件 opendir(my $dh, $nas_dir) or die Cannot open dir: $!; while (my $file readdir($dh)) { next unless $file ~ /\.lzo$/; my $full_path $nas_dir/$file; # 文件级数据质量核查检查行数、字段数、非法字符 my $line_count wc -l $full_path; chomp $line_count; die Empty file detected: $file if $line_count 0; # 加载到Hive临时表 system(hive -e \LOAD DATA INPATH $full_path INTO TABLE $hive_table\); # 处理完成后移动文件到备份目录 rename($full_path, $backup_dir/$file) or warn Failed to move $file: $!; } closedir($dh);这段Perl脚本是典型的“轮询-校验-加载-归档”四步流程。先正则匹配.lzo后缀文件因为LZO压缩能显著降低NAS存储压力和网络传输开销然后做文件级质量检查空文件和明显异常的文件在进入Hive之前就被拦截避免脏数据污染贴源区加载完成后把源文件移动到备份目录防止重复消费。这里的核心坑点是轮询目录必须考虑并发场景多个接口服务器同时扫描同一个NAS目录会重复加载我一般会用.processing临时后缀标记正在处理的文件。3.2 大数据交换组件SFTP API 爬虫的三条通路非结构化数据的采集方案给了三条通路SFTP批量传输、Java/C调API、网络爬虫。实际项目里的优先级应该是有API优先API没API但有文件推送用SFTP两者都没有才考虑爬虫。爬虫最大的问题不是技术实现而是数据合规和频控策略——# 定时任务每10分钟拉取一次社交媒体数据文件 */10 * * * * /usr/bin/lftp -c open sftp://datausergw.example.com -p 2222; mirror --only-newer --parallel4 /remote/social /data/raw/social; quit /var/log/social_collect.log 21LFTP的mirror参数只同步新增文件避免全量重复拉取。真正要关注的是网络稳定性——大文件传输中断后lftp的断点续传和自动重试机制能省掉大量手工干预。3.3 数据区之间的交换Sqoop、HDFS命令与外部表的边界平台内部的数据交换方案给了三个工具Sqoop集市区和Hadoop之间、HDFS命令行同集群归档、MR程序复杂加工。Sqoop的具体用法# 主题区数据导出到集市区MPP数据库 sqoop export \ --connect jdbc:mysql://10.20.30.40:3306/mart_db \ --username mart_user --password ${MART_PWD} \ --table dim_customer \ --export-dir /warehouse/ads/dim_customer \ --input-fields-terminated-by \001 \ --num-mappers 4 \ --batch注意--input-fields-terminated-by \001Hive默认字段分隔符是ASCII码1如果这里不指定导出的数据会全部串列。--num-mappers 4控制并发度不是越大越好——目标MPP数据库的写入连接数才是瓶颈。4. 流程调度批处理、准实时与归档的三条Pipeline设计数据平台跑不跑得起来看调度。方案里明确区分了三条流程批量处理流程、实时数据处理流程、归档数据处理流程。这三条Pipeline在同一个调度平台上运行但依赖关系、容错策略、资源隔离完全不同。4.1 批量处理链路的依赖编排批量链路的典型依赖是源系统增量落地 → 贴源区加载 → 主题区整合 → 集市区汇总 → BI报表刷新。任何一个环节失败下游都不该启动。workflow namedaily_etl xmlnsuri:oozie:workflow:0.5 start toload_ods/ action nameload_ods hive2 xmlnsuri:oozie:hive2-action:0.2 job-tracker${jobTracker}/job-tracker name-node${nameNode}/name-node jdbc-urljdbc:hive2://hive-server:10000/jdbc-url scriptscripts/load_ods.sql/script /hive2 ok tobuild_dwd/ error tofail_notify/ /action action namebuild_dwd hive2 xmlnsuri:oozie:hive2-action:0.2 job-tracker${jobTracker}/job-tracker name-node${nameNode}/name-node jdbc-urljdbc:hive2://hive-server:10000/jdbc-url scriptscripts/build_dwd.sql/script /hive2 ok tobuild_ads/ error tofail_notify/ /action action namebuild_ads ... ok toend/ error tofail_notify/ /action action namefail_notify email xmlnsuri:oozie:email-action:0.2 to${alertEmail}/to subjectDaily ETL Failed: ${wf:id()}/subject bodyJob ${wf:name()} failed at ${wf:lastErrorNode()}/body /email ok tokill/ error tokill/ /action kill namekill messageETL workflow failed/message /kill end nameend/ /workflowOozie工作流里每个action是独立的Hive脚本执行单元ok to和error to决定依赖走向。黄色警报时不用重启整条链路直接从失败节点rerun即可。这套编排的核心价值是失败隔离——load_ods挂了不会触发build_dwd避免了脏数据层层传递。4.2 准实时链路的取舍消息队列 Storm 的适用边界方案里实时链路用的是消息队列 Storm。这里我想泼一盆冷水集团级管理分析场景90%的需求用准实时1~5分钟延迟就够了没必要上真实时。真正的实时场景只有风控拦截和反欺诈那把延迟降到秒级才有业务意义。如果只是为了驾驶舱的大屏刷新好看完全可以用Sqoop增量抽取或者Canal监听binlog推到Kafka再由Flink做窗口聚合最后写回MPP数据库。4.3 归档链路的技术细节归档是很多人忽略的环节。方案里归档分三类数据文件用copyFromLocal、Hadoop数据区用distcp、集市区用Sqoop。实际执行时要注意# Hadoop集群间数据归档 hadoop distcp \ -D mapred.map.tasks16 \ -D mapred.reduce.tasks0 \ -update -skipcrccheck \ hdfs://prod-cluster:8020/warehouse/dws \ hdfs://archive-cluster:8020/archive/2023/dws-update只复制源端新增或更新的文件避免全量拷贝-skipcrccheck跳过校验和检查因为归档数据不常读没必要为校验付出IO代价。归档完成后要核对文件数和大小是否一致再执行源端清理。提示归档不是“复制一份后删除”而是“先复制→再校验→后清理”。顺序反了数据丢了找不回来。5. 数据管控与BI应用的落点元数据先行质量规则后置校验数据管控层是数字化底座里最容易被“跳过”的部分。很多项目把全部精力砸在ETL和报表上上线三个月后才发现不知道哪张报表的数据是从哪个表来的、源系统改了字段长度导致加载失败、同一个“客户数”指标在不同报表里口径不一致。这些都是元数据管理缺失的账单。5.1 元数据驱动的数据地图我一般建议在项目启动的第一周就建立元数据表而不是等所有ETL开发完再补。最小可用的元数据模型只需要四张表表名关键字段用途meta_table_infotable_name, table_desc, data_region, owner, etl_type登记所有数据区表meta_field_infotable_name, field_name, field_desc, data_type, is_partition记录字段级血缘meta_etl_jobjob_name, src_table, target_table, schedule_time, status维护ETL任务依赖meta_quality_rulerule_id, table_name, field_name, rule_type, threshold配置质量校验规则有了这张数据地图业务方问“这个指标怎么来的”直接查血缘就能回答。比任何BI工具的“数据字典”功能都好用。5.2 质量校验的SQL模板方案里提到“缺乏完整的风险评估体系”数据质量规则是风险评估的基础。我常用的质量校验SQL模式-- 数据质量核查主题区客户表完整性校验 INSERT OVERWRITE TABLE quality_check_result SELECT dwd_customer_dim AS table_name, COUNT(*) AS total_rows, SUM(CASE WHEN cust_id IS NULL THEN 1 ELSE 0 END) AS null_cust_id, SUM(CASE WHEN cust_name THEN 1 ELSE 0 END) AS empty_cust_name, COUNT(DISTINCT cust_id) AS distinct_cust_id, COUNT(DISTINCT cust_id) * 1.0 / NULLIF(COUNT(*), 0) AS unique_ratio FROM dwd_customer_dim WHERE dt ${bizdate}; -- 异常数据落库并告警 INSERT INTO quality_alert_log SELECT dwd_customer_dim AS table_name, unique_ratio_low AS rule_name, 2023-08-01 AS check_date, unique_ratio AS actual_value, 0.95 AS threshold_value, NOW() AS alert_time FROM quality_check_result WHERE unique_ratio 0.95;质量校验做成“先查后告警”第一段SQL把当前表的空值率、唯一率、行数等指标物化到结果表第二段SQL把不满足阈值的指标写入告警日志。之后调度系统扫描告警日志触发通知。这么做的好处是规则可配置——阈值存表不写死在代码里新业务接入时只需INSERT一条规则记录不需要改代码。5.3 BI应用的落地顺序一个主题一个主题打透BI应用不要追求“大而全”。方案里说的“客户360度视图、风险评估体系、KPI指标体系”我建议按“一个主题一个主题打透”的节奏推进。每个主题上线前确保集市区已有对应宽表、元数据已登记、质量规则已配置、BI报表已联调。不要边建数仓边做报表那是两条战线的混乱作战。最后分享一个驾驶舱大屏性能优化的技巧如果BI报表查询超时80%的原因不是MPP数据库不够快而是集市区宽表设计不合理。把最近30天的明细数据按月分表把“集团总览”这类高频指标物化成单行单列的结果表大屏查询时间能从秒级降到百毫秒级——这个动作在方案里叫“预连接、预汇总”在工程里就一句话面向查询建表不面向OLTP建表。本文还有配套的精品资源点击获取
返回列表