热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据仓库—stg层_数据仓库架构设计

数据仓库经过多年的发展,仓库架构设计也随之多次调整,框架调整的过程中,写入层上,Lambda没有对数据写入进行抽象ÿ

数据仓库经过多年的发展,仓库架构设计也随之多次调整,框架调整的过程中,

写入层上,Lambda 没有对数据写入进行抽象,而是将双写流批系统的一致性问题反推给了写入数据的上层应用;

存储上,以 HDFS 为代表的master dataset 不支持数据更新,持续更新的数据源只能以定期拷贝全量 snapshot 到 HDFS 的方式保持数据更新,数据延迟和成本比较大;

计算逻辑需要分别在流批框架中实现和运行,而在类似 Storm 的流计算框架和Hadoop MR 的批处理框架做 job 开发、调试、问题调查都是比较复杂的;

结果视图需要支持低延迟的查询分析,通常还需要将数据派生到列存分析系统,并保证成本可控。

传统仓库的架构设计

76ccdf0c51efba927668f269f36d5598.png

    根据多年的传统仓库实践经验,基本的框架如上图所示,左边一列表示各个源系统,经过数据交换管理平台处理后进入数据仓库的STG。数据交换管理其实就是仓库的ETL过程,目前常用的方案是使用NAS公共服务管理中间数据。

    管理的公共数据除了数据共享以外,还可以作为数据质量管理的基础,关于数据质量平台,就是通过一系列的检查逻辑检查数据的合理性,完备性,规范性;目前一般关于这部分的检查都在使用数据仓库的资源来进行的,比如分配到STG层,PDM层甚至集市层验证数据质量,这样导致的后果是比较占用数据仓库的资源。关于数据质量这块其实最大的问题还是换行符,特殊字符等等的检测,一个比较好的拆分是使用ETL服务器的资源计算数据质量的情况。

    STG保存当天的数据,STGFULL保存当前全量的数据;

    STG和STGFULL经过整合进入PDM模型,在金融系统一般采用范式建模,分成几大主题分类管理。

    模型处理后进入公共计算层CDS,CDS主要做公用的计算,比如指标管理平台可以以CDS为基础,模型提供的是通用的数据整合服务,CDS提供更加精细的业务数据计算。

    仓库对外就是各种的应用系统和BI报表之类的平台,关于仓库对外的接口,需要讨论一下,传统仓库对外一般通过批量文件进行交换。但是仓库的优点是适合计算不适合导数之类的工作,如果仓库里面大范围的导数会很吃资源,需要集中管理起来。

    此外还有数据管控平台和元数据管理系统,元数据管理系统可以通过ETL采集各个源的元数据再整合仓库内部的元数据形成统一的元数据管理;

    数据管控平台更多的涉及数据资产管理相关。

     老胡点评:

    传统大数据架构其定位是为了解决传统BI的问题。这样做的优点是简单、易懂,但是缺点也非常的明显,对业务支撑的灵活度不够,对于存在大量报表或复杂钻取的场景,需要太多的手工定制化,同时该架构依旧以批处理为主,缺乏实时的支撑。

流式架构

0697a92e4c09518770f20e8dce363d5e.png

    流式架构直接去掉了批处理,数据全程以流的形式处理,数据接入端没有了ETL,转而替换为数据通道,常用的数据通道工具就是kafka。

    流处理加工后的数据,部分以消息的形式直接推送给了消费者。部分存储供重复使用。

    这样的架构没有ETL过程,数据的实效性非常高。但是由于不存在批处理,因此对于数据的历史统计无法很好的支撑。对于离线分析仅仅支撑窗口之内的分析。

    老胡点评:

    纯流式的架构比较激进,但是也有适用适用场景,比如预警、监控、对数据有有效期要求的情况等等。

Lambda架构

d84ca2502c1acc2aa82fe42b478dd7fc.png

    目前大多数架构基本都是Lambda架构或者基于其变种的架构。

    Lambda的数据通道分为两条分支:实时流和离线。实时流依照流式架构,保障了其实时性,而离线则以批处理方式为主,保障了最终一致性。

    流式通道处理为保障实效性更多的以增量计算为主辅助参考,而批处理层则对数据进行全量运算,保障其最终的一致性。

    Lambda 架构的实时和批量部分具有相同的计算逻辑,并且在查询阶段合并batch view和real-time view的计算视图并展示给用户。

    但是批处理相对简单不易出现错误,而流处理相对不太可靠,因此流处理器可以使用近似算法,快速产生对视图的近似更新,而批处理系统会采用较慢的精确算法,产生相同视图的校正版本。

    老胡点评:

    为了保证不断变化的历史数据和实时数据的查询需求,Lambda 架构使用合并批处理视图和流处理视图的方式,很巧妙的满足了相关需求。

这种方法既有实时又有离线,全面的覆盖了各个场景,这种方式有一个缺点就是相同的脚本要维护两套,不管开发测试,两套保持一致。

    另外在数据的写入方面,显然一边是增量,一边是全量,这种可能需要上层应用进行控制;

Kappa架构

9b558184ce7e46cc387ae4e296e730d5.png

    不同于Lambda 同时计算流计算和批计算并合并视图,Kappa 只会通过流计算一条的数据链路计算并产生视图。

    Kappa严格依赖Kafka,因为历史和当前的数据都在Kafka中,那么Kafka的保存日期的长度就需要查询的最长历史长度。

    当需要全量计算时,重新起一个流计算实例,从头开始读取数据进行处理,并输出到一个结果存储中。    

    当新的实例完成后,停止老的流计算实例,并把老的一引起结果删除。

    Kappa 架构只保留了速度层而缺少批处理层,在速度层上处理大规模数据可能会有数据更新出错的情况发生,这就需要我们花费更多的时间在处理这些错误异常上面。

    针对一些开放的分析需求,具有很好的适用性。

但它依然没有解决存储和展示的问题,特别是在存储上,使用类似 kafka 的消息队列存储长期日志数据,数据无法压缩,存储成本很大。

    Kappa 不是 Lambda 的替代架构,而是其简化版本,Kappa 放弃了对批处理的支持,更擅长例如各种时序数据场景,天然存在时间窗口的概念,流式计算直接满足其实时计算和历史补偿任务需求;

    Lambda 直接支持批处理,因此更适合对历史数据有很多 ad hoc 查询的需求的场景,比如数据分析师需要按任意条件组合对历史数据进行探索性的分析,并且有一定的实时性需求,期望尽快得到分析结果,批处理可以更直接高效地满足这些需求。

典型大数据架构的情况和问题

d586f43efcb77662f3fd1c195f570115.png

 市面上有很多存储的开源产品,每种产品都有其适用场景,比如基于离线存储的Hive,Hive除了离线存储还可以做离线批量。

    kafka作为消息中间件,更多的作为实时批量的源,Flink或者spark stream 作为实时批量组件。

    HBase、Cassandra主要提供点查询能力,比如指标可视化相关,但是只有点查而缺少分析能力。

    为解决数据分析问题,组件Druid和Clickhouse则提供分析功能。

    Drill或者Presto可以设计为了对实时数据和离线数据做一个联邦查询。

    但以上的每个存储产品都形成了一个又一个的数据孤岛。



推荐阅读
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节
    揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
author-avatar
郎郎2502918483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有