yarn client模式如何在远程master节点提交spark作业?
How to submit a spark job on a remote master node in yarn client mode?
我需要将 spark apps/jobs 提交到远程 spark 集群。我目前在我的机器上有 spark,主节点的 IP 地址是 yarn-client。顺便说一句,我的机器不在集群中。
我用这个命令提交我的工作
./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.call(Outbox.scala:187)
at org.apache.spark.rpc.netty.Outbox$$anon.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。
首先,如果您从应用程序代码中设置 conf.setMaster(...)
,它具有最高的优先级(高于 --master 参数)。如果你想在 yarn 客户端模式下 运行,请不要在应用程序代码中使用 MASTER_IP:7077。您应该通过以下方式向您的驱动程序提供 hadoop 客户端配置文件。
您应该设置环境变量HADOOP_CONF_DIR或YARN_CONF_DIR指向包含客户端配置的目录。
http://spark.apache.org/docs/latest/running-on-yarn.html
根据您在 spark 应用程序中使用的 hadoop 功能,一些配置文件将用于查找配置。如果您使用的是 hive(通过 spark-sql 中的 HiveContext),它将查找 hive-site.xml。 hdfs-site.xml 将用于从您的作业中查找 NameNode reading/writing 到 HDFS 的坐标。
我需要将 spark apps/jobs 提交到远程 spark 集群。我目前在我的机器上有 spark,主节点的 IP 地址是 yarn-client。顺便说一句,我的机器不在集群中。 我用这个命令提交我的工作
./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.call(Outbox.scala:187)
at org.apache.spark.rpc.netty.Outbox$$anon.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。
首先,如果您从应用程序代码中设置 conf.setMaster(...)
,它具有最高的优先级(高于 --master 参数)。如果你想在 yarn 客户端模式下 运行,请不要在应用程序代码中使用 MASTER_IP:7077。您应该通过以下方式向您的驱动程序提供 hadoop 客户端配置文件。
您应该设置环境变量HADOOP_CONF_DIR或YARN_CONF_DIR指向包含客户端配置的目录。
http://spark.apache.org/docs/latest/running-on-yarn.html
根据您在 spark 应用程序中使用的 hadoop 功能,一些配置文件将用于查找配置。如果您使用的是 hive(通过 spark-sql 中的 HiveContext),它将查找 hive-site.xml。 hdfs-site.xml 将用于从您的作业中查找 NameNode reading/writing 到 HDFS 的坐标。