1.spark基础概念
hadoop存在问题
- 基于磁盘,运行慢
- 函数函数较少,只有map/reduce,不够灵活
spark优点
- 基于内存,优先存储在内存
- 使用DAG(有限无环图),优化流程
- 基于RDD数据集,提供更多的操作函数,且可以基于Scala或Python Shell快速验证原型
Spark技术栈
如下,基于Spark Code常用的组件:
- Spark SQL SQL方式便捷操作数据集
- Spark Steaming 流式实时处理框架
- Mlib 机器学习库,提供常用机器学习算法的spark实现
- GraphX 图计算库
Spark体系架构
- 数据存储
基于HDFS文件系统或兼容于HDFS的数据源(HBase/Cassendra等,只需支持MapReduce的InputFormat即可),会将数据封装成RDD数据集
- 资源管理
支持多种调度器 Hadoop, Apache Mesos, Kubernetes, standalone
- API
接口基本相同 Scala/Java/Python
核心架构
如下图,Spark集群由Master和多个Worker组成,类似Yarn的AppMaster和YarnChild,Master这里负责协调,具体的任务从Client机器上提交。
具体来说,client执行main入口函数创建SparkContext,并提交集群Job任务来执行,Spark中称为Driver program;每个Worker上可以起多个实例,每个实例为一个Worker Node,这里图中的Worker实际上是Worker Node。
如下图,进一步深入来看执行过程中的概念:
- 当我们新建一个Spark任务,叫做Application,对应的逻辑写在Applcation Jar包中,然后在Client机器上运行时就会生成一个Driver Propgram,它负责创建SparkContext,具体的执行任务分发到每个Worker Node上,每个Worker Node为不同Application生成不同的Executor来执行。
- 每个Application包含多个Job,一个Job可分为多个Task并发执行完成,按照执行时机,不同的Task分为不同的组,这就是不同的Stage。
- 中间过程资源的分配都是依赖资源调度器,即Cluster Manager
架构描述可参考官方文档
原创,转载请注明来自