1、Spark 运行方式
本地模式:一个单独的主机上运行一个JVM;
集群模式Standalone:多个主机上运行多个JVM;
通过Yarn、Mesos等给管理;
2、RDD
RDD是Spark的核心数据结构,通过RDD的依赖关系形成了Spark的调度顺序,即有向无环图,这两个概念是spark最核心等概念。RDD(弹性分布式数据集)有两种来源,分别是:(1)从Hadoop文件系统(或其他与Hadoop兼容的持久化存储系统,如Hive,Hbase...)输入创建(2)从父RDD转换得到新的RDD.
RDD有两种计算操作算子:Transformation(转换)和Action(行动)。Transformation是延迟计算的,也就是说从一个RDD转换成另一个RDD的转换操作不是马上执行的,需要等到有Actions操作时,才真正触发,包括(map,reduce,join)。Action算子会触发Spark提交作业,并将数据输出到Spark系统,包括(foreach,count,top等)。
RDD作为一个数据结构,含有许多重要内部属性:(分区,依赖关系(宽依赖、窄依赖),计算逻辑)
分区列表
计算每个分片的函数
对父RDD的依赖列表
对Key-Value对数据类型RDD的分区器,控制分区策略和分区数
每个数据分区的地址列表(如HDFS上的数据块的地址)
3、Spark 基本框架
spark 包括5个主要模块,Spark Core 定义框架核心数据结构和数据操作函数等基础模块,是其他模块的基础;Spark SQL 定义数据操作API;Spark MLlib 内置机器学习库(通常在使用是与H2O等用户友好的机器学习框架相结合);Spark geaphX 图计算框架;;Spark Streaming 流处理框架。spark依靠自身的standalone和yarn、mesos等实现资源调度。
4、Spark 计算框架
图中共分为三大部分:Spark Driver, Worker, Cluster manager。其中Driver program负责将RDD转换为任务,并进行任务调度。Worker负责任务的执行。YARN负责计算资源的维护和分配。
Driver可以运行在用户程序中,或者运行在其中一个Worker上。Spark中的每一个应用(Application)对应着一个Driver。这个Driver可以接收RDD上的计算请求,每个动作(Action)类型的操作将被作为一个Job进行计算。Spark会根据RDD的依赖关系构建计算阶段(Stage)的有向无环图,每个阶段有与分区数相同的任务(Task)。这些任务将在每个分区(Partition)上进行计算,任务划分完成后Driver将任务提交到运行于Worker上的Executor中进行计算,并对任务的成功、失败进行记录和重启等处理。
Worker一般对应一台物理机,每个Worker上可以运行多个Executor,每个Executor都是独立的JVM进程,Driver提交的任务就是以线程的形式运行在Executor中的。如果使用YARN作为资源调度框架的话,其中一个Worker上还会有Executor launcher作为YARN的ApplicationMaster,用于向YARN申请计算资源,并启动、监测、重启Executor。
5、Spark MLlib 架构
MLlib 主要包含三个部分:
底层基础 :包括 Spark 的运行库、矩阵库和向量库;其中主要依赖数值计算库Breeze和基础线性代数库BLAS。使用时不直接调用这些库,MLlib封装了vector和matrix对象做数据处理对它们进行了封装。类似于numpy等的操作。
算法库 :目前支持 4 种常见的机器学习问题 : 分类、回归、聚类和协同过滤。包含广义线性模型、推荐系统、聚类、决策树和评估的算法;
实用程序 :包括测试数据的生成、外部数据的读入等功能。
6、Spark 程序入口
启动Spark 以后,可以通过Spark shell 运行相应程序,并通过web服务进行程序监控。有sparkcontxt提供上下文交互环境。在于H2O等可视化工具结合使用时,只需要利用Spark 读入数据,并将数据传输给H2O服务即可。
7、Spark streaming
Spark streaming对实时数据流进行处理。通过Kafka,flume等获取数据,这里的实时并不是说来一条数据就处理一条数据,而是将流数据离散化处理。在receiver接收到数据后,首先将数据缓存到spark到计算节点中,经过延迟优化(即积累一定量到数据),对这些数据进行统一的批处理。这样一方面把任务拆分到不同节点,同时实现了动态的负载均衡和便于故障恢复。
8、Spark 启动后,系统中会有诸多进程一起工作。在主节点上,有Spark的master、yarn的ResourceManager、和Hadoop的NameNode,SecondNameNode,DataNode。在从节点上,有Spark的worker、Yarn的NodeManager、和Hadoop的DataNode。当然还同时存在JVM进程。