一、大数据数据仓库的架构:



### --- 架构体系

~~~     # 离线大数据架构:
~~~     HDFS存储,hive、mr、spark进行离线计算的传统大数据架构;



~~~     # Lambda架构:
~~~     在离线大数据架构的基础上增加新链路用于实时数据处理,需要维护离线处理和实时处理两套代码;

~~~     # Kappa架构:
~~~     批流合一,离线处理和实时处理整合成一套代码,运维成本小,这就是现今flink之所以火的原因。
~~~     Kappa架构已成为数据仓库架构的新趋势。



~~~     # 计算框架选型:
~~~     storm/flink等实时计算框架,强烈推荐flink,
~~~     其『批量合一』的特性及活跃的开源社区,有逐渐替代spark的趋势。

~~~     # 数据存储选型:
~~~     首要考虑查询效率,其次是插入、更新等问题,可选择apache druid,不过在数据更新上存在缺陷,
~~~     选型时注意该问题频繁更新的数据建议不要采用该方案。
~~~     当然存储这块需要具体问题具体分析,不同场景下hbase、redis等都是可选项。



~~~     # 实时数仓分层:
~~~     为更好的统一管理数据,实时数仓可采用离线数仓的数据模型进行分层处理,
~~~     可以分为实时明细层写入druid等查询效率高的存储方便下游使用;
~~~     轻度汇总层对数据进行汇总分析后供下游使用。

~~~     # 数据流转方案:
~~~     实时数仓的数据来源可以为kafka消息队列,
~~~     这样可以做到队列中的数据即可以写入数据湖或者数据仓库用于批量分析,
~~~     也可以实时处理,下游可以写入数据集市供业务使用。



~~~     # 那么什么是数据湖呢?
~~~     其实数据湖就是一个集中存储数据库,用于存储所有结构化和非结构化数据。
~~~     数据湖可用其原生格式存储任何类型的数据,这是没有大小限制。
~~~     数据湖的开发主要是为了处理大数据量,擅长处理非结构化数据。

~~~     # 我们通常会将所有数据移动到数据湖中不进行转换。
~~~     数据湖中的每个数据元素都会分配一个唯一的标识符,
~~~     并对其进行标记,以后可通过查询找到该元素。这样做技术能够方便我们更好的储存数据。



~~~     # 那么什么是数据仓库呢?

~~~     数据仓库是位于多个数据库上的大容量存储库。它的作用是存储大量的结构化数据,
~~~     并能进行频繁和可重复的分析。
~~~     通常情况下,数据仓库用于汇集来自各种结构化源的数据以进行分析,通常用于商业分析目的。
~~~     (注意:一些数据仓库也可以处理非结构化数据,这个不是我们的重点)。



### --- 数据湖和数据仓库之间的差异

~~~     那么数据湖和数据仓库之间的主要差异是什么呢?
~~~     在储存方面上,数据湖中数据为非结构化的,所有数据都保持原始形式。
~~~     存储所有数据,并且仅在分析时再进行转换。
~~~     数据仓库就是数据通常从事务系统中提取。
~~~     在将数据加载到数据仓库之前,会对数据进行清理与转换。
~~~     在数据抓取中数据湖就是捕获半结构化和非结构化数据。
~~~     而数据仓库则是捕获结构化数据并将其按模式组织。
~~~     数据湖的目的就是数据湖非常适合深入分析的非结构化数据。
~~~     数据科学家可能会用具有预测建模和统计分析等功能的高级分析工具。
~~~     而数据仓库就是数据仓库非常适用于月度报告等操作用途,因为它具有高度结构化。
~~~     在架构方面数据湖通常是在存储数据之后定义架构。使用较少的初始工作并提供更大的灵活性。
~~~     在数据仓库中存储数据之前定义架构。
~~~     这需要你清理和规范化数据,这意味着架构的灵活性要低不少。
~~~     其实数据仓库和数据湖是我们都需要的地方,数据仓库非常适用于业务实践中常见的可重复报告。
~~~     当我们执行不太直接的分析时,数据湖就很有用。



二、Lambda架构



### --- Lambda架构

~~~     Nathan Marz针对通用的,可扩展的和容错的数据处理架构提出了术语Lambda Architecture。
~~~     它是一种旨在通过利用批处理和流处理这两者的优势来处理大量数据的数据处理架构。



### --- 图层:从宏观角度看,它的处理流程如下:

~~~     所有进入系统的数据都被分配到批处理层和速度层进行处理。
~~~     批处理层管理主数据集(一个不可变的,仅可扩展的原始数据集)并预先计算批处理视图。
~~~     服务层对批处理视图进行索引,以便可以在低延迟的情况下进行点对点查询。
~~~     速度层只处理最近的数据。
~~~     任何传入的查询都必须通过合并来自批量视图和实时视图的结果来得到结果。




离线数仓的架构主要有哪几种 离线数据处理架构_java


### --- 实现

~~~     有多种实现Lambda体系结构的方法,因为它对于每个层的底层解决方案都是不可知的。
~~~     每一层都需要底层实现的特定功能,这可能有助于做出更好的选择并避免过度的决定:
~~~     批处理层:一次写入,批量读取多次
~~~     服务层:随机读取,不随机写入; 批量计算和批量写入
~~~     速度层:随机读取,随机写入; 增量计算


离线数仓的架构主要有哪几种 离线数据处理架构_数据仓库_02