自己编写的spark代码执行流程

我们自己编写了spark代码后;放到集群中一执行,就会出现问题,没有序列化、指定的配置文件不存在、classnotfound等等。这其实很多时候就是因为我们对自己编写的spark代码执行流程的不熟悉导致的,源码阅读可以解决,但源码不是每个人都能看懂或能看进去的,下面我们就来讲一下,我们自己写的spark代码究竟是这么执行的。从执行的过程可分为三个部分来分析main方法,RDD处理方法,DStream处理方法,从执行的JVM虚拟机可以分为两个部分driver端,worker端

一、main方法

main方法就是在driver端执行的,当然这里是把RDD计算的Action剔除的情况,先看一段代码

1、driver端

除了rdd计算action中的代码其他都是在driver端执行,并且只执行一次

2、worker端

DSUtil.dSopt()这里的带就是处理DSTream的,其中有一部分代码是driver一部分是Worker的,这里姑且认为是在worker端

二、DStream处理方法

在sparkStreaming中spark引入了DStream,实际上就是RDD的map集合(不是很精确),在处理的时候代码是:

1、driver端

除了Dstram计算action中的代码其他都是在driver端并且只执行一次,

这里需要注意的是DStream的action方法(闭包)中的代码也不是全在worker端执行,只有在处理rdd时才会在Worker端执行,其他是在driver端执行的

与DStream的action方法外的代码区别是,这里是计算一次执行一次。

2、worker端

rdd的Action操作(闭包)中的代码都是在Worker端执行的

三、RDD处理方法

最后我们来看看RDD算子闭包在执行时代码如何执行

1、driver端

挡在调用count方法处理rdd时,与rdd算子无关的代码都是计算一次执行一次

2、worker端

rdd的算子闭包是在driver端中执行的

时间: 2024-08-04 03:18:04

自己编写的spark代码执行流程的相关文章

debian内核代码执行流程(一)

本文根据debian开机信息来查看内核源代码. 系统使用<debian下配置dynamic printk以及重新编译内核>中内核源码来查看执行流程. 使用dmesg命令,得到下面的开机信息: [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.2.57 ([email protected]) (gcc versio

第一章 Java代码执行流程

说明:本文主要参考自<分布式Java应用:基础与实践> 1.Java代码执行流程 第一步:*.java-->*.class(编译期) 第二步:从*.class文件将其中的内容加载到内存(类加载)(运行期) 第三步:执行代码(运行期) 2.代码编译 javac命令将源码文件编译为*.class文件. 后边将介绍: javac将*.java编译成*.class文件的过程 class文件的文件格式,以及其存储的内容 3.类加载 主要是指将*.class文件加载到JVM,并形成Class对象的机

debian内核代码执行流程(三)

接续<debian内核代码执行流程(二)>未完成部分 下面这行输出信息是启动udevd进程产生的输出信息: [ 3.306217] udevd[49]: starting version 175 175是udevd的版本号. 根据<essential linux device drivers>中关于udev的说明(英文书140页),设备可以分成热插拔和冷插拔. 热插拔是在已经运行的系统中连接的设备,冷插拔是系统启动前插入的设备. 当系统检测到热插拔设备时,系统使用netlink s

debian内核代码执行流程(二)

继续上一篇文章<debian内核代码执行流程(一)>未完成部分. acpi_bus_init调用acpi_initialize_objects,经过一系列复杂调用后输出下面信息: [ 0.147393] ACPI: SSDT 7f5e7cc0 0030F (v01 PmRef Cpu0Ist 00003000 INTL 20060912) [ 0.147566] ACPI: Dynamic OEM Table Load: [ 0.147569] ACPI: SSDT (null) 0030F

Spark Streaming 执行流程

Spark Streaming 是基于spark的流式批处理引擎,其基本原理是把输入数据以某一时间间隔批量的处理,当批处理间隔缩短到秒级时,便可以用于处理实时数据流. 本节描述了Spark Streaming作业的执行流程. 图1 Spark Streaming作业的执行流程 具体流程: 客户端提交作业后启动Driver,Driver是park作业的Master. 每个作业包含多个Executor,每个Executor以线程的方式运行task,Spark Streaming至少包含一个recei

Java中异常发生时代码执行流程

异常与错误: 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception. 错误: 它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务).

Spark内部执行机制

Spark内部执行机制 1.1 内部执行流程 如下图1为分布式集群上spark应用程序的一般执行框架.主要由sparkcontext(spark上下文).cluster manager(资源管理器)和?executor(单个节点的执行进程).其中cluster manager负责整个集群的统一资源管理.executor是应用执行的主要进程,内部含有多个task线程以及内存空间. 图1 spark分布式部署图 详细流程图如下图2: 图2 详细流程图 (1) 应用程序在使用spark-submit提

【转】Spark架构与作业执行流程简介

原文链接 http://www.cnblogs.com/shenh062326/p/3658543.html Spark架构与作业执行流程简介 Local模式 运行Spark最简单的方法是通过Local模式(即伪分布式模式). 运行命令为:./bin/run-example org.apache.spark.examples.SparkPi local 基于standalone的Spark架构与作业执行流程 Standalone模式下,集群启动时包括Master与Worker,其中Master负

Spark执行流程(转)

   原文地址:http://blog.jobbole.com/102645/ 我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程.根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动.Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core.而Driver进程要做的第一件事情,就是向集群管理器(可以是Spark Standalone集群,也可以是其他的资源管