私のアプリケーションでチェックポイントを使用していて、アプリケーションが失敗で起動すると、SQLContext
にNullPointerException
が表示されます。
シリアライゼーション/デシリアライズの問題により、アプリケーションがSQLContext
を回復できないと仮定します。 SQLContext
はシリアル化できませんか?ここでチェックポイントSqlContext nullpointerExceptionの問題
は、Spark SQLが内部キュータ側にSQLContext
を使用する必要があるため
//DriverClass
final JavaSparkContext javaSparkCtx = new JavaSparkContext(conf);
final SQLContext sqlContext = new SQLContext(javaSparkCtx);
JavaStreamingContextFactory javaStreamingContextFactory = new JavaStreamingContextFactory() {
@Override
public JavaStreamingContext create() { //only first time executed
// TODO Auto-generated method stub
JavaStreamingContext jssc = new JavaStreamingContext(javaSparkCtx, Durations.minutes(1));
jssc.checkpoint(CHECKPOINT_DIRECTORY);
HashMap < String, String > kafkaParams = new HashMap < String, String >();
kafkaParams.put("metadata.broker.list",
"abc.xyz.localdomain:6667");
//....
JavaDStream <String> fullMsg = messages
.map(new MapFunction());
fullMsg.foreachRDD(new SomeClass(sqlContext));
return jssc;
}
};
}
//Closure Class
public class SomeClass implements Serializable, Function < JavaRDD <String> , Void > {
SQLContext sqlContext;
public SomeClass(SQLContext sqlContext) {
// TODO Auto-generated constructor stub
this.sqlContext = sqlContext;
}
public void doSomething() {
this.sqlContext.createDataFrame();**// here is the nullpointerException**
}
//.......
}
素晴らしい、おかげでzsxwing。それは魅力のように働いた。 – Bill
SQLContextではなくHiveContextを使用している場合はどうなりますか? – Dazzler
既にHiveContextを作成している場合、SQLContext.getOrCreateはそれを返します。 – zsxwing