【spark】Exception 异常处理,随笔记录

本文介绍了Spark在实际应用中常见的性能问题及解决方法,包括内存溢出、任务序列化失败、任务执行速度不均衡等问题,并提供了具体的配置调整建议。
1. spark解决 org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow
解决方法:
--conf spark.kryoserializer.buffer.max=256m
--conf spark.kryoserializer.buffer=64m
conf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer")
conf.set("spark.kryoserializer.buffer.mb","520")


2. Spark运行出现java.lang.OutOfMemoryError:Java heap space
解决方法:
--driver-memory 运行内存
ps:
../bin/spark-submit --master spark://spark1:7077 --class com.XmlSpark --driver-memory 10G --executor-memory 10G --total-executor-cores 4 --conf spark.kryoserializer.buffer=64m /data/peoplezx-1.0-SNAPSHOT.jar


3.
Exception in thread "main" org.apache.spark.SparkException: Task not serializable
解决方法: sql("select * from data.article where year='2017' and month='08' and length(content)<20000").collect.foreach(row => {})
将 map =====> collect.foreach

4. setMaster("local[4]")
val conf = new SparkConf().setAppName("XmlSpark").setMaster("local[4]")
由于setMaster("local[4]")
故在http://101.0.101.01:8080/ 的Running Applications 没有看到执行的任务
可通过
--master spark://spark1:7077
设置master

5.单条记录消耗大
解决方法:使用mapPartition替换map,mapPartition是对每个Partition进行计算,而map是对partition中的每条记录进行计算;

6.collect输出大量结果时速度慢
解决方式:collect源码中是把所有的结果以一个Array的方式放在内存中,可以直接输出到分布式?文件系统,然后查看文件系统中的内容;

7.任务执行速度倾斜
解决方式:如果是数据倾斜,一般是partition key取的不好,可以考虑其它的并行处理方式 ,并在中间加上aggregation操作;如果是Worker倾斜,例如在某些worker上的executor执行缓慢,可以通过设置spark.speculation=true 把那些持续慢的节点去掉;

8.通过多步骤的RDD操作后有很多空任务或者小任务产生
解决方式:使用coalesce或repartition去减少RDD中partition数量;

9.解决Task not serializable Exception错误
方法1:将RDD中的所有数据通过JDBC连接写入数据库,若使用map函数,可能要为每个元素都创建connection,这样开销很大,如果使用mapPartitions,那么只需要针对每个分区建立connection;mapPartitions处理后返回的是Iterator。
方法2:对未序列化的对象加@transisent引用,在进行网络通信时不对对象中的属性进行序列化

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值