我通过以下步骤在远程服务器上以独立模式启动Spark:
cp spark-env.sh.template spark-env.sh
spark-env.sh
SPARK_MASTER_HOST=IP_OF_MY_REMOTE_SERVER
sbin/start-master.sh
sbin/start-slave.sh spark://IP_OF_MY_REMOTE_SERVER:7077
我尝试连接到远程主人:
val spark = SparkSession.builder()
.appName("SparkSample")
.master("spark://IP_OF_MY_REMOTE_SERVER:7077")
.getOrCreate()
我收到以下错误:
ERROR SparkContext: Error initializing SparkContext.
java.net.BindException: Cannot assign requested address: Service 'sparkDriver' failed after 16 retries!
和警告:
WARN Utils: Service 'sparkMaster' could not bind on port 7077. Attempting port 7078.
.....
WARN Utils: Service 'sparkMaster' could not bind on port 7092. Attempting port 7092.
答案 0 :(得分:4)
我建议不要使用端口打开策略远程提交火花作业,因为它可能会产生安全问题,而且根据我的经验,比实际情况更麻烦,特别是由于必须对通信层进行故障排除。
备选方案:
1)Livy - 现在是一个Apache项目! http://livy.io或http://livy.incubator.apache.org/
2)Spark Job服务器 - https://github.com/spark-jobserver/spark-jobserver
类似的问与答:Submitting jobs to Spark EC2 cluster remotely
如果您坚持连接没有像Livy这样的库,那么打开端口以确保需要通信。 Spark网络通讯文档:http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security
由于您没有使用YARN(根据您的独立设计),YARN远程提交的先前链接可能不相关。
答案 1 :(得分:1)
Spark文档说
spark.driver.port
(random) Port for the driver to listen on. This is used for communicating with the executors and the standalone Master.
spark.port.maxRetries
16 Maximum number of retries when binding to a port before giving up. When a port is given a specific value (non 0), each subsequent retry will increment the port used in the previous attempt by 1 before retrying. This essentially allows it to try a range of ports from the start port specified to port + maxRetries.
您需要确保Spark Master在端口7077上的远程主机上运行。 防火墙也必须允许连接它。
和
此外,您需要将core-site.xml文件从群集复制到HADOOP_CONF_DIR,以便Spark服务可以读取hadoop设置,例如主服务器的IP地址。请阅读here了解更多信息..
希望它有所帮助!
答案 2 :(得分:1)
spark-jobserver似乎非常诱人但有一些问题。 我推荐“隐藏”的火花REST api! 它没有记录,但它非常简单,更舒适, 与需要维护的jobserver不同(另一件事你需要担心并排除故障 - 并且它有问题) 你也有很棒的图书馆 - https://github.com/ywilkof/spark-jobs-rest-client