我正在运行一个Spark Streaming程序,该程序使用mapreduce Job以AvroParquet格式写入文件。程序在集群上执行时工作正常,但在本地失败。
代码
import org.apache.hadoop.mapreduce.Job
val job = Job.getInstance()
引发以下异常:
Method threw 'java.lang.IllegalStateException' exception. Cannot evaluate org.apache.hadoop.mapreduce.Job.toString()
以下是用于提交火花流作业的代码:
SparkConf conf = new SparkConf(false)
.setMaster("local[2]")
.setAppName("test");
SparkContext sc = new SparkContext(conf);
MyClass job = new MyClass();
job.run();
class MyClass(){
protected def run(): Unit ={
val ssc: StreamingContext = createStreamingContext(parameters)
// here there is something like
// stream.map(func1).reduceBykey(func2).foreachRDD(rdd => {val job = Job.getInstance()})
ssc.start()
}
发生这种情况很可能是因为它试图在提交作业之前对作业调用toString。
与其手动创建Job实例,不如尝试使用spark-submit--class MyClass--master local[2]/path/to/yourjar.jar(提交spark应用程序)提交它
你的代码可能看起来像这样:
object MyClass {
def main(args: Array[String]): Unit ={
val conf = new SparkConf(false)
.setMaster("local[2]")
.setAppName("test");
val sc = new SparkContext(conf);
// do what you need
}
我发现这是一个非阻塞异常。我可以在调试模式下看到异常,但程序可以正确执行到最后。
因为这个想法,它将自动处理toString。您需要在调试器中设置它,并删除对头字符串自动处理的检查。应该是";构建器、异常、部署器";在这个。