大数据-224 离线数仓 架构怎么选型与估算集群规模:Apache vs CDH/HDP,全组件清单+命名规范

62 阅读9分钟

TL;DR

  • 场景:从0搭一套离线数仓,需要框架/组件/服务器/规模估算与命名规范
  • 结论:优先稳定版本组合;发行版更省运维;容量估算要叠加副本+预留+膨胀系数
  • 产出:一套可落地的选型清单、容量/节点估算公式、ODS/DWD/DWS/ADS/DIM命名模板

大数据-224 离线数仓 架构怎么选型与估算集群规模:Apache vs CDH/HDP,全组件清单+命名规范

离线数仓架构图

总体架构设计

技术方案选型

  • 框架选型
  • 软件选型
  • 服务器选型
  • 集群规模的估算

框架选型

Apache或第三方发行版(CDH、HDP、Fusion Insight)

Apache社区版本

优点:

  • 完全开源免费
  • 社区活跃
  • 文档、资料详实

缺点:

  • 复杂的版本管理
  • 复杂的集群安装
  • 复杂的集群运维
  • 复杂的生态环境

第三方发行版本

CDH、HDP、Fusion Insight Hadoop遵从Apache开源协议,用户可以免费的任意的修改并使用Hadoop,正因如此,市面上有很多厂家在ApacheHadoop的基础上开发了自己的产品,如Cloudera的CDH,Hortonworks的HDP,华为的FusionInsight等,这些产品的优点是:

  • 主要功能和社区版本一致
  • 版本管理清晰,比如:Cloudera、CDH3、CDH4等,后面加上补丁的版本:CDH4.1.0 patch
  • 比ApacheHadoop在兼容性、安全性、稳定性上有增强,第三方发行版通常都是经过了大量的测试验证,有众多部署实例,大量的运用到各种生产环境中
  • 版本更新快,如CDH每个季度会有一个Update,每一年都有一个Release
  • 基于稳定版的ApacheHadoop,并应用了最新Bug修复、Feature的patch
  • 提供了部署、安装、配置工具,大大提高了集群的安装效率,可以在几个小时之内安装好集群。
  • 运维简单,提供了管理、监控、诊断、配置修改的工具,管理配置方便,定位问题快速,准确,使运维工作简单,有效

主要的版本有如下的这些:

  • CHD:最成型的发行版本,拥有最多的部署案例,提供强大的部署、管理和监控工具,国内使用最大的版本,拥有强大的社区支持,当遇到问题,能够通过社区、论坛等网络资源快速获取解决方法
  • HDP:100%开源,可以进行二次开发,但没有CDH稳定,国内使用相对较少
  • Fusion Insight:华为基于Hadoop2.7.2版开发的,坚持分层,解耦,开放的原则,得益于高可靠性,在全国各地政府、运营商、金融系统有较多案例

软件选型

  • 数据采集:DataX、Flume、Sqoop、Logstash、Kafka
  • 数据存储:HDFS、HBase
  • 数据计算:Hive、MapReduce、Tez、Spark、Flink
  • 调度系统:Airflow、azkaban、Oozie
  • 元数据管理:Atlas
  • 数据质量管理:Griffin
  • 即席查询:Impala、Kylin、ClickHouse、Presto、Druid
  • 其他:MySQL

框架,软件尽量不要选择最新的版本,选择半年前左右的稳定版本。 离线数仓软件版本

服务器选型

选择物理机还是云主机:

  • 机器成本考虑:物理机的价格 > 云主机的价格
  • 运维成本考虑:物理机需要有专业的运维人员,云主机的运维工作由供应商完成,运维相对容易,成本相对较低

集群规模

如何确认集群规模(假设:每台服务器20T硬盘,128GB内存) 可以从计算能力、CPU、内存、存储量等方面考虑集群规模。 假设:

  • 每天的日活500万,平均每人每天有100条日志信息
  • 每条日志大小1K左右
  • 不考虑历史数据,半年集群不扩容
  • 数据3个副本
  • 离线数据仓库应用

这种情况下,需要多大的集群规模? 要分析的数据有两部分:日志数据+业务数据

  • 每天日志数据量:500W1001K / 1024 / 1024 = 500G
  • 半年需要存储量:500G * 3 * 180 / 1024 = 260T
  • 通常要给磁盘预留 20%-30%的空间: 260*1.25 = 325T
  • 数据仓库应用有1-2倍的数据膨胀325T * 1.5 = 500T
  • 需要大约25个节点

其他未考虑的因素:数据压缩、业务数据 以上估算的生产环境,实际上除了生产环境以外,还需要开发测试环境,这也需要一定数量的机器。

系统逻辑架构

离线数仓系统逻辑架构 服务器软件配置如下所示: 离线数仓服务器软件配置

数据仓库命名规范

数据库命名

  • 命名规则:数仓对应分层
  • 命名示例:ods/dwd/dws/dim/temp/ads

数仓各层对应数据库

  • ods层 => ods_{业务线|业务项目}
  • dw层 => dwd_{业务线|业务项目} + dws_{业务线|业务项目}
  • dim => dim_维表
  • ads => ads_{业务线|业务项目} (统计指标等)
  • 临时数据 => temp_{业务线|业务项目}

(备注:本项目未使用)

表命名(数据库表命名)

数据仓库分层命名规范详解

ODS层(Operation Data Store)

  • 命名格式:ods_{业务线|业务项目}_[数据来源类型]_{业务}
  • 详细说明:
    • 业务线/项目:如finance(金融)、retail(零售)、logistics(物流)
    • 数据来源类型(可选):db(数据库)、log(日志)、api(接口)、file(文件)
    • 业务:具体业务名称,如user_login(用户登录)、order_payment(订单支付)
    • 示例:
      • ods_finance_db_user_info (金融业务线数据库用户信息)
      • ods_retail_log_page_view (零售业务线页面浏览日志)
      • ods_projectX_api_transaction (X项目接口交易数据)

DWD层(Data Warehouse Detail)

  • 命名格式:dwd_{业务线|业务项目}_{主题域}_{子业务}
  • 详细说明:
    • 主题域:如user(用户)、order(订单)、product(商品)、marketing(营销)
    • 子业务:具体业务细分,如register(注册)、pay(支付)、refund(退款)
    • 示例:
      • dwd_finance_user_register (金融用户注册明细)
      • dwd_retail_order_pay (零售订单支付明细)
      • dwd_projectX_product_view (X项目商品浏览明细)

DWS层(Data Warehouse Summary)

  • 命名格式:dws_{业务线|业务项目}_{主题域}_{汇总相关粒度}_{汇总时间周期}
  • 详细说明:
    • 汇总相关粒度:如user(用户级)、shop(店铺级)、city(城市级)
    • 汇总时间周期:d(日)、w(周)、m(月)、q(季)、y(年)
    • 示例:
      • dws_finance_user_balance_d (金融用户余额日汇总)
      • dws_retail_shop_sales_m (零售店铺销售额月汇总)
      • dws_projectX_city_traffic_w (X项目城市流量周汇总)

ADS层(Application Data Store)

  • 命名格式:ads_{业务线|业务项目}_{统计业务}_{报表form|热门排序topN}
  • 详细说明:
    • 统计业务:具体统计指标,如active_user(活跃用户)、conversion_rate(转化率)
    • 报表形式:report(标准报表)、dashboard(仪表盘)、top10(TOP10排行)
    • 示例:
      • ads_finance_active_user_report (金融活跃用户报表)
      • ads_retail_conversion_rate_dashboard (零售转化率仪表盘)
      • ads_projectX_product_sales_top10 (X项目商品销量TOP10)

DIM层(Dimension)

  • 命名格式:dim_{业务线|业务项目|pub公共}_{维度}
  • 详细说明:
    • 公共维度使用pub标识,业务专属维度使用业务线/项目标识
    • 维度:如date(日期)、region(区域)、category(类目)
    • 示例:
      • dim_pub_date (公共日期维度表)
      • dim_finance_region (金融区域维度表)
      • dim_projectX_product_category (X项目商品类目维度表)

应用场景示例

  1. 电商业务完整链路:

    • ODS: ods_retail_db_order_master
    • DWD: dwd_retail_order_payment
    • DWS: dws_retail_shop_sales_d
    • ADS: ads_retail_daily_sales_report
    • DIM: dim_retail_product_category
  2. 金融风控场景:

    • ODS: ods_finance_log_user_behavior
    • DWD: dwd_finance_risk_transaction
    • DWS: dws_finance_user_risk_score_m
    • ADS: ads_finance_risk_alert_top100
    • DIM: dim_pub_region

创建数据库

我们启动Hive,进行操作:

create database if not exists ods;
create database if not exists dwd;
create database if not exists dws;
create database if not exists ads;
create database if not exists dim;
create database if not exists tmp;

执行结果如下图所示: 离线数仓创建数据库

错误速查

症状根因定位修复
集群上线后很快磁盘告急容量估算只算原始日志量,没叠加副本/预留/膨胀/历史保留对照估算链路:原始量→副本→周期→预留→膨胀;核对 HDFS 使用率与增长曲线;把副本数、20–30%预留、1–2倍膨胀写入容量模型;按节点盘位反推节点数并预留扩容空间
组件能装起来但频繁兼容问题追新版本或混装版本,生态兼容矩阵没做逐项核对:Hadoop/Hive/Tez/Spark/HBase/Kafka 依赖与编译目标;看发行版支持列表;采用发行版推荐组合或锁定社区稳定组合;避免“最新”并做组件版本统一规划
安装部署周期过长、反复踩坑纯社区版缺少一体化部署/运维工具,流程复杂统计安装耗时与人工步骤;梳理:安装、配置、监控、诊断的缺口;若资源允许选发行版;若社区版则明确自动化(Ansible/脚本)与监控告警体系
运维定位慢、改配置风险大缺少集中管理、监控、诊断工具与配置变更流程复盘故障:监控指标缺失、日志分散、配置无审计;引入统一管理与监控;建立配置变更流程与回滚机制;关键组件日志集中化
数仓分层混乱、表名不可读无统一命名规范或规范未覆盖来源/主题/粒度/周期抽样检查 ODS/DWD/DWS/ADS/DIM 是否能从表名读出含义;按给定模板固化:ODS含来源类型;DWD含主题域与子业务;DWS含粒度与周期;ADS含报表形态;DIM区分pub与业务线
Hive建库建表后权限/资源冲突环境隔离不足,生产/测试/开发共用资源或缺少资源队列检查是否区分环境;看 Yarn/队列、Hive metastore、HDFS 目录规划;明确开发/测试/生产环境资源与元数据隔离;按环境划分队列与存储路径

其他系列

🚀 AI篇持续更新中(长期更新)

AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用AI工具指南! AI研究-132 Java 生态前沿 2025:Spring、Quarkus、GraalVM、CRaC 与云原生落地

💻 Java篇持续更新中(长期更新)

Java-218 RocketMQ Java API 实战:同步/异步 Producer 与 Pull/Push Consumer MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务已完结,Dubbo已完结,MySQL已完结,MongoDB已完结,Neo4j已完结,FastDFS 已完结,OSS已完结,GuavaCache已完结,EVCache已完结,RabbitMQ已完结,RocketMQ正在更新... 深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解