标题spark
spark是一种快速,通用,可扩展的大数据计算引擎,由scala编写。spark是基于内存计算的大数据并行计算框架,由spark core,spark Streaming,spark SQL,MLib,GraghX,独立调度器,Yarn,Mesos组成。
spark Core:实现了Spark的基本功能,包含任务调度,内存管理、错误恢复、与存储系统交互等模块。Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的 API 定义。
Spark SQL:是 Spark 用来操作结构化数据的程序包。
Spark Streaming:是 Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应。
Spark MLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。
GraphX:提供一个分布式图计算框架,能高效进行图计算。
集群管理器:Spark设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计 算。
spark的特点:快,易用,通用,兼容性。
spark的用途:
:数据科学家和工程师。
数据科学任务:主要是数据分析领域,数据科学家要负责分析数据并建模,具备 SQL、统计、预测建模(机器学习)等方面的经验,以及一定的使用 Python、 Matlab 或 R 语言进行编程的能力。
数据处理应用:工程师定义为使用 Spark 开发 生产环境中的数据处理应用的软件开发者,通过对接Spark的API实现对处理的处理和转换等任务。
spark的集群:
1.集群角色
主要有master和worker两个节点,Master节点主要运行集群管理器的中心化部分,Worker节点负责具体的业务运行。
2.运行模式
本地Local 集群
3.常用术语
Application:指的是用户编写的Spark应用程序,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码。
Driver:驱动程序,运行上述Application的Main()函数并且创建SparkContext,SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请、任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭
Cluster Manager:资源管理器,指的是在集群上获取资源的外部服务
Executor:执行器,Application运行在Worker节点上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的一批Executor
Worker:计算节点
RDD:弹性分布式数据集
窄依赖:一对一
宽依赖:一对多
DAG:有向无环图
DAGScheduler:有向无环图调度器,基于DAG划分Stage 并以TaskSet的形式提交Stage给TaskScheduler;负责将job拆分成不同stage的具有依赖关系的多批任务;最重要的任务之一就是:计算作业和任务的依赖关系,制定调度逻辑。
TaskScheduler:任务调度器,将Taskset提交给worker(集群)运行并回报结果;负责每个具体任务的实际物理调度。
Job:作业,由一个或多个调度阶段所组成的一次计算作业;包含多个Task组成的并行计算,往往由Spark Action催生,一个JOB包含多个RDD及作用于相应RDD上的各种Operation
Stage:调度阶段,一个任务集对应的调度阶段;每个Job会被拆分很多组Task,每组任务被称为Stage,也可称TaskSet,一个作业分为多个阶段;Stage分成两种类型ShuffleMapStage、ResultStage。
TaskSet:任务集
Task:任务,被送到某个Executor上的工作任务;一个分区数据集上的执行函数。
Spark的RPC
由RPCEnv(包含多个RpcEndpoint),RpcEndpointRef,RpcAddress组成
RpcEnv为RpcEndpoint提供处理消息的环境。RpcEnv负责RpcEndpoint整个生命周期的管理,包括:注册endpoint,endpoint之间消息的路由,以及停止endpoint。
RpcEndpoint表示一个个需要通信的个体(如master,worker,driver),主要根据接收的消息来进行对应的处理。一个RpcEndpoint经历的过程依次是:构建->onStart→receive→onStop。其中onStart在接收任务消息前调用,receive和receiveAndReply分别用来接收另一个RpcEndpoint(也可以是本身)send和ask过来的消息。
RpcEndpointRef是对远程RpcEndpoint的一个引用。当我们需要向一个具体的RpcEndpoint发送消息时,一般我们需要获取到该RpcEndpoint的引用,然后通过该应用发送消息。
RpcAddress表示远程的RpcEndpointRef的地址。
Spark任务运行机制:
(1)客户端启动后直接运行用户程序,启动Driver相关的工作:DAGScheduler和BlockManagerMaster等。
(2)客户端的Driver向Master注册。
(3)Master还会让Worker启动Exeuctor。Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。
(4)ExecutorBackend启动后会向Driver的SchedulerBackend注册。Driver的DAGScheduler解析作业并生成相应的Stage,每个Stage包含的Task通过TaskScheduler分配给Executor执行。
(5)所有stage都完成后作业结束。