无法通过 YARN 访问 SparkUI
Can't access to SparkUI though YARN
我正在针对使用 YARN 的生产 Hadoop 集群在本地构建一个 docker 镜像到 运行 zeppelin 或 spark-shell。 编辑:环境是macOS
我可以很好地执行作业或 spark-shell 但是当我尝试在 YARN 上访问 Tracking URL 同时作业是 运行ning 它挂起 YARN-UI 整整 10 分钟。 YARN 仍在工作,如果我通过 ssh 连接,我可以执行 yarn 命令。
如果我不访问 SparkUI(直接或通过 YARN),什么也不会发生。作业已执行且 YARN-UI 未挂起。
更多信息:
本地,Docker:Spark 2.1.2,Hadoop 2.6.0-cdh5.4.3
生产:Spark 2.1.0,Hadoop 2.6.0-cdh5.4.3
如果我在本地执行它 (--master local[*]) 它会工作,我可以通过 4040 连接到 SparkUI。
Spark 配置:
spark.driver.bindAddress 172.17.0.2 #docker_eth0_ip
spark.driver.host 192.168.XXX.XXX #local_ip
spark.driver.port 5001
spark.ui.port 4040
spark.blockManager.port 5003
是的,ApplicationMaster 和节点可以看到我的本地 SparkUI 或驱动程序(telnet 测试)
正如我所说,我可以执行作业,然后 docker 公开端口并且它的绑定正在工作。一些日志证明了这一点:
INFO ApplicationMaster: Driver now available: 192.168.XXX.XXX:5001
INFO TransportClientFactory: Successfully created connection to /192.168.XXX.XXX:5001 after 65 ms (0 ms spent in bootstraps)
INFO ApplicationMaster$AMEndpoint: Add WebUI Filter. AddWebUIFilter(org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter,Map(PROXY_HOSTS -> jobtracker.hadoop, PROXY_URI_BASES -> http://jobtracker.hadoop:8088/proxy/application_000_000),/proxy/application_000_000)
一些想法或我可以在哪里查看正在发生的事情?
问题与在 MacOS 上执行时 docker 如何管理 IP 传入请求有关。
当位于 docker 容器内 运行 的 YARN 收到请求时,它看不到原始 IP,它看到内部代理 docker IP(在我的例子中是 172.17.0.1) .
当请求发送到我的本地容器 SparkUI 时,自动将请求重定向到 hadoop master(YARN 的工作方式),因为它发现请求不是来自 hadoop master,它只接受来自此来源的请求。
当 master 收到转发的请求时,它会尝试将其发送到 spark 驱动程序(我的本地 docker 容器),后者再次将请求转发给 hadoop master,因为它发现 IP 源不是 master,是代理IP。
它占用了为 UI 保留的所有线程。直到线程未被释放 YARN UI 被挂起
我“解决了”改变docker纱线配置
<property>
<name>yarn.web-proxy.address</name>
<value>172.17.0.1</value>
</property>
这允许 sparkUI 处理对 docker 容器发出的任何请求。
我正在针对使用 YARN 的生产 Hadoop 集群在本地构建一个 docker 镜像到 运行 zeppelin 或 spark-shell。 编辑:环境是macOS
我可以很好地执行作业或 spark-shell 但是当我尝试在 YARN 上访问 Tracking URL 同时作业是 运行ning 它挂起 YARN-UI 整整 10 分钟。 YARN 仍在工作,如果我通过 ssh 连接,我可以执行 yarn 命令。
如果我不访问 SparkUI(直接或通过 YARN),什么也不会发生。作业已执行且 YARN-UI 未挂起。
更多信息:
本地,Docker:Spark 2.1.2,Hadoop 2.6.0-cdh5.4.3
生产:Spark 2.1.0,Hadoop 2.6.0-cdh5.4.3
如果我在本地执行它 (--master local[*]) 它会工作,我可以通过 4040 连接到 SparkUI。
Spark 配置:
spark.driver.bindAddress 172.17.0.2 #docker_eth0_ip spark.driver.host 192.168.XXX.XXX #local_ip spark.driver.port 5001 spark.ui.port 4040 spark.blockManager.port 5003
是的,ApplicationMaster 和节点可以看到我的本地 SparkUI 或驱动程序(telnet 测试)
正如我所说,我可以执行作业,然后 docker 公开端口并且它的绑定正在工作。一些日志证明了这一点:
INFO ApplicationMaster: Driver now available: 192.168.XXX.XXX:5001 INFO TransportClientFactory: Successfully created connection to /192.168.XXX.XXX:5001 after 65 ms (0 ms spent in bootstraps) INFO ApplicationMaster$AMEndpoint: Add WebUI Filter. AddWebUIFilter(org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter,Map(PROXY_HOSTS -> jobtracker.hadoop, PROXY_URI_BASES -> http://jobtracker.hadoop:8088/proxy/application_000_000),/proxy/application_000_000)
一些想法或我可以在哪里查看正在发生的事情?
问题与在 MacOS 上执行时 docker 如何管理 IP 传入请求有关。
当位于 docker 容器内 运行 的 YARN 收到请求时,它看不到原始 IP,它看到内部代理 docker IP(在我的例子中是 172.17.0.1) .
当请求发送到我的本地容器 SparkUI 时,自动将请求重定向到 hadoop master(YARN 的工作方式),因为它发现请求不是来自 hadoop master,它只接受来自此来源的请求。
当 master 收到转发的请求时,它会尝试将其发送到 spark 驱动程序(我的本地 docker 容器),后者再次将请求转发给 hadoop master,因为它发现 IP 源不是 master,是代理IP。
它占用了为 UI 保留的所有线程。直到线程未被释放 YARN UI 被挂起
我“解决了”改变docker纱线配置
<property>
<name>yarn.web-proxy.address</name>
<value>172.17.0.1</value>
</property>
这允许 sparkUI 处理对 docker 容器发出的任何请求。