spark系列(一):简介

spark是一种快速、通用、可扩展的大数据分析引擎。spark除了提供核心的api外,为了更方便使用,针对更具体的场景提供了解决方案。spark提供了用于交互查询的spark SQL、流处理spark Streaming、机器学习spark MLlib和图计算spark GraphX。

spark系列(一):简介

spark能力分布

spark具有如下优点:

与Hadoop提供的Map/Reduce相比,spark速度更快。这得益于其对缓存的充分利用。我们知道Map/Reduce模式下,在shuffle阶段,Map的结果会被写入本地文件中,Reduce时会通过网络去读取文件中的数据。在Reduce任务完成之后,结果又会被写到HDFS中。在一次Map/Reduce任务中,数据会被多次写入到磁盘中。而spark则会充分的利用内存。spark在计算时,会将job划分成几个stage,不存在依赖的stage是可以并行执行的。在stage内部,数据没有超出内存阈值的情况下,是不会写入磁盘的。在不同stage之间的shuffle阶段,spark也会尽量本地化的调度任务,避免数据的移动。

spark同时也具有很好的易用性。spark提供了java、scala和python编程接口,上面我们也看到针对不同的具体场景提供了不同的实现。RDD的设计,简化了学习成本。另外,spark提供了丰富的算子,便于程序的编写。

良好的扩展性。目前支持Standalone、Mesos、Yarn和k8s的调度模式。

spark的大体架构如下:

spark系列(一):简介

spark架构

其中,Driver是用户编写的数据处理逻辑,这个逻辑中包含用户创建的SparkContext。SparkContext是用户逻辑与spark集群主要的交互接口,它会和Cluster Manager交互,包括申请计算资源等。Cluster Manager负责集群的资源管理和调度,现在支持Standalone、Mesos、Yarn和k8s。Work Node是集群中可以执行任务的节点。Excutor是一个Work Node上为某应用启动的一个进程,该进程负责运行任务,并且负责将数据存于内存或者磁盘上。Task是被调度到某个Executor上的计算单元。每个应用都有各自独立的Executor,计算最终在计算节点的Executor中执行。


分享到:


相關文章: