Я запускаю искровое задание в кластере google, и я пытаюсь получить некоторую информацию о регистрации во время процесса карты RDD. Быстрый пример:Получение выходных данных из искровых работников в облаке Google
object LoggerWrapper extends Serializable{
@transient lazy val logger=Logger.getLogger("myLogger")
}
object Processing{
...
rdd.map(x=>{
LoggerWrapper.logger.info("processing:"+x)
foo(x)
})
...
sparkContext.stop
}
Я следую методике описанной here в сочетании с направлениями нашли in the Spark webpage. Результат log4j.properties - тот, который показан в конце. Файл загружается с использованием флага --files
команды gcloud
(показано ниже). Я также обновил файл yarn-site.xml, так что для свойства yarn.log-aggregation-enable
установлено значение true
.
Мой первый вопрос заключается в том, что когда я бегу от главного узла yarn logs -application <applicationID>
, я всегда получаю сообщение об ошибке «Агрегирование журнала не завершено или не включено». Есть ли что-то еще, что необходимо сделать для сбора сообщений.
Второй вопрос заключается в том, можно ли получать сообщения журнала всех работников на выходе консоли в процессе выполнения. Например, если искровое задание является потоковым заданием, тогда я хотел бы получить сообщения во время работы.
log4j.properties:
log4j.appender.myConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.myConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.myConsoleAppender.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppender.File=${spark.yarn.app.container.log.dir}/spark.log
log4j.appender.RollingAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingAppender.layout.ConversionPattern=[%p] %d %c %M - %m%n
log4j.appender.RollingAppenderU=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppenderU.File=${spark.yarn.app.container.log.dir}/sparkU.log
log4j.appender.RollingAppenderU.DatePattern='.'yyyy-MM-dd
log4j.appender.RollingAppenderU.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingAppenderU.layout.ConversionPattern=[%p] %d %c %M - %m%n
# By default, everything goes to console and file
log4j.rootLogger=INFO, RollingAppender, myConsoleAppender
# My custom logging goes to another file
log4j.logger.myLogger=INFO, RollingAppenderU, myConsoleAppender
# The noisier spark logs go to file only
log4j.logger.spark.storage=INFO, RollingAppender
log4j.additivity.spark.storage=false
log4j.logger.spark.scheduler=INFO, RollingAppender
log4j.additivity.spark.scheduler=false
log4j.logger.spark.CacheTracker=INFO, RollingAppender
log4j.additivity.spark.CacheTracker=false
log4j.logger.spark.CacheTrackerActor=INFO, RollingAppender
log4j.additivity.spark.CacheTrackerActor=false
log4j.logger.spark.MapOutputTrackerActor=INFO, RollingAppender
log4j.additivity.spark.MapOutputTrackerActor=false
log4j.logger.spark.MapOutputTracker=INFO, RollingAppender
log4j.additivty.spark.MapOutputTracker=false
команда gcloud: gcloud dataproc jobs submit spark --cluster myCluster --properties spark.driver.memory=1000m,spark.driver.maxResult=512m,spark.executor.memory=1000m --jars gs://path/to/jar/myJar.jar --files /absolute/path/to/local/file/log4j.properties --class contextual.wikidata.spark.jobs.$1 <application-arguments>
Большое спасибо за ответ! Возможно ли читать пользовательские журналы в потоковом задании, пока потоковая обработка все еще работает? – orestis
На данный момент лучший способ сделать это, возможно, через [YARN UI] (https://cloud.google.com/dataproc/concepts/cluster-web-interfaces) и перейти к журналам контейнеров напрямую, нажав запустить приложение и найти ссылки на журналы контейнеров в левой части. Планируется дальнейшее совершенствование интеграции Stackdriver Dataproc в будущем, когда журналы контейнеров будут доступны через пользовательский интерфейс Cloud Logging, но пока нет конкретной даты. –