目录
Spark是一个以复杂计算为核心的大数据分析框架,是MapReduce的“后继者”,具备高效性、通用性等特点。
Spark最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark提供的技术更加全面,速度更快(比MapReduce快一百倍)。
Spark的技术生态
Spark的技术生态包含了各种丰富的组件,而不同的组件提供了不同功能,以适应不同场景。
Spark core
spark core包含Spark的基本功能,定义了RDD的API以及以此为基础的其他动作。Spark的其他库都构建在RDD和Spark Core之上。
Spark SQL
提供通过HiveQL与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL的查询会被转换为Spark操作。
Spark streaming
对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据。严格来说Spark streaming并不是实时的,而是准实时(跟Storm相比)。
MLlib
一个基于RDD的机器学习算法库,包含了可扩展的机器学习算法。
GraphX
控制图、并行图操作和计算的一组算法和工具的集合。
Spark的基本原理
Application
Application是在使用spark-submit 提交的打包程序,也就是需要写的代码。
完整的Application一般包含以下步骤:
(1)获取数据
(2)计算逻辑
(3)输出结果(可以是存入HDFS,或者是其他存储介质)
Executor
Executor是一个Application运行在Worker节点上的一种进程,一个worker可以有多个Executor,一个Executor进程有且仅有一个executor对象。executor对象负责将Task包装成taskRunner,并从线程池抽取出一个空闲线程运行Task。每个进程能并行运行Task的个数就取决于分配给它的CPU core的数量。
Worker
Spark集群中可以用来运行Application的节点,在standalone模式下指的是slaves文件配置的worker节点,在spark on yarn模式下是NodeManager节点。
Task
在Excutor进程中执行任务的单元,执行相同代码段的多个Task组成一个Stage。
Job
由一个Action算子触发的一个调度。
Stage
Spark根据提交的作业代码划分出多个Stages,每个Stage有多个Tasks,这些Tasks负责并行处理他们所属的stage里面的代码。