前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark任务两个小问题笔记

Spark任务两个小问题笔记

作者头像
我是攻城师
发布2018-05-14 17:40:42
5540
发布2018-05-14 17:40:42
举报
文章被收录于专栏:我是攻城师我是攻城师

今天在用spark处理数据的时候,遇到两个小问题,特此笔记一下。

两个问题都与网络交互有关,大致处理场景是,在driver端会提前获取组装一批数据,然后把这些数据发送executor端进行后续处理。

问题一:序列化异常

driver有一个case class类需要封装一些数据发送到executor上,原来都是scala的类,直接发送到executor上执行没问题,而且也没加序列化的注解,原因是因为scala会自动给函数方法序列化,因为这个类出现在函数中,所以也没事,但今天在这个类里面又加了一个java的bean,结果就出现了异常:

原因是新加的java bean没有序列化,所以导致了这个问题,scala的函数序列化可能并不是深度序列化,不会对类属性里面的类再次进行序列化,所以解决办法就是让这个java bean实现java的序列化接口:

问题二:driver端发送的数据太大导致超过spark默认的传输限制

异常如下:

从上面的异常提示,已经很明显了,就是默认driver向executor上提交一个任务,它的传输数据不能超过128M,如果超过就抛出上面的异常。

如何解决:

方法一:使用广播变量传输

方法二:调大spark.rpc.message.maxSize的值,默认是128M,我们可以根据需要进行适当调整

在使用spark-submit提交任务的时候,加上配置即可:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档