Я могу отправить задание spark через spark-submit, однако, когда я пытаюсь сделать то же самое программно с помощью SparkLauncher, это ничего не дает (я даже не вижу задание Spark в пользовательском интерфейсе)
Ниже приведен сценарий:
У меня есть сервер (скажем, имя хоста: cr-hdbc101.dev.local: 7123), на котором размещен кластер hdfs.Я помещаю толстую банку на сервер, который пытаюсь выполнить.Следующая искробезопасная отправка работает должным образом, и задание зажигания отправляется в режиме кластера пряжи
spark-submit \
--verbose \
--class com.digital.StartSparkJob \
--master yarn \
--deploy-mode cluster \
--num-executors 2 \
--driver-memory 2g \
--executor-memory 3g \
--executor-cores 4 \
/usr/share/Deployments/Consolidateservice.jar "<arg_to_main>"
Однако следующий фрагмент кода SparkLauncher не работает
val sparkLauncher = new SparkLauncher()
sparkLauncher
.setSparkHome("/opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/spark")
.setAppResource("/usr/share/Deployments/Consolidateservice.jar")
.setMaster("yarn-cluster")
.setVerbose(true)
.setMainClass("com.digital.StartSparkJob")
.setDeployMode("cluster")
.setConf("spark.driver.cores", "2")
.setConf("spark.driver.memory", "2g")
.setConf("spark.executor.cores", "4")
.setConf("spark.executor.memory", "3g")
.addAppArgs(<arg_to_main>)
.startApplication()
Я думал,может быть, SparkLauncher не получает корректные переменные env для работы, поэтому я отправляю следующее в SparkLauncher, но безрезультатно (в основном я передаю все в spark-env.sh в SparkLauncher)
val env: java.util.Map[String, String] = new java.util.HashMap[String, String]
env.put("SPARK_CONF_DIR", "/etc/spark/conf.cloudera.spark_on_yarn")
env.put("HADOOP_HOME", "/opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/hadoop")
env.put("YARN_CONF_DIR", "/etc/spark/conf.cloudera.spark_on_yarn/yarn-conf")
env.put("SPARK_LIBRARY_PATH", "/opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/spark/lib")
env.put("SCALA_LIBRARY_PATH", "/opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/spark/lib")
env.put("LD_LIBRARY_PATH", "/opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/hadoop/lib/native")
env.put("SPARK_DIST_CLASSPATH", "/etc/spark/conf.cloudera.spark_on_yarn/classpath.txt")
val sparkLauncher = new SparkLauncher(env)
sparkLauncher
.setSparkHome("/opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/spark")...
Что добавляетк сожалению, когда я использую один и тот же код SparkLauncher для режима клиента-пряжи, он прекрасно работает.
Может кто-нибудь указать мне, что мне не хватает, я просто чувствую, что смотрю на проблемуне распознавая его.
ПРИМЕЧАНИЕ. И основной класс (com.digital.StartSparkJob), и код SparkLauncher являются частью жирной банки, которую я отправляю на сервер.Я просто вызываю код SparkLauncher с помощью внешнего API, который, в свою очередь, должен открывать JVM драйвера на кластере
SparkVersion: 1.6.0, scala ver: 2.10.5