小编Dee*_*Ram的帖子

集群部署模式下的 Spark-Submit 将应用程序 ID 获取到控制台

我陷入了一个需要快速解决的问题。我已经阅读了许多关于 Spark 集群部署模式的帖子和教程,但我对这种方法一无所知,因为我被困了几天。

我的用例:- 我有很多使用“spark2-submit”命令提交的 Spark 作业,提交后我需要在控制台中打印应用程序 ID。Spark作业采用集群部署模式提交。(在正常客户端模式下,它被打印)

创建解决方案时我需要考虑的要点:- 我不应该更改代码(因为这会花费很长时间,因为有许多应用程序正在运行),我只能提供 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
Run Code Online (Sandbox Code Playgroud)

2)我还尝试添加自定义侦听器,并且我能够在应用程序完成后获取 Spark 应用程序 ID,但不能获取控制台。

代码逻辑:-

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.
            } …
Run Code Online (Sandbox Code Playgroud)

logging log4j log4j2 apache-spark apache-spark-2.0

3
推荐指数
1
解决办法
4878
查看次数

标签 统计

apache-spark ×1

apache-spark-2.0 ×1

log4j ×1

log4j2 ×1

logging ×1