无法通过 YARN 访问 SparkUI



我正在构建一个docker镜像,以便在本地针对带有YARN的生产Hadoop集群运行Zeppelin或Spark-shell。编辑:环境是macOS

我可以很好地执行作业或火花壳,但是当我尝试在 YARN 上访问跟踪URL时,作业正在运行,它会挂起 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.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)
    

一些想法或我可以在哪里查看正在发生的事情?

该问题与 docker 在 MacOS 上执行时如何管理 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 挂起

我">解决"了更改码头工人纱线配置

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

这允许 sparkUI 处理对 docker 容器发出的任何请求。

相关内容

  • 没有找到相关文章

最新更新