1 Repartition和Colasce的区别
2 什么是Shuffle
3 RDD的特性之一是RDD之间存在一定的依赖,有几种依赖,它们分别是什么
4 GroupByKey和reduceByKey的区别:底层数据结构不一样,使用GroupByKey要谨慎;
5 Combiner预聚合
6 The following table summarizes terms you’ll see used to refer to cluster concepts
- Application(应用): 一个驱动程序+多个executors,这两个都是进程级别的;
- Application Jar:
- Driver Program(驱动程序): 执行Application的主函数;创建SparkContext;
- Cluster Manager(集群管理): 资源调试框架(Standalone,Mesos,YARN,)
- Deploy Mode(部署模式):
(1)集群模式=>架构启动集群内部的驱动程序;
(2) 客户端模式=>Submitter启动集群外的驱动程序; - Worker Node(工作节点): 在集群中任何运行应用程序代码的节点都可称为工作节点;
- Executor(执行器): 工作节点上为了运行应用程序被启动的一个进程,它运行tasks和保存数据在内存或者磁盘中(在内存与磁盘之间)。每个应用程序有自己的执行器。
- Task(任务): 一个被发送到执行端的工作单元
线程级别
。可以理解为发送到执行端的一系列Spark Work。 - Job(工作): 并行计算:多任务被触发并对Spark action作出反应,可以在驱动日志中看到个术语。
- Stage(阶段): 每个job可以分成小的tasks的小的集合,stage之间相互依赖。与Job相同,也可以在driver日志中可以找到这个表述。
7 Spark 作业执行流程
Spark applications run as independent sets of processes on a cluster, coordinated by the SparkContext object in your main program (called the driver program).
Specifically, to run on a cluster, the SparkContext can connect to several types of cluster managers (either Spark’s own standalone cluster manager, Mesos or YARN), which allocate resources across applications. Once connected, Spark acquires executors on nodes in the cluster, which are processes that run computations and store data for your application. Next, it sends your application code (defined by JAR or Python files passed to SparkContext) to the executors. Finally, SparkContext sends tasks to the executors to run.
There are several useful things to note about this architecture:
- 每个应用程序都有属于自己的执行器进程,它会伴随着整个应用程序运行过程而存在,并行运行tasks以多线程的形式。这样的设计有个优势:使应用程序在调度端(每个驱动调度自己的tasks)和执行端(不同应用程序的tasks运行在不同的JVM上)之间相互隔离。这样也会有一个缺点,就是数据不能在应用程序间实现共享,
如果没有写到一个外部存储系统中的话
。 - Spark对于底层的集群管理器是无感知的。只要它可以申请获得执行进程,它们之间的通信是变得相当容易。
- 驱动程序必须监听和接收来自执行端的连接,在整个生命周期。例如:驱动程序对对于工作节点应该是网络可连接的!
- 因为驱动程序在集群上调度tasks,它应该接近工作节点,并且优先在同一个本地网络中。如果发送请求到远程的集群,最好开启一个RPC连接驱动使它就近操作,这样好过从过程启动一个驱动。