java - Spark在java中提交(SparkLauncher)

标签 java hadoop apache-spark

我制作了spark+hadoop yarn 环境并且spark-submit命令运行良好。所以我制作了 SparkLauncher java 代码来在我的应用程序 jar 中执行此操作,但不知何故它不起作用(实际上计算机风扇一开始旋转,但不像我使用 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)执行它

最佳答案

一开始我也遇到了同样的问题。我认为主要问题是您忘记了 waitFor()。

此外,在 Java 代码中提取 errorMessage 并处理它(例如记录它或在调试时检查它)确实很有帮助。为此,您应该创建一个 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 block 内。希望对您有帮助

关于java - Spark在java中提交(SparkLauncher),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42780886/

相关文章:

java - Java-Process 可以删除加载的 JAR 吗?

hadoop - 在 hadoop 上运行 RecommenderJob 时遇到问题

hadoop - 组的写权限未使用默认 acl 在 hadoop 中继承

python - 使用 Databricks 将 Google Api 的结果写入数据湖

java - 我想检测图像中的对象并在另一个页面中重绘它,所以有人会建议可以使用哪种算法?

java - 如何在 Swing 中堆叠标签?

arrays - Spark 卡拉: Convert Array of Struct column to String column

scala - 如何根据条件(组中的值)更新列?

java - Activiti 用户界面 Spring App 集成

hadoop - 无法访问ambari UI