'список приложений yarn' не показывает никаких результатов

Я запустил несколько приложений Spark на кластере YARN. Приложение отображается на странице "Все приложения" в пользовательском интерфейсе YARN http://host:8088/cluster, но yarn application -list Команда не дает никаких результатов. Что может быть причиной этого?

2 ответа

Решение

Оказывается, я включил агрегирование журналов в YARN, но установил в yarn.nodemanager.remote-app-log-dir пользовательский каталог hdfs (/tmp/yarnlogs), поэтому журналы на самом деле агрегировались в / tmp / yarnlogs в HDFS, но команда yarn все еще искала журналы в расположении по умолчанию в HDFS (/tmp/logs). Поэтому изменение свойства на значение по умолчанию исправило его для меня.

ПРИМЕЧАНИЕ. Если каталог агрегации журналов настроен неправильно, это также вызывает ошибку при попытке доступа к истории заданий из веб-интерфейса, которая выглядит следующим образом:
Log aggregation has not completed or is not enabled

Когда вы используете опцию "-list" без опций "-appTypes" или "-appStates", она применяет фильтрацию по умолчанию для "типов приложения" и "состояний" (см. Выделенный раздел ниже). Если ни одно из ваших приложений не соответствует фильтрации по умолчанию, вы не получите никакого результата.

Общее количество заявок (типы приложений: [] и состояния: [ПРЕДСТАВЛЕНО, ПРИНЯТО, РАБОТАЕТ]): 0

Если вы видите справку для "-list", она гласит следующее:

Msgstr "Список приложений. Поддерживает необязательное использование -appTypes для фильтрации приложений по типу приложения и -appStates для фильтрации приложений по состоянию приложения ".

Это, кажется, немного вводит в заблуждение.

Если вы не укажете "-appStates", по умолчанию он принимает состояния "SUBMITTED", "ACCEPTED" и "RUNNING" для фильтрации. Пожалуйста, проверьте код ниже из "listApplications ()" метода "org.apache.hadoop.yarn.client.cli.ApplicationCLI.java".

private void listApplications()
{
    ............

    if (allAppStates) {
      for (YarnApplicationState appState : YarnApplicationState.values()) {
        appStates.add(appState);
      }
    } else {
      if (appStates.isEmpty()) {
        appStates.add(YarnApplicationState.RUNNING);
        appStates.add(YarnApplicationState.ACCEPTED);
        appStates.add(YarnApplicationState.SUBMITTED);
      }
    }

    ............
}

Согласно приведенному выше коду, применяется следующая логика:

  1. Вызвать "список приложений yarn": Показывает все приложения в состояниях "SUBMITTED", "ACCEPTED" и "RUNNING". Например, для меня вывод ниже (в стандартных состояниях нет приложений)

CMD> список приложений пряжи

Общее количество заявок (типы приложений: [] и состояния: [ПРЕДСТАВЛЕНО, ПРИНЯТО, РАБОТАЕТ]):0

  1. Вызов "yarn application -list -appStates ALL": показывает все приложения (в любом состоянии). Например, для меня вывод ниже (всего 268 приложений, также проверьте критерии фильтрации, примененные к "состояниям"):

CMD> приложение пряжи -list -appStates ALL

ВСЕ Общее количество приложений (типы приложений: [] и состояния: [NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED]):268

  1. Вызовите "yarn application -list -appStates FINISHED": показывает все приложения (в состоянии FINISHED). Например, для меня вывод ниже (есть 136 приложений в состоянии FINISHED):

CMD> приложение пряжи -list -appStates FINISHED

Общее количество заявок (типы приложений: [] и состояния: [ЗАВЕРШЕНО]):136

Другие вопросы по тегам