我需要从在Liberty(17.0.0.2)上运行的Web应用程序启动的线程运行Spark作业。这部署在Docker容器上。
我能够通过从java代码启动的spark-submit脚本启动spark(2.2.0)作业来实现这一点。但是,我想删除脚本调用并使用SparkLauncher。当我这样做时,代码挂起在SparkLauncher构造函数上。构造函数不会返回阻止整个工作的任何内容。在下面的代码中调用构造函数后,我没有看到日志。
private static Map<String, String> env = new HashMap<String, String>();
static {
env.put("SPARK_HOME", "/Spark");
env.put("JAVA_HOME", "/opt/ibm/java-x86_64-80/jre");
env.put("SPARK_PRINT_LAUNCH_COMMAND","1");
}
private static final String SPARK_MASTER_URL = "local[*]";
public SparkAppHandle launch(String appName, String appJar, String sparkClass, String[] args)
throws IOException, InterruptedException {
logger.logp(Level.INFO, CLASS, "launch", " About to create SparkLauncher ");
SparkLauncher launchPad = new SparkLauncher(env);
logger.logp(Level.INFO, CLASS, "launch", " About to set Spark App Name ");
launchPad = launchPad.setAppName(appName);
有关如何进一步调试的任何线索?我找不到包含任何信息的日志来调试此问题。
答案 0 :(得分:1)
这是一个阶级路径问题;有些罐子不见了。但是,不知何故日志中没有信息来调试这个,非常奇怪。在确保类路径中的所有相关jar后,它开始工作。
答案 1 :(得分:0)
您是否调用了SparkLauncher的启动方法?它将返回Process,您需要捕获此过程的输出以查看正在进行的操作