企业数据湖和Lambda架构原理——实践技术组件、各模块涉及的技术框架(一)(间断持续更新…)
目录
- 数据湖概览
- Lambda架构:一种数据湖的实现模式
- 数据湖中Lambda中的应用
- 数据获取层
- 批数据获取:Apache Sqoop
- 流数据获取:Apache Flume
- 消息层
- Kafaka消息中间件
- 数据处理层
- Apache Flink
- 数据存储
- Apache Hadoop
- 全文索引
- Elasticsearch
一、数据湖概览
数据获取 | 数据处理 | 数据分析 | 数据存储 |
---|---|---|---|
数据可能以不同的形式存在,可能需要不同的机制来获取他们;尽量获取最原始的数据,数据在获取过程中成为数据湖的一部分 | 获取到的数据需要进一步进行处理,从而得到有用的信息,如商品推荐、业务洞察力等,此时可能会用到机器学习技术;数据可能会被转换为等价的模型,但同时会保留原始数据 | 数据会进一步被分析,以便按需访问;数据分析需求受信息访问模式驱动 | 数据分析结果需要存储在合适的数据存储系统中;数据湖中的数据存储系统的选择依赖具体的数据服务需求 |
数据湖 | 数据仓库 |
---|---|
能处理所有类型的数据,如结构化,半结构化,非结构化等,数据的类型依赖于数据源系统的原始数据格式 | 只能对结构化数据进行处理,而且这些数据必须与数据仓库定义的数据模型吻合 |
拥有足够强的计算能力用于处理和分析所有类型的数据,分析后的数据会被存储起来供用户使用 | 处理结构化数据,将他们或者转化为多维数据,报表,以满足后续的高级报表和数据分析需求 |
数据湖通常包含更多的相关信息,这些信息被访问的概率很高,并且能够为企业挖掘新的运营需求 | 通常用于存储和维护长期数据,因此数据可以按需访问 |
- 数据摄取层——摄取数据用于处理和存储
将数据快速的传递到Lambda架构的工作模型中,负责消费消息层中的数据,对消息做适当的转换,从中提取所期望的信息,然后交给Lambda处理。
- 批处理层——批量处理已提取数据
对已提取数据进行批量处理,以确保系统资源的最佳利用,同时也可将长时间运行的操作应用于数据,以确保输出数据的高质量。
- 快速处理层——近实时处理数据
对从数据摄取层获取到的数据执行近实时处理。
- 数据存储层——存储所有数据
定义整个解决方案对传入时间/数据流的反应。
- 服务层——数据交付于导出
数据可以以多种方式在系统间传递,其中最重要的一种方式就是服务(service),在数据湖背景中,这些服务被称为数据服务,因此他们的主要功能是传输数据;另外一种传输数据的方式是数据导出,数据最终可导出为多种格式,如消息、文件、数据备份等,导出的数据供其他系统消费。
- 数据获取层——从源系统获取数据
将数据转换为在数据湖中可进行后续处理的消息,因此获取层必须能适应多种数据模式,同时必须支持快速的连接机制,无缝推送所有转换过的数据消息到数据湖中去。
- 消息层——数据传输的保障
即消息中间件,主要作用是让数据湖个组件之间解耦,同时保证消息传递的安全性。
- Lambda层(绝大部分大数据架构大同小异)
批处理层;
快速处理层;
服务层;
数据存储层;
关系数据存储;
分布式数据存储;
二、Lambda架构
- 容错原则:即处理硬件错误,软件错误或人工引起的错误的能力
- 不可变数据原则:从各个源系统导入的数据应该按他们的原始数据格式来存储
- 重新计算原则:数据湖中的原始数据一直处于可访问的状态,始终可以通过计算来满足新的需求
Lambda架构 | 作用及特点 |
---|---|
批处理层 | 存储不可变的数据,数据量不断增长,随时重新计算视图 |
快速处理层 | 不间断的数据流;存储可变的数据;数据量较小;视图只能在指定的时间段内存在并且没过一段时间就会被丢弃 |
服务层 | 负责索引并确保对外暴露的批处理视图工作良好;对外暴露由快速处理层创建的实时视图;将批处理层和快速处理层的视图合并统一 |
- 数据以原始格式存储
- 原则中包括了重新计算原则,有助于纠正错误,不会有太大的额外开销
- 将不同的职能划分重新定义为明确、边界清晰的功能模块层
- 可插拔
三、Lambda的应用简介
Hortonworks:提升了Hadoop存储层的性能;增强了Hadoop平台的可用性。
Cloudera:提供特定的集群管理功能。
MapR:独特的MapRFS功能;集成了多种文件系统,包括NFS;提供对多节点NFS直接访问的支持。
HDFS分布式数据存储系统
NameNode服务器:负责调度和追踪散布在集群中的job。
SecondaryNameNode服务:记录Hadoop集群的内存快照,追踪预写式日志及事务属性,备份集群状态;注意,不是NameNode的备份节点,只是用来记录快照。
YARN:整个Hadoop集群的资源管理者,主要作用为单点故障恢复,任务重启。
数据存储结点DataNode:数据默认备份共3份。
Flume用于数据获取
Source用于连接数据源,其中有很多内置的connector。
Channel用于事件路由,可以理解为一个消息中间件,暂存事件/消息或发送给Sink。
Sink作为事件目的地,代表目标系统的connector。
Spark Streaming用于实时处理
DStream是一个基本的抽象概念,表示一个连续的流,要么从远端接入数据流,要么通过转换输入流生成已处理数据流;由一串连续的RDD表示,这是Spark对不可变的分布式数据集的抽象,数据流中的每个RDD都包含特定间隔的数据。
DataFrame代表数据处理操作被允许的时间窗口,被处理的数据集也是基于时间窗口。简单而言就是执行SQL。
Flink克服了Spark Streaming的限制
支持基于时间、计数和会话的window
Flume、Spark Streaming和Flink的关键区别
Flume | Spark Streaming | Flink |
---|---|---|
对于数据获取而言,Flume主要充当事件生产者的角色。通过实现自定义的Sink,Flume可用于流式数据处理 | 提供 流处理能力作为Hadoop的一部分,并提供跨节点拓扑的流式处理 | 与运行在集群之上,基于内存的近实时处理框架 |
通过增加Sink提供可扩展性,配置是静态的,如要修改,需要重启 | 支持对基于集群节点的拓扑的动态扩展 | 支持基于集群节点的处理拓扑的动态扩展 |
数据处理以事件为单位,为实时场景提供了单次处理和批处理支持 | 以微批处理方式处理数据,会导致一定的延时,对时间要求高的应用达不到预期的效果 | 近实时方式处理数据 |
对每个事件至少处理一次,有可能重复处理 | 支持最多处理一次,也支持至少处理一次 | 支持只处理一次 |
从数据角度来看,服务层由那些能立即满足用户需要的数据组成。所以这些数据一般都是经过处理之后的有价值的数据。
从客户角度来看,处理过的数据有可能存在于物化视图、数据服务当中,或者经服务导出,或者由报表直接展示。
可构建数据湖的数据服务层的技术
数据服务层组件 | 技术 |
---|---|
关系数据库 | PostgreSQL |
大数据表、视图 | Hive、Impala |
索引 | Elasticsearch |
NoSQL | HBase、Couchbase |
数据服务 | Spring Boot Service |
数据导出 | Hadoop MapReduce、Sqoop、Pig Scripts |
数据发布 | JMS、Kafka |
四、Sqoop
五、Flume
六、Kafka
七、Flink
八、Hadoop
九、Elasticsearch
十、技术整合
整个数据湖已经实现的部分组件,注意:是实现的部分组件,不是绝对的完整的数据湖!
【图片】
数据湖中各组件的作用
HDFS | 分布式文件存储 |
---|---|
MapReduce | 批处理引擎 |
YARN | 资源调度管理 |
HBase | 列式键值对Nosql数据库,运行在HDFS之上 |
Hive | 查询引擎,提供了Hql类似于sql的对HDFS中的数据进行查询的接口 |
Impala | 快速查询引擎,对HDFS 中数据进行查询分析 |
Sqoop | 数据获取 |
Flume | 数据获取及流式事件数据摄取 |
Kafka | 可扩展分布式消息引擎 |
Flink | 实时处理引擎,也支持批处理 |
Spark | 快速批处理数据引擎,以微批处理的方式进行实时处理 |
Elasticsearch | 基于Lucene的快速分布式索引引擎,也可作为基于文本的NoSQL数据存储 |