大数据Spark企业级实战版【学习笔记】-----Spark Streaming 的构架

1.3.2.1 Spark Streaming 的构架

     计算流程:Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark,也就是把Spark Streaming的输入数据按照batch size(如1秒)分成一段一段的数据(DiscretizedStream),每一段数据转换成Spark中的RDD,然后将Spark Streaming中对DStream的Transformation(转换)操作变为Spark中对RDD的Transformation(转换)操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行叠加,或者存储到外部设备上。

       Spark Streaming流程图如图1-46所示:

       大数据Spark企业级实战版【学习笔记】-----Spark Streaming 的构架_第1张图片

       容错性:对于流式计算来说,容错性至关重要。每一个RDD都是一个不可变的分布式可重算的数据集,其记录着确定性的操作继承关系(linage)只要输入数据是可容错的,那么任意一个RDD的分区(Partition)出错或者不可用,都是可以利用原始输入数据通过转换操作而重新算出的

       对于Spark Streaming来说,其RDD的传承关系如图1-47所示:

      大数据Spark企业级实战版【学习笔记】-----Spark Streaming 的构架_第2张图片

       图中的每一个椭圆形表示一个RDD,椭圆形中的每个圆形代表一个RDD中的一个Partition(分区),图中的每一列的多个RDD表示一个DStream(图中有3个DStream),而每一行最后一个RDD则表示每一个Batch Size所产生的中间结果RDD。

图中的每一个RDD都是通过lineage相连接,由于SparkStreaming输入数据可以来自于磁盘,例如HDFS或是来自于网络的数据流(Spark Streaming会将网络输入数据的每一个数据流复制两份到其他机器)都能保证容错性。所以RDD中任意的Partition出错,都可以并行地在其他机器上将缺失的Partition计算出来。这个容错恢复方式比连续计算模型(如Storm)的效率更高。

       实时性:Spark Streaming将流式计算分解成多个Spark Job,对于每一段数据的处理都会经过SparkDAG图分解,以及Spark的任务集的调度过程。对于目前版本的SparkStreaming而言,其最小的Batch Size的选取在0.5~2秒之间(Stor目前最小的延迟是100ms左右),所以SparkStreaming能够满足除对实时性要求非常高(如高频实时交易)之外的所有流式实时计算场景。

       扩展性与吞吐量:Spark目前在EC2上已经能够线性扩展到100个节点(每个节点4Core),可以以数秒的延迟处理6GB/s的数据量(60MB records/s)其吞吐量也比流行的Storm高2~5倍。图1-48是Berkeley利用WordCount和Grep两个用例所做的测试,在Grep这个测试中,Spark Streaming中的每个节点的吞吐量是670KBrecords/s,而Storm是115KBrecords/s。

       大数据Spark企业级实战版【学习笔记】-----Spark Streaming 的构架_第3张图片

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