计算引擎Spark是什么?
专为大规模数据处理的快速通用的计算引擎(基于MapReduce算法实现的分布式计算)。
Spark特性
- 高级 API,可以更多精力专注于应用所要做的计算本身。Spark 提供了80多个高级运算符。
- 快,支持复杂算法和交互式计算。内存计算下:Spark比Hadoop快100倍。
- 通用引擎,运算:SQL 查询、文本处理、机器学习等。大量的库无缝组合使用:Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。
Spark组成与相关库
BDAS:全称伯克利数据分析栈,通过大规模集成算法、机器、人之间展现大数据应用的一个平台。也是处理大数据、云计算、通信的技术解决方案。
SparkStreaming:实时数据进行流式计算的组件。构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片段(几秒),以类似batch批量处理的方式来处理这小部分数据。
MLlib:机器学习算法的实现库。
GraphX:分布式图计算框架,能高效进行图计算。
BlinkDB:海量数据上进行交互式SQL的近似查询引擎。
Tachyon:以内存为中心高容错的的分布式文件系统。
SparkCore:将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。
SparkSQL:Spark Sql是Spark来操作结构化数据的程序包,可以让我使用SQL语句的方式来查询数据,Spark支持 多种数据源,包含Hive表,parquest以及JSON等内容。
Spark工作机制与原理
- Spark启动应用程序的运行环境,启动SparkContext。
- SparkContext向资源管理器(资源管理器包含:Standalone,Mesos,Yarn)申请运行Executor资源。并启动StandaloneExecutorbackend。
- Executor向SparkContext申请Task。
- SparkContext将应用程序分发给Executor。
- SparkContext构建成DAG图,将DAG图分解成Stage、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送给Executor运行。
- Task在Executor上运行,运行完释放所有资源。
Spark名词解读
- Application:用户编写的Spark应用程序。
- Driver:Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver。
- Executor:某个Application运行在worker节点上的一个进程, 该进程负责运行某些Task, 并且负责将数据存到内存或磁盘上。
- Cluter Manager:在集群上获取资源的资源管理器,其中包含3类(1. Standalon:spark原生的资源管理。2. Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架。3. Hadoop Yarn: Yarn中的ResourceManager)。
- Worker:集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark on Yarn模式下就是NoteManager节点。
- Task:被送到某个Executor上的工作单元,但hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责。
- Job:包含多个Task组成的并行计算,往往由Spark Action触发生成,一个Application中往往会产生多个Job。
- Stage:每个Job会被拆分成多组Task,作为一个TaskSet,其名称为Stage,Stage的划分和调度是有DAGScheduler来负责的,Stage有非最终的Stage(Shuffle Map Stage)和最终的Stage(Result Stage)两种,Stage的边界就是发生shuffle的地方。
- DAGScheduler:根据Job构建基于Stage的DAG(Directed Acyclic Graph有向无环图),并提交Stage给TASkScheduler。 其划分Stage的依据是RDD之间的依赖的关系找出开销最小的调度方法。
Spark运行层次解读
Job包含多个stage,Stage包含多个同种task, Task分为ShuffleMapTask和ResultTask,Dependency分为ShuffleDependency和NarrowDependency。