我正在构建一个docker映像,以针对使用YARN的生产Hadoop集群在本地运行zeppelin或spark-shell。
我可以很好地执行执行作业或Spark Shell,但是当我尝试在YARN上的 Tracking URL 上访问时,作业正在运行时,它将YARN-UI挂起10分钟。纱线仍在工作,如果我通过ssh连接,我可以执行yarn命令。
如果我无法访问SparkUI(直接或通过YARN),则不会发生任何事情。作业已执行且YARN-UI未挂起。
更多信息:
火花配置:
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)
一些想法或我可以在哪里看到发生了什么事?
答案 0 :(得分:0)
我想kubernetes容器的代理服务器使网络无限循环。
连接步骤:
我不知道要解决此问题。如果您已解决,请分享:-)
答案 1 :(得分:0)
问题与Docker在MacOS上执行时如何管理IP传入请求有关。
当在docker容器中运行的YARN收到请求时没有看到原始IP,它将看到内部代理docker IP(在我的情况下为172.17.0.1)。
将请求发送到我的本地容器SparkUI时,会自动将请求重定向到hadoop主服务器(这是YARN的工作方式),因为它看到请求不是来自hadoop主服务器,并且仅接受来自此源的请求。
当主服务器接收到转发的请求时,它将尝试将其发送到Spark驱动程序(我的本地docker容器),该驱动程序将请求再次转发给hadoop主服务器,因为它看到IP源不是主服务器,而是代理IP。
它占用为UI保留的所有线程。在未释放线程之前,YARN UI被挂起
我“ 已解决”正在更改docker yarn配置
<property>
<name>yarn.web-proxy.address</name>
<value>172.17.0.1</value>
</property>
这允许sparkUI处理对docker容器的任何请求。