如何在HDInsight上的Spark中聚合自定义应用程序日志?

时间:2018-08-10 14:34:21

标签: apache-spark pyspark log4j yarn hdinsight

上下文

我想在使用 python 编写并在 HDInsight Spark集群(因此为Hortonworks风格)上运行的应用程序中配置自定义日志记录。 HDInsight群集类型:Linux上的Spark 2.2(HDI 3.6),Spark版本:2.2.0.2.6.3.2-13

我的要求如下:

  • 登录文件
  • 通过YARN聚合日志,以便可以从ResourceManager UI进行访问

重新搜索

我设法修改了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,但是它返回了多个路径,所以我不确定它是否可用。

问题

  1. spark.yarn.app.container.log.dir是否可能与Scala和Python API的值不同?

  2. 我知道可以在Scala中使用spark.yarn.app.container.log.dir来执行此操作,如何在pyspark中读取spark.yarn.app.container.log.dir的值?

  3. 我可以使用不使用System.getProperty("spark.yarn.app.container.log.dir")的自定义附加程序制作YARN聚合日志吗?

0 个答案:

没有答案