Я застрял в одной проблеме, которую мне нужно быстро решить. Я прочитал много постов и учебных пособий о режиме развертывания искрового кластера, но не знаю, как этот подход застрял на несколько дней.
Мой вариант использования: - У меня есть много заданий spark, отправленных с помощью команды «spark2-submit», и мне нужно, чтобы идентификатор приложения печатался в консоли после их отправки. Задания запуска отправляются в режиме развертывания кластера. (В обычном режиме клиента он печатается)
Вопросы, которые необходимо учитывать при создании решения: - Я не должен менять код (так как это займет много времени, потому что запущено много приложений), я могу предоставить только свойства log4j или некоторую пользовательскую кодировку.
Мой подход: -
1) Я попытался изменить уровни log4j и различные параметры log4j, но запись в журнал все еще идет в централизованный каталог журналов.
часть из моего log4j.properties:-
log4j.logger.org.apache.spark.scheduler.cluster.YarnClusterSchedulerBackend=ALL,console
log4j.appender.org.apache.spark.scheduler.cluster.YarnClusterSchedulerBackend.Target=System.out
log4j.logger.org.apache.spark.deploy.SparkSubmit=ALL
log4j.appender.org.apache.spark.deploy.SparkSubmit=console
log4j.logger.org.apache.spark.deploy.SparkSubmit=TRACE,console
log4j.additivity.org.apache.spark.deploy.SparkSubmit=false
log4j.logger.org.apache.spark.deploy.yarn.Client=ALL
log4j.appender.org.apache.spark.deploy.yarn.Client=console
log4j.logger.org.apache.spark.SparkContext=WARN
log4j.logger.org.apache.spark.scheduler.DAGScheduler=INFO,console
log4j.logger.org.apache.hadoop.ipc.Client=ALL
2) Я также попытался добавить пользовательский прослушиватель и смог получить идентификатор приложения spark после завершения приложений, но не на консоли.
Кодовая логика: -
public void onApplicationEnd(SparkListenerApplicationEnd arg0)
{
for (Thread t : Thread.getAllStackTraces().keySet())
{
if (t.getName().equals("main"))
{
System.out.println("The current state : "+t.getState());
Configuration config = new Configuration();
ApplicationId appId = ConverterUtils.toApplicationId(getjobUId);
// some logic to write to communicate with the main thread to print the app id to console.
}
}
}
3) Я включил spark.eventLog в значение true и указал каталог в HDFS для записи журналов событий из команды spark-submit.
Если бы кто-нибудь мог помочь мне найти подход к решению, это было бы очень полезно. Или, если я делаю что-то очень неправильное, мне могут помочь любые идеи.
Спасибо.