spark的troubleshooting

troubleshooting

troubleshooting之控制shuffle reduce端缓冲大小以避免OOM

image

画的图 所举的例子 以 hashshufflemanager

troubleshooting之解决JVM GC导致的shuffle文件拉取失败

image

总结来说就是executor拉取上一个stage的数据时,不巧,遇到了别人在gc.

关于blockmanager:
见word笔记

troubleshooting之解决YARN队列资源不足导致的application直接失败

yarn 什么的不懂。。不记了。。

troubleshooting之解决各种序列化导致的报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
你会看到什么样的序列化导致的报错?
用client模式去提交spark作业,观察本地打印出来的log。如果出现了类似于Serializable、Serialize等等字眼,报错的log,那么恭喜大家,就碰到了序列化问题导致的报错。
虽然是报错,但是序列化报错,应该是属于比较简单的了,很好处理。
序列化报错要注意的三个点:
1、你的算子函数里面,如果使用到了外部的自定义类型的变量,那么此时,就要求你的自定义类型,必须是可序列化的。
final Teacher teacher = new Teacher("leo");
studentsRDD.foreach(new VoidFunction() {
public void call(Row row) throws Exception {
String teacherName = teacher.getName();
....
}
});
public class Teacher implements Serializable {
}
2、如果要将自定义的类型,作为RDD的元素类型,那么自定义的类型也必须是可以序列化的
JavaPairRDD<Integer, Teacher> teacherRDD
JavaPairRDD<Integer, Student> studentRDD
studentRDD.join(teacherRDD)
public class Teacher implements Serializable {
}
public class Student implements Serializable {
}
3、不能在上述两种情况下,去使用一些第三方的,不支持序列化的类型
Connection conn =
studentsRDD.foreach(new VoidFunction() {
public void call(Row row) throws Exception {
conn.....
}
});
Connection是不支持序列化的

troubleshooting之解决算子函数返回NULL导致的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
在算子函数中,返回null
// return actionRDD.mapToPair(new PairFunction<Row, String, Row>() {
//
// private static final long serialVersionUID = 1L;
//
// @Override
// public Tuple2<String, Row> call(Row row) throws Exception {
// return new Tuple2<String, Row>("-999", RowFactory.createRow("-999"));
// }
//
// });
大家可以看到,在有些算子函数里面,是需要我们有一个返回值的。但是,有时候,我们可能对某些值,就是不想有什么返回值。我们如果直接返回NULL的话,那么可以不幸的告诉大家,是不行的,会报错的。
Scala.Math(NULL),异常
如果碰到你的确是对于某些值,不想要有返回值的话,有一个解决的办法:
1、在返回的时候,返回一些特殊的值,不要返回null,比如“-999”
2、在通过算子获取到了一个RDD之后,可以对这个RDD执行filter操作,进行数据过滤。filter内,可以对数据进行判定,如果是-999,那么就返回false,给过滤掉就可以了。
3、大家不要忘了,之前咱们讲过的那个算子调优里面的coalesce算子,在filter之后,可以使用coalesce算子压缩一下RDD的partition的数量,让各个partition的数据比较紧凑一些。也能提升一些性能。

troubleshooting之解决yarn-client模式导致的网卡流量激增问题

什么client模式的。。不记了。。。

troubleshooting之解决yarn-client模式导致的网卡流量激增问题

什么client模式的。。不记了。。。

troubleshooting之错误的持久化方式以及checkpoint的使用

  • 错误的持久化使用方式:

image

  • checkpoint
    image