Как отправить искровое задание на удаленный главный узел в режиме клиента пряжи?
Мне нужно отправить искровые приложения / задания на удаленный искровой кластер. В настоящее время у меня на моей машине есть искра и IP-адрес главного узла в качестве клиента пряжи. Кстати моя машина не в кластере. Я отправляю свою работу с этой командой
./spark-submit --class SparkTest --deploy-mode client /home/vm/app.jar
У меня есть адрес моего мастера, запрограммированный в моем приложении в форме
val spark_master = spark://IP:7077
И все же все, что я получаю, это ошибка
16/06/06 03:04:34 INFO AppClient$ClientEndpoint: Connecting to master spark://IP:7077...
16/06/06 03:04:34 WARN AppClient$ClientEndpoint: Failed to connect to master IP:7077
java.io.IOException: Failed to connect to /IP:7077
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:216)
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:167)
at org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:200)
at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:187)
at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:183)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: /IP:7077
Или вместо этого, если я использую
./spark-submit --class SparkTest --master yarn --deploy-mode client /home/vm/test.jar
я получил
Exception in thread "main" java.lang.Exception: When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment.
at org.apache.spark.deploy.SparkSubmitArguments.validateSubmitArguments(SparkSubmitArguments.scala:251)
at org.apache.spark.deploy.SparkSubmitArguments.validateArguments(SparkSubmitArguments.scala:228)
at org.apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArguments.scala:109)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:114)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Мне действительно нужно, чтобы на моей рабочей станции был настроен hadoop? Вся работа будет выполняться удаленно, и эта машина не является частью кластера. Я использую Spark 1.6.1.
1 ответ
Прежде всего, если вы устанавливаете conf.setMaster(...)
из кода вашего приложения он имеет наивысший приоритет (над аргументом --master). Если вы хотите работать в режиме клиента пряжи, не используйте MASTER_IP:7077 в коде приложения. Вы должны предоставить файлы конфигурации клиента hadoop вашему драйверу следующим образом.
Вы должны установить переменную окружения HADOOP_CONF_DIR или YARN_CONF_DIR, чтобы указывать на каталог, который содержит конфигурации клиента.
http://spark.apache.org/docs/latest/running-on-yarn.html
В зависимости от того, какие функции hadoop вы используете в своем приложении spark, некоторые файлы конфигурации будут использоваться для поиска конфигурации. Если вы используете hive (через HiveContext в spark-sql), он будет искать hive-site.xml. hdfs-site.xml будет использоваться для поиска координат чтения / записи NameNode в HDFS из вашей работы.