Spark调研笔记第1篇,spark调研第1篇


在公司线上项目中引入Spark已经将近1年时间了,从效果来看,Spark确实是能提高生产力的优秀分布式计算平台。
从本篇笔记开始,会把之前调研Spark时的调研报告分享出来(限于篇幅,会分成几篇文章),以便帮助刚接触Spark的朋友们尽快入门。
下面开始正文。

1. 项目背景
Spark项目于2009年诞生于UC Berkeley AMP Lab并于2010年正式提交Apache Software Foundation成为开源项目。目前已经成为Apache下的明星项目,其代码提交活跃度在整个社区的所有项目中名列前茅。

2. Spark的性能
若运算过程全部在内存中完成,与Hadoop集群支持Map/Reduce的Streaming计算相比,在计算速度方面,Spark会有100x倍的性能提升;即使运算会产出中间文件,速度也有10x倍的提升。

3. 编译
从官网下载合适的Spark版本,建议下载pre-built版本,可以省去不少依赖问题。
Installing Doc的build guide是用Maven来编译Spark源码的,且编译过程中有些细节参数需要指定,这里不再赘述,直接参考官网guide即可。

4. Spark集群的部署模式
4.1 Spark集群部署模式

目前支持以下几种部署方式:
1) Standalone模式
将Spark集群单独部署,不与任何现有系统耦合,cluster manager由Spark的master实例担任。这是最简单的部署模式。
具体部署时,可启多个master实例,借助zookeeper消除单点故障,从而实现HA:zookeepr选出”现役”的master,其余实例standby,若当前master实例故障,则zookeeper从standby的实例中选新主。
2) Apache Mesos模式
cluster manager由mesos master实例来担任,实现资源分配及任务调度。
3) Hadoop YARN模式
cluster manager由YARN ResourceManager来担任
注意:Spark程序编译时需要引入YARN支持才能应用YARN模式。
关于这3种部署模式的详细说明,可参考官网文档的说明。 
4.2 Spark集群典型结构
从Cluster Mode Overview文档可知,一个典型的Spark集群包含的组件如下图所示。

Spark应用提交Spark集群后,任务脚本中创建的Spark context对象(又称为driver program,其实是在Spark客户端所在机器上启动的一个JVM进程)会依次执行如下步骤:
1) 建立与cluster manager进程的连接
2) 向manager申请任务所需资源(worker节点上的executor进程,实现具体的计算及数据存储)
3) 将应用程序代码(jar或.py文件)发往申请到的executor进程
4) 向executor进程发送由调度器分解job->stages->tasks后的tasks并由后者负责执行
几点补充说明:
1) Spark context无法也无须感知其底层的cluster manager是何种类型(3种可能:Spark standalone/apache mesos/hadoop yarn),只要它可以通过culster manager申请到executor进程,它就可以执行Spark应用。
2) 每个Spark应用均会申请独立的executor进程(即不同的Spark任务对应的进程间相互独立)。优点:实现应用隔离,从调度端看,不同应用创建各自的Spark context实例,每个driver只调度自己的任务;从执行端看,不同应用的executor进程运行在各自的JVM上;缺点:若不借助外部存储系统,数据无法在不同的Spark应用间共享。
3) Spark应用申请的executor进程在应用的执行时间内保持alive,且它以multi-threading方式执行具体的计算任务。
4) Spark context实例所属的driver program负责在集群上调度任务,故在部署上,driver的部署节点应尽可能靠近worker节点,最好部署在同一局域网内。

未完待续,下篇笔记将会介绍如何通过Spark客户端向Spark集群提交计算任务。

【参考资料】
1. Spark Overview
2. Cluster Mode Overview
3. Spark Documentation  PS: 这里有不少从浅到深的Spark资料

========================= EOF ====================


相关内容

    暂无相关文章