我制作了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)
执行它答案 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块中。希望它有所帮助