说说Spark生态圈(二) | 每日五分钟学大数据
动态负载均衡
Spark Streaming将数据划分为小批量,通过这种方式可以实现对资源 更细粒度的分配。例如,传统实时流记录处理系统在输入数据流以键值进行分区处理情况下,如果一个节点计算压力较大超岀了负荷,该节点将成为瓶颈,进而拖慢整个系统的处理速度。而在Spark Streaming中,作业任务将会动态地平衡分配给各个节点, 即如果任务处理时间较长,分配的任务数量将少些:如果任务处理时 间较短,则分配的任务数据将更多些。
快速故障恢复机制
在节点出现故障的情况下,传统流处理系统会在其他的节点上重 启失败的连续算子,并可能重新运行先前数据流处理操作获取部分丟失数据。在此过 程中只有该节点重新处理失败的过程,只有在新节点完成故障前所有计算后,整个系 统才能够处理其他任务。在Spark中,计算将分成许多小的任务,保证能在任何节点 运行后能够正确进行合并。因此,在某节点岀现的故障的情况,这个节点的任务将均 匀地分散到集群中的节点进行计算,相对于传递故障恢复机制能够更快地恢复
批处理、流处理与交互式分析的一体化
Spark Streaming是将流式计算分解成一系列短小的批处理作业,也就是把Spark Streaming的输入数据按照批处理大小(如几秒) 分成一段一段的离散数据流(DStream),每一段数据都转换成Spark中的RDD,然后将Spark Streaming中对DStream流处理操作变为针对Spark中对RDD的批处理操作。另外,流数据都储存在Spark节点的内存里,用户便能根据所需进行交互查询。正是利用Spark这种工作机制将批处理、流处理与交互式工作结合在一起。
对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)