Не могу получить доступ к SparkUI через YARN - PullRequest
0 голосов
/ 29 июня 2018

Я создаю образ докера для локального запуска zeppelin или spark-shell против производственного кластера Hadoop с YARN.

Я могу хорошо выполнить задания или спарк-оболочку, но когда я пытаюсь получить доступ по URL-адрес отслеживания в YARN, в то время как задание выполняется, оно в течение 10 минут зависает в YARN-UI. YARN все еще работает, и если я подключаюсь через ssh, я могу выполнять команды yarn.

Если я не получаю доступ к SparkUI (напрямую или через YARN), ничего не происходит. Задания выполняются, а YARN-UI не зависает.

Подробнее :

  • Local, в 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 [*]), он работает, и я могу подключиться к SparkUI через 4040.
  • Конфигурация 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)
    

Некоторые идеи или где я могу посмотреть, что происходит?

1 Ответ

0 голосов
/ 18 марта 2019

Проблема была связана с тем, как docker управляет входящими IP-запросами, когда он выполняется в MacOS.

Когда YARN, работающий внутри Docker-контейнера, получает запрос, он не видит исходный IP-адрес, а видит внутренний IP-адрес докера-посредника (в моем случае 172.17.0.1).

Когда запрос отправляется в мой локальный контейнер SparkUI, он автоматически перенаправляет запрос мастеру hadoop (так работает YARN), поскольку он видит, что запрос не поступает от мастера hadoop, и принимает запросы только от этого источника.

Когда мастер получает перенаправленный запрос, он пытается отправить его в драйвер spark (мой локальный контейнер докера), который снова перенаправляет запрос мастеру hadoop, потому что он видит, что источник IP не является мастером, - это IP-адрес прокси.

Требуются все потоки, зарезервированные для интерфейса пользователя. До тех пор, пока не будут освобождены темы, пользовательский интерфейс YARN зависает

Я " решено " изменение конфигурации пряжи докера

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

Это позволяет sparkUI обрабатывать любые запросы, сделанные в Docker-контейнере.

...