Spark的应用程序执行模型

今天看了一篇名为Top 3 Troubleshooting Tips to Keep You Sparking的文章,讲述了一些编写Spark程序需要注意的地方,看完之后想要总结一下。

Spark执行模型,总结为官方的架构图:

本文主要讨论Driver和Worker。

我们知道,对于Spark开发的分布式应用程序,和写普通的scala程序基本类似。所以这时往往会陷入一些误区:

在Spark开发的应用程序的对象里,我给他们分成2类对象:

1、闭包内的对象:即在类似map, filter, reduceByKey这样的闭包内的对象,通常会有一个函数映射。

2、闭包外的对象:反之,即使闭包外的对象。

这2类对象其实是混杂在Driver 和 Worker里的,即并不是所有对象都会随着程序序列化到Worker里。

Summary

Summary1:对于Spark应用程序,创建在闭包内的对象创建在闭包外的对象状态是不一样的。

Summary2: 如果强制将一个不支持序列化的对象,放到闭包里,会报异常NotSerializableException

Summary3:闭包内的对象会被序列化到Worker参与计算,闭包外的对象只会存在于Driver里

Summary3.1 闭包外的对象之存在于Driver内会导致->所有涉及此对象的操作,会在Driver里单线程执行,导致Spark程序非常慢

Summary4:关于异常捕获,如果在Spark Driver程序中对job的异常没有捕捉的话会导致java.lang.IllegalArgumentException: Shuffle Id Nnnn Registered Twice?

   解决方案:

1、对于状态不一致,和NotSerializableException这种情况,可以采用序列化自定义对象的方法 和 BroadCast对象的方法。

2、对于异常,尽量捕捉能在并行操作中可以处理的异常。

还有2个问题:

Tip2 Why spark slow的代码例子里JsonParser.parse为什么不报NotSerializableException,是否object声明的对象默认是序列化的?是否伴生对象不能被分发到Worker里,只能在Driver里,Why?

——EOF——

原创文章,转载请注明出自:http://blog.csdn.net/oopsoom/article/details/38389111

Spark的应用程序执行模型,布布扣,bubuko.com

时间: 2024-10-22 22:29:41

Spark的应用程序执行模型的相关文章

TT和chrome执行模型对比分析

老大让写一篇高大上的博文,那么如何才能高大上呢?从某种角度讲只要迎合老大的口味给他一篇重口味的岛国动作片剖析就能轻松过关: 从程序员角度讲,能写出高大上的范围有很多,如程序架构,算法分析.编程语言理解.操作系统理解.知名开源程序的原创分析.优秀博文的翻译等都能吸引许多同学的兴趣.今天我再教一招让博文高大上有营养的捷径就是攀高枝,用你现有的程序框架和知名的开源架构做比较剖析.今天我选择走捷径,为同学们来分析下我最近在负责的一款im客户端产品--TeamTalk(简称TT)和chorme执行模型的区

通过DeveloperApi获取spark程序执行进度及异常

效果显示: 代码: package org.apache.spark.zpc.listener import org.apache.spark.Logging import org.apache.spark.scheduler._ import scala.collection.mutable /** * Spark 的 DeveloperApi 提供针对app, job, task的执行监听. * 通过该监听,可以实现: * 1.任务执行进度的粗略计算. * 2.执行异常失败时,获取异常信息.

ASP.NET执行模型之IIS服务器处理流程

之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解. 本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过程.我们从ASP.NET站点的一个页面请求开始说起,先看下面对于某个请求的简单执行模型 (注意这是对asp.net站点Index.aspx页面的第一次请求,所以需要进行动态编译): 我们通过ASP.NET的执行模型简单的描述了一次web请求过程,注意在不同的IIS版本中,处理模型和通信方式是不一样的,在IIS

程序员模型

S3C2440A开发了有ARM公司开发的先进的ARM920T核心 处理器运行状态 从程序猿的角度看ARM920T处于两种状态之一 ARM状态:执行32位字对齐的ARM指令 THumb状态:执行16位以半字对齐的THumb指令在这种状态下,程序计数器PC使用位1来进行切换 状态切换 进入THumb状态 执行一个BX指令,(分支和状态切换)可以实现进入到THumb状态,操作数寄存器设置状态位位[0] 如果处理器在THUmb状态发生异常,异常处理返回时会自动切换到THumb状态 进入ARM状态 执行B

CLR执行模型

1:首先先明确CLR的概念: 1:首先先明确CLR的概念:  CLR(Common Language Runtime):公共语言运行时,是一个可由多种编程语言使用的"运行时"; 在运行时,CLR根本不关心开发人员用的是哪一种语言来变写代码,它只关注语言是否是面向CLR(面向运行时)的. 2:CLR的核心功能包括: 内存管理.程序集加载.安全性.异常处理和线程同步. 3:如图: 无论是用的是哪一种编译器,结果都是一个托管模块(managed module),托管代码时一个标准的32位/6

【Framework】HTTP运行期与页面执行模型

HTTP运行期 HTTP运行期处理客户端应用程序(例如Web浏览器)进入的一个Web请求,通过处理它的应用程序的适当组件路由请求,然后产生响应并发回提出请求的客户端应用程序. 进入的HTTP Web请求最先由IIS Web服务器接收到,它在此请求基于ASP.NET已注册处理的扩展名传送到ASP.NET ISAPI上. HTTP运行期首先创建一个HttpContext对象的实例,它包含了当前正在处理的请求信息,接着创建在处理逻辑中涉及到的所有其他组件都可以使用的上下文对象.HttpContext实

01_CLR执行模型

1:首先先明确CLR的概念: CLR(Common Language Runtime):公共语言运行时,是一个可由多种编程语言使用的"运行时"; 在运行时,CLR根本不关心开发人员用的是哪一种语言来变写代码,它只关注语言是否是面向CLR(面向运行时)的. 2:CLR的核心功能包括: 内存管理.程序集加载.安全性.异常处理和线程同步. 3:如图: 无论是用的是哪一种编译器,结果都是一个托管模块(managed module),托管代码时一个标准的32位/64位Microsoft Wind

Orleans的单线程执行模型

Orleans在默认情况下只创建一个grain的实例,并以单线程模型执行.如果同一个grain实例,在Orleans存在多个实例,就会产生并发冲突,单线程执行模型就可以完全避免并发冲突了. 但在特殊场景下,有些实例是需要创建多个实例或者以非单线程的执行方式来满足性能的需要; 如何支持创建多个实例 对于了解负载均衡的人,如果web服务器支持无状态(分布式Sesson或者cookie身份识别),会很容易做负载.同样的,对于grain来说,如果是无状态的,那么在系统中创建任意多的实例都是一样的,不存在

你好,C++(4)2.1.3 我的父亲母亲:编译器和链接器 2.1.4 C++程序执行背后的故事

2.1.3  我的父亲母亲:编译器和链接器 从表面上看,我是由Visual Studio创建的,而实际上,真正负责编译源代码创建生成可执行程序HelloWorld.exe的却是Visual Studio中集成的C++编译器cl.exe和链接器link.exe.他们二老,才是我的亲生爹妈. 为了便于人们的编写.阅读和维护,我们的源文件是使用C++这种人们可以理解的高级程序设计语言编写的.然而,计算机却并不理解这种高级语言,也就无法直接执行高级语言编写而成的源文件.所以,这里就需要一个翻译的工作,将