stone

Spark基础
spark是现在大数据领域的当红明星,提供基于内存的计算框架,速度较Hapood有质的提升。2009年由美国加州大...
扫描右侧二维码阅读全文
20
2016/12

Spark基础

spark是现在大数据领域的当红明星,提供基于内存的计算框架,速度较Hapood有质的提升。2009年由美国加州大学伯克利分校实验室发起,2010年进行开源。现在Spark已经成为Apache的顶级开源项目,为大数据快速处理提供一个统一的平台。

随着SparkSQL,Spark Streaming,Spark MLlib等项目的提出和完善,spark的生态圈变得越来越完善。并且和Hadoop复杂的生态圈相比,Spark则更为统一,无论是SparkSQL还是Spark Streaming等其他上层组件都提供了相似的接口,大大降低了学习成本。

总体概览

特点

  1. 基于内存的计算模型,能够最大限度地减少由于硬盘IO造成的性能瓶颈,性能卓越
  2. 基于DAG执行引擎,通过分析DAG,可以根据实际情况进行更有效的剪枝操作,同时也提供了很好的容错能力
  3. 灵活易用,提供多种语言的支持(java,python,scala,R)
  4. 灵活的部署方式,可以和Mesos,YARN,HDFS,HBase等很多组件进行集成
  5. 统一,以Spark为核心,提供了流式计算,机器学习,图计算等库,实现了平台的融合,并且这些库采用相似的接口,大大降低了学习成本

程序运行机制

spark程序的部署一般有四种模式,Local,Standalone,YARN,Mesos

1. 执行机制

Step1: 用户启动Driver程序,创建SparkContext后,连接到Cluster Manager,申请计算资源。Cluster Manager分配计算资源,并启动对应的Excutor,返回给Driver

Step2: Driver程序根据DAG引擎将任务划分为不同的执行阶段,每一个阶段由一组相同的Task组成,每一个Task分别作用在数据的不同分区。在阶段划分完成后,Driver会将Task分发到不同的Excutor上。

Step3: Excutor接受到Task后,根据依赖关系,会自动下载相应的资源,创建好Task的运行环境,然后执行Task,并将Task的运行状态汇报给Driver。

Step4: Driver根据Task的汇报情况,切换不同的状态,Driver会不同地分发Task直至任务完成,或则执行多次,没有得到结果。

这里有两个地方值得注意:

  1. Cluster Manager为Driver提供运行资源和通信功能,即只负责Driver和Excutor的通信,不关心其他的问题
  2. 任务Task是Driver分发给Excutor,如果Driver和Worker节点离得比较远,则会花费很多的时间在网络通信上,大大较低程序运行的效率。如果需要远程运行任务,可以通过RPC协议调用Driver,尽量不要将Driver运行在远离Worker的地方。

2. 配置参数的传递

Spark中配置参数有三处地方,按照优先度从高到低地排列,分别为程序中显式声明的SparkConf,Spark Submit提交时的标志位,和默认属性配置文件中的值(conf/spark-defaults.conf)。

除了传递参数外,还有就是传递程序。如果程序依赖其他的项目的时候,需要将相关的依赖关系共同打包在jar包中,这样才能保证worker能够正常地执行。

文件分发的方式有下面几种:

(1) file: Driver提供ftp服务,分发文件的绝对地址,所有的Excutor自行去Driver上进行下载

(2) hdfs: 从HDFS文件系统上进行读取

(3) local: 每个Excutor自行在本地目录local://*上读取文件

参考资料:

Spark入门实例指南

《Spark核心技术与高级应用》

Last modification:September 7th, 2018 at 08:22 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment