我制作了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/