大数据框架介绍 hadoop, spark, storm, flink, samza

667 阅读9分钟

仅批处理框架

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的简单融合

image.png

  • 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生态圈的一部分呢