Hadoop中MapReduce计算框架是基于磁盘的,每次计算结果都会直接存储到磁盘,下一次计算又要从磁盘中读取,因而IO消耗大,迭代计算效率很低,且模型单一,不能适应复杂需求。Spark是一种基于内存的开源计算框架,迭代计算效率非常高。另外,MapReduce的计算是一步一步来的,而Spark将整个计算过程绘制成 DAG(有向无环图),优化了计算路径,这也是Spark计算速度较快的原因之一。
BDAS
BDAS是贝克利数据分析栈,如下图:
Spark Core
Spark Core和MapReduce一样是一个分布式大数据处理框架。包括如下几个部分:
- RDD: 弹性分布式数据集,是最重要的一类数据抽象。
- RDD是抽象类,不同操作生成相应的子类,类提供操作RDD的接口
- 惰性计算,遇到action算子才真正执行计算
- 对父RDD可存在依赖关系,分为窄依赖和宽依赖
- 内部数据只读
- 分区,数目尽可能等于集群核心数目
- Driver 进程:负责初始化和关闭SparkContext
- SparkContext:计算入口,负责加载配置文件,准备运行环境
- ClusterManager:集群资源管理器,包括YARN、Standlone和Mesos
- DAGScheduler:面向Stage的任务调度器,根据RDD依赖关系将Job划分成Stage
- TaskScheduler:面向Task的任务调度器,接收来自DAGScheduler的每个Stage中的Taskset,将其提交给Executor
- Executor进程:工作节点上运行的一组计算进程,每个进程又可以启动线程池
计算流程图
通常将实际运行Spark应用程序的节点命名为Worker。整个计算流程图如下图所示:
参考资料
Spark核心源码分析与开发实战, 王家林等
Spark原理、机制及应用,符积高等
注:如有不当之处,请指正