今天在寫spark任務的時候遇到這么一個錯誤,我的spark版本是1.5.1.
1 Exception in thread "main" com.esotericsoftware.kryo.KryoException: Buffer overflow. Available: 0, required: 124 2 at com.esotericsoftware.kryo.io.Output.require(Output.java:138) 3 at com.esotericsoftware.kryo.io.Output.writeBytes(Output.java:220) 4 at com.esotericsoftware.kryo.io.Output.writeBytes(Output.java:206) 5 at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ByteArraySerializer.write(DefaultArraySerializers.java:29) 6 at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ByteArraySerializer.write(DefaultArraySerializers.java:18) 7 at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:568) 8 at carbonite.serializer$write_map.invoke(serializer.clj:69)
提示是說kryo序列化緩沖區溢出,導致job執行失敗。那好,就把緩沖區改大點好了。搜索了一下答案。
說是可以這么設置:
1 SparkConf sparkConf = new SparkConf(); 2 sparkConf.set("spark.kryoserializer.buffer.mb","128"); 3 JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
但是在測試的時候,spark提示這個設置在spark1.4之后過時了,建議使用來設置。
1 spark.kryoserializer.buffer
那就改改:
1 SparkConf sparkConf = new SparkConf(); 2 sparkConf.set("spark.kryoserializer.buffer","64"); 3 JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
問題解決。