一、spark概念
官网描述:
Apache Spark是一个用于大规模数据处理的统一分析引擎。
二、spark特点
1、高速性
Apache Spark使用最先进的DAG调度程序、查询优化器和物理执行引擎,实现了批处理和流数据的高性能;运行速度是hadoop的100倍以上。
2、易用性
Apache Spark程序可以使用java、scala、python、R、SQL语言开发,而且spark提供了超过80个高阶算子。
3、通用性
结合SQL、流和复杂分析。
Spark支持一系列库,包括SQL和DataFrames、用于机器学习的MLlib、GraphX和Spark流。您可以在同一个应用程序中无缝地组合这些库。
4、运行多样化
Spark运行在Hadoop、Apache Mesos、Kubernetes、standalone或cloud中,它可以访问不同的数据源。
三、spark核心概念
1、名词解释
1.1 ClusterManager
在Standalone(spark自身集群模式)模式中即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器Resourcemanager。
Spark集群的管理,管理spark集群的资源(cpu core、内存),yarn中的话就是ResourceManager。
1.2Worker
从节点,负责控制计算节点,启动Executor。在YARN模式中为NodeManager,负责计算节点的控制。
1.3 Driver
运行Application的main()函数并创建SparkContext。
负责向ClusterManager提交spark作业,组织spark作业,然后和spark集群中的executor进行交互。
Driver最重要的工作,就是创建SparkContext,而SparkContext就是Spark Application的入口。
1.4Executor
执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors。
这些executor是在worker节点上面启动的进程。
1.5SparkContext
整个应用的上下文,控制应用的生命周期。
1.6RDD
Spark的基本计算单元,一组RDD可形成执行的有向无环图RDD Graph。
RDD,是一个抽象的概念,是弹性式分布式数据集。
弹性:既可以在内存,优先在内存存储并计算,如果内存不够,拿磁盘顶上。
数据集:就是一个普通的scala的不可变的集合。
分布式:一个完整的RDD数据集,被拆分成多个部分,在不同的机器里面存储。被拆分成的部分称之为该RDD的分区partition,就类似于hdfs中的一个文件file被拆分成多个block块存储一样。
真正存储数据的是partition,RDD不存储数据,RDD就是对这个partition的抽象。又因为RDD是一个scala集合,在scala集合上面有非常多个的算子操作,比如flatMap、map、reduce、sum等等。可以理解为是一个ADT(abstract data type抽象数据类型)
1.7DAG Scheduler
实现将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。
非常重要的作业就是进行stage阶段的划分。
1.8TaskScheduler
将任务(Task)分发给Executor执行。
将DAGScheduler划分的stage(task的形式)任务,交付给executor去干活。
1.9Stage
一个Spark作业一般包含一到多个Stage。
每次提交的是一个stage阶段的任务。
1.10Task
一个Stage包含一到多个Task,通过多个Task实现并行运行的功能。
1.11Transformations
转换(Transformations) (如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spark在遇到Transformations操作时只会记录需要这样的操作,并不会去执行,需要等到有Actions操作的时候才会真正启动计算过程进行计算。
又称为转换算子
1.12Actions
操作(Actions) (如:count, collect, save,foreach等),Actions操作会返回结果或把RDD数据写到存储系统中。Actions是触发Spark启动计算的动因。
又称为行动算子。
1.13SparkEnv
线程级别的上下文,存储运行时的重要组件的引用。SparkEnv内创建并包含如下一些重要组件的引用。
MapOutPutTracker:负责Shuffle元信息的存储。
BroadcastManager:负责广播变量的控制与元信息的存储。
BlockManager:负责存储管理、创建和查找块。
1.14MetricsSystem
监控运行时性能指标信息。
1.15SparkConf
负责存储配置信息。
可以理解为MR编程中的Configuration。当前应用程序的配置信息。SparkContext的构建离不开SparkConf。