java中的spark提交(sparklauncher)

ryoqjall  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(674)

我制作了spark+hadoopYarn环境,spark提交命令运行良好。因此,我在我的应用程序jar中编写了sparkauncher java代码来实现这一点,但不知怎么的,它不起作用(实际上,计算机迷一开始在旋转,但不像我使用spark submit时那样长)
它似乎工作不好(hadoopwebui中没有应用程序日志,不像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)执行

m0rkklqb

m0rkklqb1#

一开始我也有同样的问题。我认为主要的问题是你忘记了waitfor()。
此外,在java代码中提取错误消息并处理它(例如,记录它或在调试时检查它)也非常有用。要允许这样做,您应该创建一个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块中。希望有帮助

相关问题