Spark的应用程序执行模型,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


对于嵌入式应用程序模型

不是很明白你提问的意思.
我们一般做嵌入式应用程序基本是模块化的.各个功能部分都尽量进行模块化封装.模块与模块只要接口对得上,基本就OK.软件硬件都是如此.这样有益于移植和重用.
一般软件的部分,我们会分3层.由底层到上层分别是HW/FM/AP.
HW(hardware)一般是硬件的控制和数据交换的接口.硬件驱动和IO口操作,基本在这一层.
FM(Firmware)中间层,向下调用HW接口进行和硬件的控制和数据交换.向上是由AP层进行调用.一般这一层是某项功能的具体的数据和文件处理.
AP(application)应用层,向下调用FM层进行相应的数据处理.这层主要是用户UI的制做和协调和调用嵌入式系统的各种功能.

以你说的"控制摄像设备进行视频采集程序"为例,只举采集单项功能的例子.

首先HW层,软件就要写SENSOR(传感器)控制接口,例如数据接口有多少根数据线,用总线还是用IO口.以何种格式或者顺序取数据.控制接口,RESET(复位)IO扣控制,和SENSOR的控制接口(I2C,SPI等接口)协议.这些都是HW层要写的程序.主要是如何控制硬件设备.

FM层,软件部分就要写如何处理从HW过来的数据,以及数据和硬件控制的协调.假如你从SENSOR采集的图象数据是YUV的数据.这部分就要写如何去获取一帧图象数据,如何将一帧一帧的图象数据组织成视频.如果需要保存和传输,还要组织成视频文件结构,后者传输的流媒体数据结构.同时FM层还要包括如何开关图象采集设备.

AP层,软件部分基本就是写界面和控制流程的程序.比如按哪个按键开始图象采集,按哪个键停止图象采集,等等.

大致上程序就这些,不知道你需要的是不是这个.
 

寻找雪佛兰 乐驰 汽车高仿真模型

好像没有额 这车好像没有做模型 要不你上淘宝去看看
 

相关内容