图),即DAG,借此处理器可以对任务进⾏更智能的协调。
为了实现内存中批计算,Spark会使⽤⼀种名为Resilient Distributed Dataset(弹性分布式数据集),即RDD的模型来处理数据。这是⼀种代表数据集,只位于内存中,永恒不变的结构。针对RDD执⾏的操作可⽣成新的RDD。每个RDD可通过世系(Lineage)回溯⾄⽗级RDD,并最终回溯⾄磁盘上的数据。Spark可通过RDD在⽆需将每个操作的结果写回磁盘的前提下实现容错。
流处理模式
流处理能⼒是由Spark Streaming实现的。Spark本⾝在设计上主要⾯向批处理⼯作负载,为了弥补引擎设计和流处理⼯作负载特征⽅⾯的差异,Spark实现了⼀种叫做微批(Micro-batch)*的概念。在具体策略⽅⾯该技术可以将数据流视作⼀系列⾮常⼩的“批”,借此即可通过批处理引擎的原⽣语义进⾏处理。
Spark Streaming会以亚秒级增量对流进⾏缓冲,随后这些缓冲会作为⼩规模的固定数据集进⾏批处理。这种⽅式的实际效果⾮常好,但相⽐真正的流处理框架在性能⽅⾯依然存在不⾜。
优势和局限
使⽤Spark⽽⾮Hadoop MapReduce的主要原因是速度。在内存计算策略和先进的DAG调度等机制的
帮助下,Spark可以⽤更快速度处理相同的数据集。
Spark的另⼀个重要优势在于多样性。该产品可作为独⽴集部署,或与现有Hadoop集集成。该产品可运⾏批处理和流处理,运⾏⼀个集即可处理不同类型的任务。
除了引擎⾃⾝的能⼒外,围绕Spark还建⽴了包含各种库的⽣态系统,可为机器学习、交互式查询等任务提供更好的⽀持。相⽐
MapReduce,Spark任务更是“众所周知”地易于编写,因此可⼤幅提⾼⽣产⼒。
为流处理系统采⽤批处理的⽅法,需要对进⼊系统的数据进⾏缓冲。缓冲机制使得该技术可以处理⾮常⼤量的传⼊数据,提⾼整体吞吐率,但等待缓冲区清空也会导致延迟增⾼。这意味着Spark Streaming可能不适合处理对延迟有较⾼要求的⼯作负载。
由于内存通常⽐磁盘空间更贵,因此相⽐基于磁盘的系统,Spark成本更⾼。然⽽处理速度的提升意味着可以更快速完成任务,在需要按照⼩时数为资源付费的环境中,这⼀特性通常可以抵消增加的成本。
Spark内存计算这⼀设计的另⼀个后果是,如果部署在共享的集中可能会遇到资源不⾜的问题。相⽐Hadoop MapReduce,Spark的资源消耗更⼤,可能会对需要在同⼀时间使⽤集的其他任务产⽣影
响。从本质来看,Spark更不适合与Hadoop堆栈的其他组件共存⼀处。
总结
Spark是多样化⼯作负载处理任务的最佳选择。Spark批处理能⼒以更⾼内存占⽤为代价提供了⽆与伦⽐的速度优势。对于重视吞吐率⽽⾮延迟的⼯作负载,则⽐较适合使⽤Spark Streaming作为流处理解决⽅案。大数据etl工具有哪些
Apache Flink
Apache Flink是⼀种可以处理批处理任务的流处理框架。该技术可将批处理数据视作具备有限边界的数据流,借此将批处理任务作为流处理的⼦集加以处理。为所有处理任务采取流处理为先的⽅法会产⽣⼀系列有趣的副作⽤。
这种流处理为先的⽅法也叫做Kappa架构,与之相对的是更加被⼴为⼈知的Lambda架构(该架构中使⽤批处理作为主要处理⽅法,使⽤流作为补充并提供早期未经提炼的结果)。Kappa架构中会对⼀切进⾏流处理,借此对模型进⾏简化,⽽这⼀切是在最近流处理引擎逐渐成熟后才可⾏的。
流处理模型
Flink的流处理模型在处理传⼊数据时会将每⼀项视作真正的数据流。Flink提供的DataStream API可⽤于处理⽆尽的数据流。Flink可配合使⽤的基本组件包括:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论