![](/img/trans.png)
[英]To get application id in particular file after spark-submit in cluster deploy mode
[英]spark-submit in cluster deploy mode get application id to console
我陷入了一个需要快速解决的问题。 我已经阅读了很多关于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
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.
}
}
}
3)我已将spark.eventLog启用为true并在HDFS中指定了一个目录,以便从spark-submit命令中写入事件日志。
如果有人能帮助我找到解决方案的方法,那将非常有帮助。 或者,如果我做错了什么,任何见解都会对我有所帮助。
谢谢。
在被困在同一个地方几天之后,我终于能够解决我的问题。
在完成集群部署模式和一些博客的Spark代码之后,很少有事情变得清晰。 它可能会帮助其他人寻求获得相同的结果。
在集群部署模式下,作业通过客户端线程从用户提交的计算机提交。 实际上我正在将log4j配置传递给驱动程序和执行程序,但错过了日志4j配置为“客户端”的部分。
所以我们需要使用: -
SPARK_SUBMIT_OPTS =“ - Dlog4j.debug = true -Dlog4j.configuration = <location>
/log4j.properties”spark-submit <rest of the parameters>
澄清:
client mode
意味着Spark驱动程序在您运行spark提交的同一台机器上运行 cluster mode
意味着Spark驱动程序正在某个集群上运行 您提到在客户端模式下运行应用程序时会记录它,您可以在控制台中看到它。 当您在群集模式下运行时,您的输出也会被记录,因为它在另一台计算机上运行,您无法看到它 。
一些想法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.