无法访问sparkui

ss2ws0br  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(763)

我正在构建一个docker映像,以在本地运行zeppelin或spark shell,与一个生产hadoop集群进行比较。编辑:当时的环境是macos
我可以很好地执行作业或sparkshell,但当我尝试访问yarn上的跟踪url时,作业正在运行,它会挂起yarn ui整整10分钟。Yarn仍然工作,如果我通过ssh连接,我可以执行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)

一些想法或者我可以去哪里看看发生了什么?

wz3gfoph

wz3gfoph1#

这个问题与docker在macos上执行时如何管理ip传入请求有关。
当运行在docker容器中的yarn收到一个请求时,它没有看到原始ip,而是看到内部代理docker ip(在我的例子中是172.17.0.1)。
当一个请求被发送到我的本地容器sparkui时,会自动将请求重定向到hadoop master(这是yarn的工作方式),因为它看到请求不是来自hadoop master,它只接受来自这个源的请求。
当主机接收到转发的请求时,它尝试将其发送到spark驱动程序(我的本地docker容器),spark驱动程序再次将请求转发到hadoop主机,因为它看到的ip源不是主机,而是代理ip。
它占用为ui保留的所有线程。直到线程没有被释放Yarnui是挂起
我“解决”了改变dockerYarn配置的问题

<property>
  <name>yarn.web-proxy.address</name>
  <value>172.17.0.1</value> 
</property>

这允许sparkui处理对docker容器的任何请求。

相关问题