无法访问位于 Docker 容器内的 Spark Web UI

问题描述 投票:0回答:3

我有一个远程虚拟机,我正在开发一个在 Docker 容器内运行的 Spark 应用程序。

2018-12-16 13:07:10 INFO  main [AbstractConnector] - Started ServerConnector@79c3f01f{HTTP/1.1,[http/1.1]}{0.0.0.0:4040}
2018-12-16 13:07:10 INFO  main [Utils] - Successfully started service 'SparkUI' on port 4040.
...
2018-12-16 13:07:10 INFO  main [SparkUI] - Bound SparkUI to 0.0.0.0, and started at http://f58300e7e6ea:4040

日志显示它正确启动了 SparkUI,但绑定到了容器的本地主机。此时,我决定在构建阶段使用

EXPOSE
端口 4040,并在
run
期间发布它,并通过
-p 4040:4040/tcp
绑定两个端口。

当我尝试从本地计算机(在 Firefox 中)访问

<remote host name>:4040
时,我无法连接到 SparkUI。我也尝试过远程登录,但没有成功。

当我启动容器时,我可以使用

netstat
看到 4040 端口正在监听,但也许无法从远程访问它。我怎样才能做到这一点?

基本上我想使用浏览器从我的家用电脑 --> 远程虚拟机 --> (带有 Spark UI 的 Docker 容器)访问 SparkUI。

远程虚拟机运行 RHEL 7。

docker apache-spark centos7 rhel7
3个回答
5
投票

以下命令对我的 pyspark 有用

docker run -p 4040:4040 --hostname localhost -it apache/spark-py /opt/spark/bin/pyspark

3
投票

在你的日志中,它说 Spark UI 是在

started at http://f58300e7e6ea:4040
处启动的,这里
f58300e7e6ea
是 docker 内部网络主机名。

所以你要做的就是跟随,

在部署之前首先在您的应用程序中设置以下两个配置

  1. spark.driver.bindAddress
    作为您选择的任何字符串的主机名
  2. spark.driver.host
    作为您的远程虚拟机 IP 地址。

其次,当您使用映像部署 docker 容器时,请使用

--hostname
标志向容器引入主机名并使用之前选择的字符串。例如
docker run --hostname myHostName --ip 10.1.2.3 ubuntu:16.04


0
投票

从主机终端运行此命令,在运行 Docker Desktop 4.37.2 的 M1 Pro Mac arm64 上为我工作 使用胶水图像 ->glue/aws-glue-libs:glue_libs_4.0.0_image_01

$ docker run -it -v ~/.aws:/home/glue_user/.aws -v /Users/x/Library/notebooks:/home/glue_user/workspace/jupyter_workspace/ --rm -p 4040:4040 -p 18080:18080 -p 8998:8998 -p 8888:8888  -e AWS_PROFILE=default -e DISABLE_SSL="true" --name glue_pyspark --mount type=bind,src=/Users/x/Library/dockerdir,dst=/mnt/external public.ecr.aws/glue/aws-glue-libs:glue_libs_4.0.0_image_01 /home/glue_user/jupyter/jupyter_start.sh

完成此步骤后,我可以在我的主机 Chrome 浏览器上访问以下所有网址 -

http://localhost:4040 上的 Spark UI

历史记录服务器位于 http://localhost:18080

Livy 服务器位于 http://localhost:8998

Jupyter 实验室 http://localhost:8888

© www.soinside.com 2019 - 2024. All rights reserved.