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

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引用,在进行网络通信时不对对象中的属性进行序列化

你可能感兴趣的:(spark)