Spark中的Spark提交(SparkLauncher)

时间:2017-03-14 08:18:49

标签: java hadoop apache-spark

我制作了spark + hadoop纱线环境,并且spark-submit命令效果很好。所以我在我的应用程序jar中创建了SparkLauncher java代码,但不管怎么说它不起作用(实际上计算机风扇开始旋转但不像我使用spark-submit那样长。)

似乎效果不好(没有应用程序登录hadoop web ui,与spark-submit不同)。当我使用' SparkLauncher'时,我看不到任何错误日志。没有日志消息,我无能为力。

到目前为止我是这样做的。

public class Main {
    public static void main(String[] args) {
        Process spark = null;
        try
        {
            spark = new SparkLauncher()
            .setAppResource("/usr/local/spark/examples/jars/spark-examples*.jar")
            .setMainClass("org.apache.spark.examples.SparkPi")
            .setMaster("yarn")
            .setDeployMode( "cluster")
            .launch();
        }
        catch( IOException e)
        {
            e.printStackTrace();
        }
    }
}

用(java -jar example.jar)

执行它

1 个答案:

答案 0 :(得分:2)

起初我遇到了同样的问题。我认为主要问题是你忘记了waitFor()。

此外,在java代码中提取errorMessage并处理它(例如在debuging时记录或检查它)真的很有帮助。为此,您应该创建一个streamReader线程,如下所示:

    InputStreamReaderRunnable errorStreamReaderRunnable = new InputStreamReaderRunnable(spark.getErrorStream(), "error");
    Thread errorThread = new Thread(errorStreamReaderRunnable, "LogStreamReader error");
    errorThread.start();

   int result= spark.waitFor();
   if(result!=0) {
            String errorMessage = extractExceptionMessage(errorStreamReaderRunnable.getMessage());
            LOGGER.error(errorMessage);
        }

这应该在你的launch()命令之后和try块中。希望它有所帮助