上下文
我想在使用 python 编写并在 HDInsight Spark集群(因此为Hortonworks风格)上运行的应用程序中配置自定义日志记录。 HDInsight群集类型:Linux上的Spark 2.2(HDI 3.6),Spark版本:2.2.0.2.6.3.2-13
我的要求如下:
重新搜索
我设法修改了log4j.properties
,创建了一个自定义日志附加程序,并使用了它的记录器将其写入文件,但是我无法使它聚合日志。
当我尝试使用standard ${spark.yarn.app.container.log.dir}/filename.log
时,它解析为/filename.log
并在permission denied
和使用{{1}中都返回了pyspark
错误},但文件spark-submit
出现在RM UI中(虽然为空)。
路径filename.log
通常应如下所示:spark.yarn.app.container.log.dir
,例如:/var/log/hadoop-yarn/container/<applicationId>/<containerId>
因此,我正在考虑的解决方案是使用/var/log/hadoop-yarn/container/application_1504924099862_7571/container_e16_1504924099862_7571_01_000005
或applicationId和containerId的值在应用程序内设置附加程序目标文件。
在两种情况下,我都不知道如何在python中执行此操作:spark.yarn.app.container.log.dir
看起来未设置(
spark.yarn.app.container.log.dir
不包含它),我也不知道在哪里寻找
containerId,而不是从sc._conf.getAll()
路径中提取它。
由于How do I get the YARN ContainerId from inside the container?,我设法在Scala中获得了spark.yarn.app.container.log.dir
,但是它返回了多个路径,所以我不确定它是否可用。
问题
spark.yarn.app.container.log.dir
是否可能与Scala和Python API的值不同?
我知道可以在Scala中使用spark.yarn.app.container.log.dir
来执行此操作,如何在pyspark中读取spark.yarn.app.container.log.dir
的值?
我可以使用不使用System.getProperty("spark.yarn.app.container.log.dir")
的自定义附加程序制作YARN聚合日志吗?