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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值