Я пишу сценарий оболочки, который выполняет команду куста, записывает журнал и выводит информацию в два отдельных файла:
hive -S -f pdr_extrator.sql 2> pdr_extrator_log.txt | sed 's / [\ t] / | / g' 1> pdr_extrator_out.txt
Файл журнала в конце выполнения выглядит следующим образом :
log4j: WARN Нет такого свойства [maxBackupIndex] в орг. apache .log4j.DailyRollingFileAppender. log4j: WARN Нет такого свойства [maxFileSize] в org. apache .log4j.DailyRollingFileAppender. SLF4J: путь к классу содержит несколько привязок SLF4J. SLF4J: Обнаружена привязка в [jar: file: /usr/hdp/2.2.6.0-2800/hadoop/lib/slf4j-log4j12-1.7.5.jar! /Org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Обнаружена привязка в [jar: file: /usr/hdp/2.2.6.0-2800/hive/lib/hive-jdbc-0.14.0.2.2.6.0 -2800-standalone.jar! / Org / slf4j / impl / StaticLoggerBinder.class] SLF4J: См. http://www.slf4j.org/codes.html#multiple_bindings для объяснения. SLF4J: фактическая привязка имеет тип [org.slf4j.impl.Log4jLoggerFactory]
Когда я запускаю из командной строки, можно получить applicationID моего указанного c запроса, как показано ниже:
ApplicationID - командная строка Hive
Интересно, есть ли способ получить applicationID через журнал?
Сегодня я использую команда yarn application -list -appTypes TEZ
и отслеживание процесса, который появляется в начале моего запроса, чтобы позже использовать команду yarn application -status application_XXXXX
для контроля только моего выполнения.
Проблема в том, что этот метод имеет недостатки, так как другой процесс может например, войдите в очередь в то же время.
Ваша помощь приветствуется.