'список приложений 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);
}
}
............
}
Согласно приведенному выше коду, применяется следующая логика:
- Вызвать "список приложений yarn": Показывает все приложения в состояниях "SUBMITTED", "ACCEPTED" и "RUNNING". Например, для меня вывод ниже (в стандартных состояниях нет приложений)
CMD> список приложений пряжи
Общее количество заявок (типы приложений: [] и состояния: [ПРЕДСТАВЛЕНО, ПРИНЯТО, РАБОТАЕТ]):0
- Вызов "yarn application -list -appStates ALL": показывает все приложения (в любом состоянии). Например, для меня вывод ниже (всего 268 приложений, также проверьте критерии фильтрации, примененные к "состояниям"):
CMD> приложение пряжи -list -appStates ALL
ВСЕ Общее количество приложений (типы приложений: [] и состояния: [NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED]):268
- Вызовите "yarn application -list -appStates FINISHED": показывает все приложения (в состоянии FINISHED). Например, для меня вывод ниже (есть 136 приложений в состоянии FINISHED):
CMD> приложение пряжи -list -appStates FINISHED
Общее количество заявок (типы приложений: [] и состояния: [ЗАВЕРШЕНО]):136