企业数据湖和Lambda架构原理——实践技术组件、各模块涉及的技术框架(一)

企业数据湖和Lambda架构原理——实践技术组件、各模块涉及的技术框架(一)(间断持续更新…)

目录

  • 数据湖概览
  • Lambda架构:一种数据湖的实现模式
  • 数据湖中Lambda中的应用
  • 数据获取层
    1. 批数据获取:Apache Sqoop
    2. 流数据获取:Apache Flume
  • 消息层
    1. Kafaka消息中间件
  • 数据处理层
    1. Apache Flink
  • 数据存储
    1. Apache Hadoop
  • 全文索引
    1. Elasticsearch

一、数据湖概览

  • 数据湖是如何工作的
数据获取
数据处理
数据分析
数据存储
数据获取 数据处理 数据分析 数据存储
数据可能以不同的形式存在,可能需要不同的机制来获取他们;尽量获取最原始的数据,数据在获取过程中成为数据湖的一部分 获取到的数据需要进一步进行处理,从而得到有用的信息,如商品推荐、业务洞察力等,此时可能会用到机器学习技术;数据可能会被转换为等价的模型,但同时会保留原始数据 数据会进一步被分析,以便按需访问;数据分析需求受信息访问模式驱动 数据分析结果需要存储在合适的数据存储系统中;数据湖中的数据存储系统的选择依赖具体的数据服务需求
  • 数据湖和数据仓库的区别
数据湖 数据仓库
能处理所有类型的数据,如结构化,半结构化,非结构化等,数据的类型依赖于数据源系统的原始数据格式 只能对结构化数据进行处理,而且这些数据必须与数据仓库定义的数据模型吻合
拥有足够强的计算能力用于处理和分析所有类型的数据,分析后的数据会被存储起来供用户使用 处理结构化数据,将他们或者转化为多维数据,报表,以满足后续的高级报表和数据分析需求
数据湖通常包含更多的相关信息,这些信息被访问的概率很高,并且能够为企业挖掘新的运营需求 通常用于存储和维护长期数据,因此数据可以按需访问
  • Lambda架构的数据湖
  1. 数据摄取层——摄取数据用于处理和存储

将数据快速的传递到Lambda架构的工作模型中,负责消费消息层中的数据,对消息做适当的转换,从中提取所期望的信息,然后交给Lambda处理。

  1. 批处理层——批量处理已提取数据

对已提取数据进行批量处理,以确保系统资源的最佳利用,同时也可将长时间运行的操作应用于数据,以确保输出数据的高质量。

  1. 快速处理层——近实时处理数据

对从数据摄取层获取到的数据执行近实时处理。

  1. 数据存储层——存储所有数据

定义整个解决方案对传入时间/数据流的反应。

  1. 服务层——数据交付于导出

数据可以以多种方式在系统间传递,其中最重要的一种方式就是服务(service),在数据湖背景中,这些服务被称为数据服务,因此他们的主要功能是传输数据;另外一种传输数据的方式是数据导出,数据最终可导出为多种格式,如消息、文件、数据备份等,导出的数据供其他系统消费。

  1. 数据获取层——从源系统获取数据

将数据转换为在数据湖中可进行后续处理的消息,因此获取层必须能适应多种数据模式,同时必须支持快速的连接机制,无缝推送所有转换过的数据消息到数据湖中去。

系统可靠性/故障恢复
数据
connector推送/拉取
圆角长方形
数据转换
消息发布者
本地缓冲
消息层
  1. 消息层——数据传输的保障

即消息中间件,主要作用是让数据湖个组件之间解耦,同时保证消息传递的安全性。

  1. Lambda层(绝大部分大数据架构大同小异)

批处理层;
快速处理层;
服务层;
数据存储层;
关系数据存储;
分布式数据存储;

二、Lambda架构

  • Lambda架构的原则
  1. 容错原则:即处理硬件错误,软件错误或人工引起的错误的能力
  2. 不可变数据原则:从各个源系统导入的数据应该按他们的原始数据格式来存储
  3. 重新计算原则:数据湖中的原始数据一直处于可访问的状态,始终可以通过计算来满足新的需求
  • Lambda架构完整的工作原理
Lambda架构 作用及特点
批处理层 存储不可变的数据,数据量不断增长,随时重新计算视图
快速处理层 不间断的数据流;存储可变的数据;数据量较小;视图只能在指定的时间段内存在并且没过一段时间就会被丢弃
服务层 负责索引并确保对外暴露的批处理视图工作良好;对外暴露由快速处理层创建的实时视图;将批处理层和快速处理层的视图合并统一
  • 架构优势
  1. 数据以原始格式存储
  2. 原则中包括了重新计算原则,有助于纠正错误,不会有太大的额外开销
  3. 将不同的职能划分重新定义为明确、边界清晰的功能模块层
  4. 可插拔

三、Lambda的应用简介

  1. Hadoop发行版本

Hortonworks:提升了Hadoop存储层的性能;增强了Hadoop平台的可用性。
Cloudera:提供特定的集群管理功能。
MapR:独特的MapRFS功能;集成了多种文件系统,包括NFS;提供对多节点NFS直接访问的支持。

  1. 批处理层和数据处理

HDFS分布式数据存储系统
企业数据湖和Lambda架构原理——实践技术组件、各模块涉及的技术框架(一)_第1张图片

NameNode服务器:负责调度和追踪散布在集群中的job。
SecondaryNameNode服务:记录Hadoop集群的内存快照,追踪预写式日志及事务属性,备份集群状态;注意,不是NameNode的备份节点,只是用来记录快照。
YARN:整个Hadoop集群的资源管理者,主要作用为单点故障恢复,任务重启。
数据存储结点DataNode:数据默认备份共3份。

Flume用于数据获取
企业数据湖和Lambda架构原理——实践技术组件、各模块涉及的技术框架(一)_第2张图片

Source用于连接数据源,其中有很多内置的connector。
Channel用于事件路由,可以理解为一个消息中间件,暂存事件/消息或发送给Sink。
Sink作为事件目的地,代表目标系统的connector。

Spark Streaming用于实时处理
企业数据湖和Lambda架构原理——实践技术组件、各模块涉及的技术框架(一)_第3张图片
企业数据湖和Lambda架构原理——实践技术组件、各模块涉及的技术框架(一)_第4张图片
DStream是一个基本的抽象概念,表示一个连续的流,要么从远端接入数据流,要么通过转换输入流生成已处理数据流;由一串连续的RDD表示,这是Spark对不可变的分布式数据集的抽象,数据流中的每个RDD都包含特定间隔的数据。
DataFrame代表数据处理操作被允许的时间窗口,被处理的数据集也是基于时间窗口。简单而言就是执行SQL。

Flink克服了Spark Streaming的限制
企业数据湖和Lambda架构原理——实践技术组件、各模块涉及的技术框架(一)_第5张图片
支持基于时间、计数和会话的window

Flume、Spark Streaming和Flink的关键区别

Flume Spark Streaming Flink
对于数据获取而言,Flume主要充当事件生产者的角色。通过实现自定义的Sink,Flume可用于流式数据处理 提供 流处理能力作为Hadoop的一部分,并提供跨节点拓扑的流式处理 与运行在集群之上,基于内存的近实时处理框架
通过增加Sink提供可扩展性,配置是静态的,如要修改,需要重启 支持对基于集群节点的拓扑的动态扩展 支持基于集群节点的处理拓扑的动态扩展
数据处理以事件为单位,为实时场景提供了单次处理和批处理支持 以微批处理方式处理数据,会导致一定的延时,对时间要求高的应用达不到预期的效果 近实时方式处理数据
对每个事件至少处理一次,有可能重复处理 支持最多处理一次,也支持至少处理一次 支持只处理一次
  1. 服务层

从数据角度来看,服务层由那些能立即满足用户需要的数据组成。所以这些数据一般都是经过处理之后的有价值的数据。
从客户角度来看,处理过的数据有可能存在于物化视图、数据服务当中,或者经服务导出,或者由报表直接展示。

可构建数据湖的数据服务层的技术

数据服务层组件 技术
关系数据库 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数据存储

数据湖部分技术导览图:(正扩展…)(待完善…)

数据湖
数据获取层
批处理层
快速处理层
数据存储层
服务层
消息层
基础层
Sqoop
Flume
Hive
Spark
Elasticsearch
Spark
Flink
Storm
HDFS
Hbase
Redis
Elasticsearch
Kafka
Zookeeper

你可能感兴趣的:(数据湖,大数据)