mapreduce Job()抛出'java.lang.IllegalStateException'异常。无法评估org.apache.hadoop.mapreduce.Job.toString()

时间:2016-03-30 14:39:59

标签: scala hadoop apache-spark mapreduce

我正在运行一个Spark Streaming程序,该程序使用mapreduce作业以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()

以下是用于提交spark流式处理作业的代码:

    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()
    }

3 个答案:

答案 0 :(得分:0)

很可能是因为它在提交之前尝试在你的工作上调用toString。

不是手动创建Job实例,而是尝试使用spark-submit --class MyClass --master local [2] /path/to/yourjar.jar(Submitting spark applications

提交它

您的代码可能如下所示:

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
}

答案 1 :(得分:0)

我发现这是一个非阻塞异常。 我可以在调试模式下看到异常,但程序可以正常执行直到结束。

答案 2 :(得分:0)

因为idea,它会自动处理toString。需要在idea中的debugger中设置,去掉header string自动处理的检查。这里应该是“builder, exception, deployer”。