Я пытаюсь отправить JAR с заданием Spark в кластер YARN из кода Java. Я использую SparkLauncher для отправки примера SparkPi:
Process spark = new SparkLauncher()
.setAppResource("C:\\spark-1.4.1-bin-hadoop2.6\\lib\\spark-examples-1.4.1-hadoop2.6.0.jar")
.setMainClass("org.apache.spark.examples.SparkPi")
.setMaster("yarn-cluster")
.launch();
System.out.println("Waiting for finish...");
int exitCode = spark.waitFor();
System.out.println("Finished! Exit code:" + exitCode);
Есть две проблемы:
- При отправке в режиме "пряжи-кластер" приложение успешно передается в YARN и выполняется успешно (оно отображается в пользовательском интерфейсе YARN, который отображается как SUCCESS, а pi печатается на выходе). Однако подающее приложение никогда не уведомляется о завершении обработки - оно бесконечно зависает после печати "Ожидание до завершения...". Журнал контейнера можно найти здесь
- При отправке в режиме "пряжи-клиент" приложение не появляется в пользовательском интерфейсе YARN, а приложение, зависящее от "Ожидание до завершения...". Когда висящий код убит, приложение отображается в пользовательском интерфейсе YARN, и оно сообщается как SUCCESS, но выход пуст (pi не распечатывается). Журнал контейнера можно найти здесь
Я попытался выполнить подающее приложение как с Oracle Java 7, так и с 8.