本地Spark测试在Jenkins中获取现有Spark会话并因缺少配置而失败

时间:2019-05-09 13:52:42

标签: apache-spark kryo

我有一个运行Spark(Java API {{1})的本地集成测试。它使用以下命令设置SparkSession:

SELECT * FROM collection c 
WHERE c.Name IN ('Test1', 'Test2')

,然后使用2.11_2.4.0处理数据:

private static SparkSession SPARK_SESSION;

@BeforeClass
public static void beforeClass() {
    SparkConf sparkConf = new SparkConf().registerKryoClasses(new Class<?>[]{LongWritable.class, Text.class});
    SPARK_SESSION = SparkSession.builder().master("local[1]").config(sparkConf).getOrCreate();
}

在本地(在Windows上)每次都能成功运行。但是,在Jenkins上运行时,它只能在大约25%的时间内工作,而在以下情况下则无法正常工作:75%

SPARK_SESSION

很明显,詹金斯(Jenkins)的另一份工作已经创建了JavaRDD<Tuple2<LongWritable, Text>> rdd = SPARK_SESSION.sparkContext() .newAPIHadoopFile(inputDir, CustomInputFormat.class, LongWritable.class,Text.class, conf) .toJavaRDD(); ,因此我的测试使用了它。但是,现有的2019-05-09 10:07:49 WARN o.a.s.s.SparkSession$Builder [Test worker]: Using an existing SparkSession; some configuration may not take effect. 2019-05-09 09:45:36 ERROR o.a.s.e.Executor [Executor task launch worker for task 5]: Exception in task 1.0 in stage 4.0 (TID 5) java.io.NotSerializableException: org.apache.hadoop.io.LongWritable Serialization stack: - object not serializable (class: org.apache.hadoop.io.LongWritable, value: 74888) - field (class: scala.Tuple2, name: _1, type: class java.lang.Object) 没有附加Kryo配置。

我已经尝试过SparkSession,但是仍然使用现有的SparkSession。我尝试将Kryo配置添加到现有的getOrCreate().newSession()中,但这也没有任何改变。

如何确保测试得到自己的SparkContext,或者至少能够为配置添加属性?

0 个答案:

没有答案