Spark概述

概述

Spark是⼀个快如闪电的统⼀分析引擎(计算框架)⽤于⼤规模数据集的处理。Spark在做数据的批处理计算,计算性能⼤约是Hadoop MapReduce的10~100倍,因为Spark使⽤⽐较先进的基于DAG 任务调度,可以将⼀个任务拆分成若⼲个阶段,然后将这些阶段分批次交给 集群计算节点处理。
Spark概述

  • Spark在设计理念中也提出了 One stack ruled them all 战略,并且提供了基于Spark批处理⾄上的计算服务分⽀例如:实现基于Spark的交互查询、近实时流处理、机器学习、Grahx 图形关系存储
    等。

Spark概述
从图中不难看出Apache Spark处于计算层,Spark项⽬在战略上启到了承上启下的作⽤,并没有废弃原有以hadoop为主体的⼤数据解决⽅案。因为Spark向下可以计算来⾃于HDFS、HBase、Cassandra和亚⻢逊S3⽂件服务器的数据,也就意味着使⽤Spark作为计算层,⽤户原有的存储层架构⽆需改动。

计算流程

Spark概述
总结⼀下⼏点缺点:

1)MapReduce虽然基于⽮量编程思想,但是计算状态过于简单,只是简单的将任务分为Map state和Reduce State,没有考虑到迭代计算场景。
2)在Map任务计算的中间结果存储到本地磁盘,IO调⽤过多,数据读写效率差。
3)MapReduce是先提交任务,然后在计算过程中申请资源。并且计算⽅式过于笨重。每个并⾏度都是由⼀个JVM进程来实现计算。

通过简单的罗列不难发现MapReduce计算的诟病和问题,因此Spark在计算层⾯上借鉴了MapReduce计算设计的经验,提出了DGASchedule(有向无环图计划表)TaskSchedual(任务流程)概念,打破了在MapReduce任务中⼀个job只⽤MapState和Reduce State的两个阶段,并不适合⼀些迭代计算次数⽐较多的场景。因此Spark 提出了⼀个⽐较先进的设计理念,任务状态拆分,Spark在任务计算初期⾸先通过DGASchedule计算任务的State,将每个
阶段的Sate封装成⼀个TaskSet,然后由TaskSchedual将TaskSet提交集群进⾏计算。
可以尝试将Spark计算的流程使⽤⼀下的流程图描述如下:
Spark概述

  • 相⽐较于MapReduce计算,Spark计算有以下优点:

1)智能DAG任务拆分,将⼀个复杂计算拆分成若⼲个State,满⾜迭代计算场景
2)Spark提供了计算的缓冲和容错策略,将计算结果存储在内存或者磁盘,加速每个state的运⾏,提升运⾏效率
3)Spark在计算初期,就已经申请好计算资源。任务并⾏度是通过在Executor(执行者)进程中启动线程实现,相⽐较于MapReduce计算更加轻快。

  • 提示: ⽬前Spark提供了Cluster Manager的实现由Yarn、Standalone、Messso、kubernates等实现。其中企业常⽤的有Yarn和Standalone⽅式的管理。

常⻅疑问

Spark与Apache Hadoop有何关系?

Spark是与Hadoop数据兼容的快速通⽤处理引擎。它可以通过YARN或Spark的Standaone在Hadoop集群中运⾏,并且可以处理HDFS,HBase,Cassandra,Hive和任何Hadoop InputFormat中的数据。它旨在执⾏
批处理(类似于MapReduce)和提供新的⼯作特性,例如流计算,SparkSQL 交互式查询和 MachineLearning机器学习等 。

我的数据需要容纳在内存中才能使⽤Spark吗?

不会。Spark的operators会在不适合内存的情况下将数据溢出到磁盘上,从⽽使其可以在任何⼤⼩的数据上正常运⾏。同样,由RDD(弹性分布式数据集合)的存储级别决定,如果内存不⾜,则缓存的数据集要么溢出到磁盘上,要么在需要时即时重新计算。
http://spark.apache.org/faq.html

Spark 的部署模式

Local模式(本地模式)
启动多线程或者多进程对程序进行单机调试。
Local模式就是运行在一台计算机上的模式,通常用于在本机上测试,当不设置master参数的值时,默认此模式,具体有以下几种设置master的方式。

  • local:所有计算都运行在一个线程当中,没有任何并行计算。
  • local[n]:指定使用n个线程来运行计算。
  • local[*]:按照CPU的最多核数来设置线程数。

分布式部署模式:(集群模式)

  • Standalone 模式:
    独立模式,自带完整的模式。在架构上和MapReduce 比较,具有一致性,都是由Master、worker组成(只是名称不一样),资源抽象为粗粒度的slot,多少slot多少task。
  • Spark on yarn模式:
    因为现在企业用到hadoop 是基于yarn 的,为了融合Spark ,进行统一资源管理。有两种方法,

1.yarn-client(用于交互,client 当中运行sparkContext 进程进行任务分发监控)。
2.yarn-cluster 任务的分发和监控放在MRAppMaster(工作流程)当中。

  • Spark on mesos模式:
    yarn 和 mesos 都是统一资源管理和调度系统。mesos 支持粗粒度和细粒度式的调度。前者是节省了资源调度的时间开销,后者是不存在资源的浪费但资源调度延迟较大。