技术背景
2009年诞生于美国加州大学伯克利分校AMP实验室
2013年捐赠给ASF并于2014年成为ASF的顶级项目
设计目的
为了弥补Mapreduce的缺陷,替代mapreduce进行分布式并行计算
补充: Mapreduce的缺陷表现?
- 编程方式:
- Mapreduce的源码是java语言,Spark的源码是scala语言,更简洁
- Mapreduce处理数据只有map和reduce方法API,而spark提供有80多种API处理数据
- 运行级别:
- mapreduce的task级别是以运行在nodemanager上的maptask和reducetask进程方式,而spark的task级别是以运行在nodemanager上的excuter中的线程方式
- 资源申请:
- mapreduce中的资源申请是由appmaster根据maptask和reducetask启动时需要的资源每一次去向resourcemanager进行申请,spark中的资源申请是由Driver构建SparkContext去向clusterManager启动excuter时一次申请的资源,spark消耗资源更大,因为spark释放资源不灵活及时,
- shuffle过程:
- mapreduce每次shuffle必定经过spill,merge,group,sort等固定的过程,不论业务逻辑需不需要,也会有默认的流程,非常影响性能,Spark的shuffle过程,需要哪些可以自己操作,更灵活,更节省时间
- 迭代计算:
- 多个job参与计算时,mapreduce的每次job的计算结果,会不断地读取磁盘,写入磁盘,将job的中间结果都保存在磁盘文件中,造成磁盘文件的IO过高,性能下降,Spark中的多个job迭代式计算时,中间结果保存在内存中,避免过高的磁盘IO,优化性能
设计思想
分布式并行计算
技术本质
- 概念: 统一的分布式计算平台
- 补充:
- 统一,平台
- 一站式解决服务:
sprakcore-离线批处理,sparkSQL-sql式数据分析,sparkStream-流式计算,sparkMLlib-机器学习,sparkGraphx-图计算
- 一站式解决服务:
- 分布式
- 最终通过RDD分布式弹性数据集来实现分布式计算
核心特性
- Speed:
- 与Mr相比,Spark基于要比MR快上100倍,Spark基于硬盘要比MR快上10倍,因为Spark不仅基于内存存储和计算,还有DAG执行引擎优化
- Ease Of Use:
- shell支持python,scala语言
- API支持java,python,scala,R
- 算法支持超过80多种
- Generality
- spark提供统一的一站式解决方案
- Runs EveryWhere
- spark非常好的兼容hadoop平台,例如HDFS,Hbase,Yarn等
- spark可以自我管理资源调度,也可交由第三方管理,例如: yarn,mesos,K8S,EC2等
运行模式
Local本地模式
- 本地单线程: 没有并行计算
- 本地多线程: 可以指定本地几个worker线程进行并行计算,local[*]为使用本机最大cpu核数
StandAlone独立集群模式
- client: 客户端
- 向master注册并发送job请求
- 接受excuter的反向注册
- 给excuter分配并跟踪task状态
- master: 主节点
- 接受客户端注册请求
- 申请资源,启动并跟踪excuter状态
- worker: 从节点
- 启动excuter进程,并分配cpu计算和内存缓存
- 向client反向注册并申请task任务
ClusterManager第三方资源管理资源模式
-
角色:
- client: 客户端
- 提交任务
- resourcemanager: 主节点
- 选择一个nm启动am,然后又am启动Driver
- NodeManager: 从节点
- am启动excuter,并分配task
- client: 客户端
补充:
-
yarn-client模式和yarn-cluster模式
- yarn-client模式指的是Driver程序运行在client上,在哪个客户端提交,Driver就运行在哪个机器上,适用于测试,运行结果会在客户端显示
- yarn-cluster模式指的是Driver程序运行在由resourcemanager启动的applicationmaster的机器上,适用于生产,避免Driver过于集中在某个机器上,运行结果不能再客户端显示,
使用on yarn 优点
yarn的调度模式,可使计算资源按需伸缩,都使用hdfs进行底层共享存储,避免数据跨集群迁移,集群利用率高