我们正在使用Spark 2.0.2和Hadoop 3.2.1。我已经在整个Hadoop上配置了SSL,而没有任何麻烦。但是Spark遇到了一些麻烦。
没有SSL,我可以启动作业并查看通过Yarn代理的Spark UI。
启用SSL后,我仍然可以启动作业并运行完成,但是无法访问Spark Web UI。纱线链接到ApplicationMaster代理,该代理失败,并显示java.net.ConnectException: Connection refused (Connection refused)
深入研究作业的标准输出,我看到这样的行:
2020-04-14 16:21:57,258 INFO server.ServerConnector: Started ServerConnector@1484944f{HTTP/1.1}{0.0.0.0:40809}
2020-04-14 16:21:57,303 INFO server.ServerConnector: Started ServerConnector@799e8b3a{SSL-HTTP/1.1}{0.0.0.0:36015}
2020-04-14 16:21:57,303 INFO server.Server: Started @5614ms
2020-04-14 16:21:57,304 INFO util.Utils: Successfully started service 'SparkUI' on port 40809.
2020-04-14 16:21:57,309 INFO ui.SparkUI: Bound SparkUI to 0.0.0.0, and started at https://10.10.75.40:40809
如果调用https://10.10.75.40:40809
,则会收到错误消息,它不是SSL。
如果我呼叫http://10.10.75.40:40809
,则会收到伪造的重定向到端口10.10.75.40:0。
[如果我调用https://10.10.75.40:36015
并忽略证书错误,或者如果我通过正确的主机名进行调用,则会重定向到RM的:8090/proxy/redirect
,这再次引发500错误。
我的配置包括:
spark.ssl.enabled true
spark.ssl.keyStore /etc/sslmate/STAR.mtv.qxxxxxxxxd.com.jks
spark.ssl.keyStorePassword _the password_
spark.ssl.trustStore /etc/sslmate/STAR.mtv.qxxxxxxxxd.com.jks
spark.ssl.trustStorePassword _the password_
spark.ssl.protocol TLSv1.2
我也尝试过尝试显式设置端口,但无济于事:
spark.ssl.ui.port 4440
spark.ssl.history.port 18480
spark.ui.driver.port 2020
spark.ssl.ui.driver.port 2420
我找不到通过Apache记录的文档,但是我发现a note from MapR使我工作了:
在YARN上运行Spark时不需要Spark UI SSL,因为YARN协议提供了加密。要禁用Spark SSL,请在每个spark节点的
spark.ssl.ui.enabled false
文件中添加spark-defaults.conf
。
以这种方式配置时,ResourceManager通过:8090/proxy/redirect
类型URL正确提供Spark UI。在stderr
中,我看到这些行的输出:
2020-04-14 17:36:38,098 INFO server.ServerConnector: Started ServerConnector@7ef020c8{HTTP/1.1}{0.0.0.0:45951}
2020-04-14 17:36:38,098 INFO server.Server: Started @7871ms
2020-04-14 17:36:38,107 INFO util.Utils: Successfully started service 'SparkUI' on port 45951.
2020-04-14 17:36:38,113 INFO ui.SparkUI: Bound SparkUI to 0.0.0.0, and started at http://10.10.31.230:45951