Parquet 警告在 Amazon EMR 上的 Hive MapReduce 中填满日志

Parquet Warning Filling up Logs in Hive MapReduce on Amazon EMR

我正在 运行在 Tez 上的 Hive 上存储为镶木地板的 table 上自定义 UDAF。我们的 Hive 作业在 YARN 上 运行,全部在 Amazon EMR 中设置。但是,由于我们拥有的镶木地板数据是使用旧版本的镶木地板 (1.5) 生成的,我收到一条警告,该警告正在填满 YARN 日志并导致磁盘 运行 超出 space 在作业完成之前。

这是警告:

PM WARNING: org.apache.parquet.CorruptStatistics: Ignoring statistics because created_by could not be parsed (see PARQUET-251): parquet-mr version

它还会打印堆栈轨迹。我一直试图使警告日志静音,但无济于事。除了这个警告,我已经设法关闭了几乎所有类型的日志。我已尝试使用 AWS 配置修改几乎每个 Log4j 设置文件,如 here 所述。

到目前为止我尝试过的事情:

  1. 我在 tez-site.xml 中设置了以下设置(以 JSON 格式编写它们,因为这是 AWS 配置所需的) 在实际实例中当然是正确的 XML 格式。

    "tez.am.log.level": "OFF",
    "tez.task.log.level": "OFF",
    "tez.am.launch.cluster-default.cmd-opts": "-Dhadoop.metrics.log.level=OFF -Dtez.root.logger=OFF,CLA",
    "tez.task-specific.log.level": "OFF;org.apache.parquet=OFF"
    
  2. 我在 mapred-site.xml 上有以下设置。这些设置有效地关闭了我的 YARN 日志中发生的所有日志记录,但有问题的警告除外。

      "mapreduce.map.log.level": "OFF",
      "mapreduce.reduce.log.level": "OFF",
      "yarn.app.mapreduce.am.log.level": "OFF"
    
  3. 我几乎在所有其他 log4j.properties 文件中都有这些设置。我在之前的 AWS link 中显示的列表中找到.

      "log4j.logger.org.apache.parquet.CorruptStatistics": "OFF",
      "log4j.logger.org.apache.parquet": "OFF",
      "log4j.rootLogger": "OFF, console"
    

老实说,此时此刻,我只想找到一些方法来关闭日志并以某种方式获得工作 运行ning。我读过类似的问题,例如 link 他们通过更改 log4j 设置修复了它,但那是针对 Spark 的,它似乎不适用于 Hive/Tez 和亚马逊。任何帮助表示赞赏。

好的,所以我最终通过修改 EMR 中每个单个数据节点和主节点的 java logging.properties 文件来解决这个问题。在我的例子中,文件位于 /etc/alternatives/jre/lib/logging.properties

我在 bootstrap 操作文件中添加了一个 shell 命令,以自动将以下两行添加到属性文件的末尾:

org.apache.parquet.level=SEVERE

org.apache.parquet.CorruptStatistics.level = SEVERE

只是想更新一下,以防其他人遇到同样的问题,因为亚马逊确实没有正确设置它,需要大量的反复试验。