YARN

时间:2018-06-29 15:44:07

标签: apache-spark docker hadoop yarn spark-ui

我正在构建一个docker映像,以针对使用YARN的生产Hadoop集群在本地运行zeppelin或spark-shell。

我可以很好地执行执行作业或Spark Shell,但是当我尝试在YARN上的 Tracking URL 上访问时,作业正在运行时,它将YARN-UI挂起10分钟。纱线仍在工作,如果我通过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)
    

一些想法或我可以在哪里看到发生了什么事?

2 个答案:

答案 0 :(得分:0)

我想kubernetes容器的代理服务器使网络无限循环。

连接步骤:

  1. Docker容器(火花驱动程序)以Yarn-client模式执行到kubernetes代理服务器
  2. Kubernetes代理服务器连接到Hadoop集群,然后初始化Application Master
  3. AppMaster通过kubernetes代理服务器连接到Spark Driver
    • 通过spark.driver.port和spark.blockManager.port
  4. Spark驱动程序已初始化并执行Spark UI实例
  5. 如果我通过RM UI单击Spark Driver UI,则ResourceManager尝试通过kubernetes代理服务器连接SparkUI
  6. kubernetes代理服务器和Yarn RM UI卡住(可能会造成无限循环)

我不知道要解决此问题。如果您已解决,请分享:-)

答案 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容器的任何请求。