Мне нужно создать Java программу, которая отправляет python сценарии (использующие PySpark) в кластер Yarn. Теперь я увидел, что использование SparkLauncher - это то же самое, что и использование YarnClient, потому что он использует встроенный клиент Yarn (писать мой собственный клиент Yarn - безумие, я пытался слишком много вещей для обработки). Итак, я написал:
public static void main(String[] args) throws Exception {
String SPARK_HOME = System.getProperty("SPARK_HOME");
submit(SPARK_HOME, args);
}
static void submit(String SPARK_HOME, String[] args) throws Exception {
String[] arguments = new String[]{
// application name
"--name",
"SparkPi-Python",
"--class",
"org.apache.spark.deploy.PythonRunner",
"--py-files",
SPARK_HOME + "/python/lib/pyspark.zip,"+ SPARK_HOME +"/python/lib/py4j-0.9-src.zip",
// Python Program
"--primary-py-file",
"/home/lorenzo/script.py",
// number of executors
"--num-executors",
"2",
// driver memory
"--driver-memory",
"512m",
// executor memory
"--executor-memory",
"512m",
// executor cores
"--executor-cores",
"2",
"--queue",
"default",
// argument 1 to my Spark program
"--arg",
null,
};
System.setProperty("SPARK_YARN_MODE", "true");
System.out.println(SPARK_HOME);
SparkLauncher sparkLauncher = new SparkLauncher();
sparkLauncher.setSparkHome("/usr/hdp/current/spark2-client");
sparkLauncher.setAppResource("/home/lorenzo/script.py");
sparkLauncher.setMaster("yarn");
sparkLauncher.setDeployMode("cluster");
sparkLauncher.setVerbose(true);
sparkLauncher.launch().waitFor();
}
Когда я запускаю этот Jar с машины в кластере, ничего не происходит ... Нет ошибок, Нет журнала, Нет контейнера пряжи ... просто ничего ... если я попробую чтобы поместить println в этот код, obvs, он печатает println.
- Что я неправильно настраиваю?
- Если я хочу запустить этот JAR-файл с другого компьютера, где и как следует объявить IP-адрес?