您的位置:首页 > 其它

Spark实践项目4:Spark基本概念

2016-08-07 16:33 351 查看
[align=left]Spark基本概念[/align]
RDD——Resillient Distributed Dataset A Fault-Tolerant Abstraction for In-Memory Cluster Computing弹性分布式数据集。
Operation——作用于RDD的各种操作分为transformation和action。
Job——作业,一个JOB包含多个RDD及作用于相应RDD上的各种operation。
Stage——一个作业分为多个阶段。
Partition——数据分区, 一个RDD中的数据可以分成多个不同的区。1个Partition默认对应一个block,是128M左右,由于最后一条记录一般跨2个BLOCK.,不会是刚好128M。
DAG——Directed Acycle graph,有向无环图,反应RDD之间的依赖关系。
Narrow dependency——窄依赖,子RDD依赖于父RDD中固定的data partition。
Wide Dependency——宽依赖,子RDD对父RDD中的所有data partition都有依赖。
Caching Managenment——缓存管理,对RDD的中间计算结果进行缓存管理以加快整 体的处理速度。
     10. Spark:Spark包含多个组件,核心是:一个对由很多计算任务组成的、运行在多个工作机器或者是一个计算机集群上的应用进行调度、分发以及监控的计算引擎。
[align=left]
[/align]
[align=left]Spark的程序的运行有两种模式:Client和Cluster(在集群上获取资源的外部服务)。[/align]
[align=left]      默认是client,可以看到更多的运行信息。Cluster模式默认情况下spark集群有一台电脑专门用来提交spark程序,一般一定与sparkcluster在同一个网络环境中,因为driver频繁与executor通信,其配置和普通worker一致。[/align]
[align=left]
[/align]
[align=left]Spark Cluster:包含Master[/align]
Master:接受用户提交的程序并发送指令给Worker为当前程序分配资源,每个Worker所在节点默认为当前节点分配一个Executor,在Executor中通过线程池并发进行。Master通知Worker按照要求启动Executor。
[align=left]
[/align]
[align=left]但不可以用IDEA或Eclipse作Client,也不可以用IDE直接发布Spark程序到Spark集群中:[/align]
[align=left]第一:[/align]
[align=left]     内存和Cores的限制,默认情况下Spark程序的Driver会在提交Spark程序的机器上,所以如果在IDE中提交程序的话,那IDE机器就必须非常强大[/align]
[align=left]第二:[/align]
[align=left]     Driver要指挥Workers的运行并频繁的发生通信,如果开发环境IDE和Spark集群不在同样一个网络下,就会出现任务丢失,运行缓慢等多种不必要的问题;[/align]
第三:
     这是不安全的。 

[align=left][/align]
[align=left]Application:[/align]
[align=left]     基于Spark的用户,包含一个Driver Program和若干Executor。运行不依赖clusterManager,可以有多个Jobs。[/align]

Driver Program:
     每个Spark应用都由一个Driver Program来发起集群上的各种并行操作。一般要管理多个执行器Executor节点。Driver Program包含应用的main函数,并且定义了集群上的分布式数据集,并进行了相关操作。运行Application的main(),并创建Spark
Context对象,这个对象代表对计算集群的一个连接,同时也是Executor的核心。

SparkContext:
     Application的入口,负责调度各个运算资源,协调各Worker Node上的Executor。创建DAGScheduler、TaskScheduler、SchedulerBackend,在实例化的过程中Register当前程序给Master,Master接受注册,如果没有问题,Master会为当前程序分配AppID并分配计算资源。一般情况下,当通过Action来触发Job时,SparkContext会通过DAGScheduler来把Job中的RDD划分成不同的Stage。通过资源调度模块和Executer通信。

WorkerNode:
     集群中人任何可以运行Application代码的节点,可以运行一个或多个Executor。不会运行程序的代码 是管理当前节点的资源,并接受Master的指令在新的进程中来分配具体的计算资源Executor。但Worker不会向Master发送资源,worker进程通过一个proxy为ExecutorRunner的对象实例来远程启动ExecutorBackend进程。

 Executor:
     Application运行在WorekNode上的一个进程,该进程负责运行Task。并负责将数据存在内存或磁盘上。每个Application都会申请各自独立的Executor来处理任务。为Executor进程里有线程池,它是一个进程里的工作对象。Executor负责执行任务,运行Executer的机器称为Worker节点

Task:
     运行在Executor上的工作单元。

Job:
     SparkContext提交的具体Action操作,常和Action对应,由Action触发。包含了一系列的Task并行计算。有一系列的RDD,不过本身不会产生RDD。一般1个Action操作对应一个Job。CheckPoint也对应Job.排序的Range也会触发Job.

Stage:
     每个Job会被拆分成很多组Task,每组任务称为Stage,每个Stage内部是一系列业务逻辑相同但处理数据不同的Tasks,构成了TaskSet。Stage内部是基于内存计算的。最后一个Stage中的Task称为ResultTask,产生Job的结果;前面的Task都是ShuffleMapTask,为下一阶段的Stage做数据准备。

DAGScheduler:
     根据Job构建于Stage的DAG,并提交Stage给TaskScheduler。

TaskScheduler:
     将TaskSet提交给WorkerNode集群运行并返回结果。负责具体Task的运行,遵循数据本地性。
 
ExecutorBackend:ExecutorBackend进程里有Executor,实际在工作中会通过TaskRunner来封装Task,然后从线程池中获取一条线程执行Task,执行完后线程被回收复用。

SchedulerBackend:负责具体Task的运行,遵循数据本地性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: