Как получить идентификатор водителя при отправке искры

Информация о искровом кластере:

  • Искра версия: 2.2.0
  • Кластер содержит главный узел с 2 рабочими узлами.
  • Тип менеджера кластера: автономный

Я отправляю банку в искровой кластер от одного из рабочих, и я хочу получить идентификатор драйвера из отправки, чтобы я мог использовать этот идентификатор для последующей проверки состояния приложения. Проблема в том, что я не получаю никакого вывода в консоль. Я использую порт 6066 для отправки и устанавливаю режим развертывания на cluster.

Запустив

spark-submit --deploy-mode cluster --supervise --class "path/to/class" --master "spark://spark-master-headless:6066" path/to/app.jar

в файле журнала искры я могу увидеть ответ json на представленное ниже представление, и это именно то, что я хочу:

[INFO] 2018-07-18 12:48:40,030 org.apache.spark.deploy.rest.RestSubmissionClient logInfo - Submitting a request to launch an application in spark://spark-master-headless:6066.
 [INFO] 2018-07-18 12:48:41,074 org.apache.spark.deploy.rest.RestSubmissionClient logInfo - Submission successfully created as driver-20180718124840-0023. Polling submission state...
 [INFO] 2018-07-18 12:48:41,077 org.apache.spark.deploy.rest.RestSubmissionClient logInfo - Submitting a request for the status of submission driver-20180718124840-0023 in spark://spark-master-headless:6066.
 [INFO] 2018-07-18 12:48:41,092 org.apache.spark.deploy.rest.RestSubmissionClient logInfo - State of driver driver-20180718124840-0023 is now RUNNING.
 [INFO] 2018-07-18 12:48:41,093 org.apache.spark.deploy.rest.RestSubmissionClient logInfo - Driver is running on worker worker-20180707104934-<some-ip-was-here>-7078 at <some-ip-was-here>:7078.
 [INFO] 2018-07-18 12:48:41,114 org.apache.spark.deploy.rest.RestSubmissionClient logInfo - Server responded with CreateSubmissionResponse:
{
  "action" : "CreateSubmissionResponse",
  "message" : "Driver successfully submitted as driver-20180718124840-0023",
  "serverSparkVersion" : "2.2.0",
  "submissionId" : "driver-20180718124840-0023",
  "success" : true
}
 [INFO] 2018-07-18 12:48:46,572 org.apache.spark.executor.CoarseGrainedExecutorBackend initDaemon - Started daemon with process name: 31605@spark-worker-662224983-4qpfw
 [INFO] 2018-07-18 12:48:46,580 org.apache.spark.util.SignalUtils logInfo - Registered signal handler for TERM
 [INFO] 2018-07-18 12:48:46,583 org.apache.spark.util.SignalUtils logInfo - Registered signal handler for HUP
 [INFO] 2018-07-18 12:48:46,583 org.apache.spark.util.SignalUtils logInfo - Registered signal handler for INT
 [WARN] 2018-07-18 12:48:47,293 org.apache.hadoop.util.NativeCodeLoader <clinit> - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
 [INFO] 2018-07-18 12:48:47,607 org.apache.spark.SecurityManager logInfo - Changing view acls to: root
 [INFO] 2018-07-18 12:48:47,608 org.apache.spark.SecurityManager logInfo - Changing modify acls to: root
...

Но я хочу иметь эту информацию в консоли, чтобы я мог направить ее в отдельный файл, чем журналы искры. Я предполагаю, что некоторые сообщения должны быть напечатаны при запуске вышеуказанной команды. Я даже использовал режим --verbose в команде, так что, возможно, это поможет, но все равно вывод в консоли пустой. Единственное, что выводится на консоль, это Running Spark using the REST application submission protocol. в разделе вопросов этой страницы пользователь может видеть больше, чем это.

Я даже пытался изменить уровень Logger в коде своего приложения, но это тоже не помогло. (на основе некоторых идей из здесь)

Тогда возникает вопрос, почему я не получаю никакого вывода в консоль и что я могу сделать, чтобы получить информацию, которую я хочу вывести на консоль? P.S. Я разработал и настроил кластер и файл jar до хорошей суммы, так что, возможно, у меня есть что-то, из-за чего вывод не печатается. Какие возможные места я могу проверить, чтобы исправить это.

Обновлять:

Я узнал, что log4j.properties по умолчанию для spark был отредактирован. Вот содержание:

# Set everything to be logged to the console
log4j.rootCategory=INFO, RollingAppender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppender.File=/var/log/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

# Set the default spark-shell log level to WARN. When running the spark-shell, the
# log level for this class is used to overwrite the root logger's log level, so that
# the user can have different defaults for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=INFO

# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=INFO
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR

# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

Я предполагаю, что это не позволяет подробной команде работать. Как я могу изменить это, чтобы получить некоторый контент с помощью --verbose?


person Arsinux    schedule 18.07.2018    source источник


Ответы (1)


Поскольку вы выполняете задание в режиме кластера, драйвером может быть любой узел в кластере, поэтому, что бы вы ни делали, перенаправление печати/консоли может не возвращаться на клиентский/пограничный узел/рабочий узел, где открыта консоль.

Попробуйте отправить заявку в режиме клиента

person shiv    schedule 18.07.2018
comment
Это неправильно, потому что, если вы отправляете приложение через кластерный режим с портом 6066, узел-отправитель (может быть один из рабочих) получает ответ в ответ на запрос на отправку, который он запускает, даже если драйвер размещается на другом рабочем узле. См. здесь и здесь - person Arsinux; 19.07.2018