vlambda博客
学习文章列表

说说Spark生态圈(二) | 每日五分钟学大数据

Spark Streaming

Spark Streaming是一个对实时数据流进行高吞吐、高容错的流式处理系统,可以对多种数 据源(如Kafka、Flume> Twitter和ZeroMQ等)进行类似Map、Reduce和Join等复杂操作, 并将结果保存到外部文件系统、数据库或应用到实时仪表盘。相比其他的处理引擎要么只专注于流处理,要么只负责批处理(仅提供需要外部实现的流处理API接口),而 Spark Streaming最大的优势是提供的处理引擎和RDD编程模型可以同时进行批处理与流处理。


对于传统流处理中一次处理一条记录的方式而言,Spark Streaming使用的是将流数据离散化处理(Discretized Streams),通过该处理方式能够进行秒级以下的数据批处理。

在Spark Streaming处理过程中,Receiver并行接收数据,并将数据缓存至Spark工作节点的内存中。经过延迟优化后,Spark引擎对短任务(几十毫秒)能够进行批处理,并且可将结果输出至其他系统中。与传统连续算子模型不同,其模型是静态分配给一个节点进行计算,而Spark可基于数据的来源以及可用资源情况动态分配给工作节点。

使用离散化流数据(DStreaming), Spark Streaming将具有如下特性。

  • 动态负载均衡

    Spark Streaming将数据划分为小批量,通过这种方式可以实现对资源 更细粒度的分配。例如,传统实时流记录处理系统在输入数据流以键值进行分区处理情况下,如果一个节点计算压力较大超岀了负荷,该节点将成为瓶颈,进而拖慢整个系统的处理速度。而在Spark Streaming中,作业任务将会动态地平衡分配给各个节点, 即如果任务处理时间较长,分配的任务数量将少些:如果任务处理时 间较短,则分配的任务数据将更多些。


  • 快速故障恢复机制

    在节点出现故障的情况下,传统流处理系统会在其他的节点上重 启失败的连续算子,并可能重新运行先前数据流处理操作获取部分丟失数据。在此过 程中只有该节点重新处理失败的过程,只有在新节点完成故障前所有计算后,整个系 统才能够处理其他任务。在Spark中,计算将分成许多小的任务,保证能在任何节点 运行后能够正确进行合并。因此,在某节点岀现的故障的情况,这个节点的任务将均 匀地分散到集群中的节点进行计算,相对于传递故障恢复机制能够更快地恢复


  • 批处理、流处理与交互式分析的一体化

    Spark Streaming是将流式计算分解成一系列短小的批处理作业,也就是把Spark Streaming的输入数据按照批处理大小(如几秒) 分成一段一段的离散数据流(DStream),每一段数据都转换成Spark中的RDD,然后将Spark Streaming中对DStream流处理操作变为针对Spark中对RDD的批处理操作。另外,流数据都储存在Spark节点的内存里,用户便能根据所需进行交互查询。正是利用Spark这种工作机制将批处理、流处理与交互式工作结合在一起。



GraphX

GraphX最初是伯克利AMP实验室的一个分布式图计算框架项目,后来整合到Spark中成为一个核心组件。它是Spark中用于图和图并行计算的APL可以认为是GraphLab和Pregel在 Spark上的重写及优化。跟其他分布式图计算框架相比,GraphX最大的优势是:在Spark基础上,提供一栈式数据解决方案,可以高效地完成图计算的完整的流水作业。

GraphX的核心抽象是Resilient Distributed Property Graph, 一种点和边都带属性的有向多重图,GraphX扩展了 Spark RDD的抽象,它有Table和Graph两种视图,但只需要一份物理存储, 两种视图都有自己独有的操作符,从而获得了灵活操作和执行效率。GraphX的整体架构大部分的实现都是围绕Partition的优化进行的,这在某种程度上说明了,点分割的存储和相应的计算优化的确是图计算框架的重点和难点。

GraphX的底层设计有以下几个关键点。

  • 对Graph视图的所有操作,最终都会转换成其关联的Table视图的RDD操作来完成。这样对一个图的计算,最终在逻辑上,等价于一系列RDD的转换过程。因此,Graph最终具备 F RDD 的 3 个关键特性:Immutable、Distributed 和 Fault-Tolerant。其中最关键的是 Immutable (不变性)。逻辑上,所有图的转换和操作都产生了多个新图;物理上,GraphX会有一定程度的不变顶点和边的复用优化,对用户透明。


  • 两种视图底层共用的物理数据,由RDD[Vertex-Partition]和RDD[EdgePartition]这两个 RDD组成。点和边实际都不是以表Collection[tuple]的形式存储的,而是由 VertexPartition/EdgePartition在内部存储一个带索引结构的分片数据块,以加速不同视图下的遍 历速度。不变的索引结构在RDD转换过程中是共用的,降低了计算和存储开销。


  • 图的分布式存储采用点分割模式,而且使用partitionBy方法,由用户指定不同的划分策略(Partitionstrategy),划分策略会将边分配到各个EdgePartition,顶点Master分配到各个 VertexPartition, EdgePartition也会缓存本地边关联点的Ghost副本。划分策略的不同会影响到 所需要缓存的Ghost副本数量,以及每个EdgePartition分配的边的均衡程度,需要根据图的结构特征选取最佳策略。





参考资料以及图片来源(侵删):

图解Spark核心技术与案例实战

Apache Spark 官网(https://spark.apache.org)






- END -

智能人工推荐: