仅批处理框架
Hadoop常用于离线的复杂的大数据处理
仅流处理框架
- Samza与和Kafka紧密集成的流处理
- Storm常用于在线的实时的大数据处理。
混合框架
- Spark常用于离线的快速的大数据处理(基于内存)
- Flink可扩展的批处理和流式数据处理的数据处理平台。
Hadoop介绍
- Hadoop是一个分布式系统基础框架, 专用于批处理的处理框架
- 利用集群的威力高速运算和存储
- HDFS(Hadoop Distributed File Sytem)分布式文件系统,高容错性、低廉硬件要求、高吞吐量(High Throughput)
- 可以以流形式访问文件系统中的数据
- 基于CUDA并行架构开发并行程序,发挥GPU并行计算能力
- 核心设计: HDFS和Map Reduce, HDFS为海量数据提供了存储, Map Reduce为海量数据提供了计算
Hadoop的批处理模式
- 来自Map Reduce引擎
- 从HDFS文件系统读取数据集
- 将数据集拆分成小块,并分配给所有可用节点
- 针对每个节点上的数据子集进行计算(计算的中间态结果会重新写回HDFS)
- 重新分配中间态结果并按照键进行分组
- 通过对每个节点计算的结果进行汇总和组合对每个键的值进行Reducing
- 将计算而来的最终结果重新写入HDFS
Hadoop概括原理
- 当向MapReduce框架提交一个计算作业时, 会首先把计算作业拆分成若干个Map任务, 分配到不同的节点上去执行, 每个Map任务处理输入数据的一部分
- 当Map任务完成后, 它会产生一些中间文件,这些文件将会作为Reduce任务的输入数据
- Reduce对数据做进一步处理后, 输出最终结果
- 以上过程Hadoop已经为分布式计算的程序设计提供了良好的编程接口,并且屏蔽了底层通信原理,只需要关注业务逻辑本身
- Map(展开)就是将一个任务分解为多个子任务并行的执行, Reduce就是将分解后多任务处理的结果汇总起来,得到最后的分析结果并输出
- MapReduce的基本要求: 待处理的数据集可以分解成多个小的数据集,且每个小数据集可以完全并行的进行处理
Hadoop优势与局限
- 每个任务要多次写入、读取HDFS,速度相对较慢; 但也意味着可以运行在廉价硬件上
- MapReduce具有极高的缩放潜力,例如数万个节点的应用
- MapReduce的学习曲线较为陡峭
关于Spark
- 批处理为主,流处理为辅, 为了支持分布式数据集上的迭代作业
- 类似Hadoop MapReduce的通用并行框架, Job中间输出结果可以保存在内存, 更好的适用于数据挖掘与机器学习等需要迭代的MapReduce的算法
- 负载方面表现比Hadoop优越,Spark启用了内存分布数据集,能提供交互式查询,以及优化迭代工作负载
- Spark使用Scala语言实现, 紧密集成,Scala可以像操作本地集合对象一样操作分布式数据集
- 可以在Hadoop文件系统中并行运行,通过Mesos等第三方集群框架可以支持此行为
- Spark侧重于完善内存计算和处理优化机制加快批处理的运行速度; Spark可作为独立集群部署(需相应存储层的配合),或可与Hadoop集成并取代MapReduce引擎。
Spark批处理模式
- Spark处理工作全部在内存中进行, 所有中间态处理结果均存储在内存中
- Spark可创建操作、数据、操作和数据之间关系的DAG(Directed Acyclic Graph,有向无环图),处理器可以更智能的协调
- 为了实现内存中批处理,使用Resilient Distributed Dataset(弹性分布式数据集),及RDD的模型来处理数据
- 针对RDD执行的操作可生成新的RDD,每个RDD可通过世袭(Lineage)回溯至父级RDD,并最终回溯至磁盘上的数据
Spark流处理模式
- 由Spark Streaming实现
- 实现了一种微批(Micro-batch), 将数据流视作一系列非常小的批,在批处理引擎的原生语义进行处理
- Spark Stream以亚秒级增量对流进行缓冲,这些缓冲再送至批处理,但还不是真正的流处理框架
Spark的功能特点
- 相比Hadoop, 高级API剥离了对集群本身的关注, 提供了80多个高级运算符
- Spark很快,支持交互式计算和复杂算法, 比Hadoop快100倍
- Spark是一个通用引擎,提供了大量库,如SQL、DataFrames、MLLIb、GraphX、Spark Streaming, 可完成各种运算, 包括SQL查询、文本处理、机器学习。在Spark之前,一般是使用各种各样的引擎来分别处理这些需求。
- 支持多种资源管理器, 如Hadoop YARN, Mesos,以及自带的独立集群管理器
Spark优势和局限
- 比Hadoop更快
- 多样性: 可以独立集群部署,与现有Hadoop集群继承; 可批处理和流处理,一个集群处理不同类型的任务;
- 易学习,Spark任务易于编写。
- 批处理的方式不适合对延迟较高的工作负载, 内存比磁盘的成本更高,但可以通过节省时间方式来抵消。
Flink介绍
- 可以处理批处理任务的流处理框架, 将批处理数据视作具备有限边界的数据流,借此把批处理任务当作流处理的子集来处理
- 这种流处理为主的方法叫Kappa架构,对一切进行流处理,借此对模型进行简化
- 与Kappa架构对应的是Lambda架构(使用批处理为主要处理方法,使用流作为补充)
Flink流处理模型
- Flink把每一项传入的数据视作数据流, DataStream API可用于处理无尽的数据流。
- Stream(流):在系统中流转的,无边界数据集
- Operator(操作方):对数据流执行操作,以产生其他数据流的功能
- Source(源):数据流进入系统的入口点
- Sink(槽):数据流离开Flink系统后到达的未知,可以是数据库或其他系统的连接器
- 流处理任务会在预定时间点创建快照,以便于遇到问题后恢复
- Flink可配合多种状态后端系统使用,实现状态存储
- 流处理还能理解事件时间概念
Flink批处理模型
- 仅仅是对流处理模型的扩展,不再从持续流中读取数据,而是从持久存储中以流的形式读取有边界的数据集
Flink优势和局限
- Flink流处理为先的方法可提供低延迟、高吞吐率、近乎逐项处理的能力
- 对于迭代式任务,会尝试在存储数据的节点上执行相应的计算任务
- 可进行增量迭代,或仅对数据中有改动的部分进行迭代
- 在用户工具方面,Flink提供了基于Web的调度视图,管理任务查看系统状态
- 对于分析类任务,提供类似SQL的查询、图形化处理、机器学习库、支持内存计算
- Flink能很好的与其他组件配合使用,可轻松与YARN、HDFS、Kafka继承。
Flink总结
- 低延迟流处理, 同时支持传统的批处理 = 兼容原生Storm和Hadoop程序, 可以在YARN管理的集群上运行
关于Storm
- 极低延迟的流处理框架
- 可对框架中名为Topology(拓扑)的DAG(Directed Acyclic Graph,有向无环图)进行编排,这些拓扑描述了当数据片段进入系统后,需要对每个传入的片段执行的不同转换或步骤
- 拓扑包含:
-
Stream: 普通数据流, 即会持续抵达系统的无边界数据
-
Spout:位于拓扑边缘的数据流来源,例如可以式API或查询, 从这里可以产生带处理数据
-
Bolt: 代表数据处理步骤,即消耗流数据,对其应用操作,并将结果以流的形式进行输出。Bolt需要与每个Spout建立连接,随后相互连接组成所有必要的处理。在拓扑的尾部,使用最终的Bolt输出与其他系统的输入连接。Storm提供了“至少一次”的处理保证,每条消息至少可以被处理一次(某些情况失败时可能会处理多次)。
-
Hadoop、Spark、Storm的简单融合
- shark是SparkSQL前身, 可以换成SparkSQL
- 蓝色部分是Hadoop生态系统组件, 黄色部分是Spark生态组件,Hadoop提供Spark没有的功能,如HDFS,Spark提供实时内存计算,速度非常快。
- Spark崛起后, Hadoop和Storm中一些组件在消退,如HSQL未来可能会被SparkSQL替代,很多企业都是HIVE SQL和Spark SQL两种工具共存。 MapReduce也有可能被Spark替换; Hadoop的算法库Mahout正被Spark的算法库MLib替代。
- 资源统一管理调度系统: Twitter的Mesos、YARN、Borg、腾讯搜搜的Torca、Facebook Corona等。
- Mesos使用ZooKeepter实现容错复制,使用Linux Containers隔离任务,支持多种西原计划分配(内存和CPU),支持Hadoop、MPI、Hypertable、Spark等。
- 借鉴Mesos,YARN提出了资源隔离解决方案Container,提供Java虚拟机内存的隔离。YARN平台上可以运行多个计算框架,如MR、Tez、Storm、Spark等
Hadoop、Spark、Storem的异同点
- Storm用于高速、大型数据流的分布式实时计算系统。 Sotrm不进行数据的收集和存储工作, 直接通过网络实时的接受数据并且实时的处理数据,然后直接通过网络实时的传回结果。
- Storm特点:基于Hadoop,不收集不存储,实时接收,实时处理,实时传回
- Spark采用内存计算,允许将数据载入内存反复查询,还融合数据仓库、流处理、图形计算等多种计算范式。构建在HDFS上,与Hadoop很好结合。内存断点会丢失数据,Spark不能用于处理需要长期保存的数据。
- Spark特点: 基于Hadoop,计算速度是Hadoop的100倍,基于内存计算,不能提供持久化,低成本优势。
- Hadoop,是当前大数据管理标准之一,是一个生态圈,Spark、Storm、Flink都是Hadoop生态圈的一部分呢