【问题标题】:How to suppress parquet log messages in Spark?如何抑制 Spark 中的镶木地板日志消息?
【发布时间】:2015-07-15 04:22:22
【问题描述】:

如何阻止此类消息出现在我的 spark-shell 控制台上。

5 May, 2015 5:14:30 PM INFO: parquet.hadoop.InternalParquetRecordReader: at row 0. reading next block
5 May, 2015 5:14:30 PM INFO: parquet.hadoop.InternalParquetRecordReader: RecordReader initialized will read a total of 89213 records.
5 May, 2015 5:14:30 PM INFO: parquet.hadoop.InternalParquetRecordReader: block read in memory in 2 ms. row count = 120141
5 May, 2015 5:14:30 PM INFO: parquet.hadoop.InternalParquetRecordReader: at row 0. reading next block
5 May, 2015 5:14:30 PM INFO: parquet.hadoop.InternalParquetRecordReader: block read in memory in 2 ms. row count = 89213
5 May, 2015 5:14:30 PM WARNING: parquet.hadoop.ParquetRecordReader: Can not initialize counter due to context is not a instance of TaskInputOutp
[Stage 12:=================================================>    (184 + 4) / 200]

谢谢

【问题讨论】:

  • 您的意思是所有来自 parquet 的消息还是仅来自 INFO 的消息(这似乎是大多数)?
  • @Panto 除错误外的所有内容。
  • 你能改变conf/log4j.properties中的日志级别看看发生了什么吗?
  • @YijieShen 我仍然收到消息。好像不是从那里控制的。
  • 我会自己试一试,成功后通知您。

标签: logging apache-spark parquet


【解决方案1】:

SPARK-8118 issue comment 的解决方案似乎有效:

您可以通过创建包含以下内容的属性文件来禁用聊天输出:

org.apache.parquet.handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=SEVERE

然后在应用程序运行时将文件的路径传递给Spark 提交。假设文件位于 /tmp/parquet.logging.properties (当然,这需要在所有工作节点上都可用):

spark-submit \
     --conf spark.driver.extraJavaOptions="-Djava.util.logging.config.file=/tmp/parquet.logging.properties" \`
      --conf spark.executor.extraJavaOptions="-Djava.util.logging.config.file=/tmp/parquet.logging.properties" \
      ... 

学分转到Justin Bailey

【讨论】:

  • 在我将行 org.apache.parquet.hadoop.handlers=java.util.logging.ConsoleHandler 添加到属性文件后,这对我有用。
【解决方案2】:

我相信这已经倒退了——他们正在对镶木地板集成进行一些大的合并/更改...https://issues.apache.org/jira/browse/SPARK-4412

【讨论】:

  • 感谢您重新提出问题。
【解决方案3】:

这适用于 Spark 2.0。编辑文件 spark/log4j.properties 并添加:

log4j.logger.org.apache.spark.sql.execution.datasources.parquet=ERROR
log4j.logger.org.apache.spark.sql.execution.datasources.FileScanRDD=ERROR
log4j.logger.org.apache.hadoop.io.compress.CodecPool=ERROR

FileScanRDD 和 CodecPool 的行将有助于处理一些非常冗长的日志。

【讨论】:

    【解决方案4】:

    我知道这个问题是 WRT Spark,但我最近在 CDH 5.x 中使用 Parquet 和 Hive 时遇到了这个问题,并找到了解决方法。详情在这里:https://issues.apache.org/jira/browse/SPARK-4412?focusedCommentId=16118403

    我对 JIRA 票证的评论内容如下:

    这也是CDH发行的parquet版本的问题 5.x。在这种情况下,我使用的是parquet-1.5.0-cdh5.8.4(来源:http://archive.cloudera.com/cdh5/cdh/5

    但是,我找到了一种解决方法,用于通过以下方式提交的 mapreduce 作业 蜂巢。我确信这也适用于 Spark。

    • 将以下属性添加到您的作业配置中(在我的情况下,我将它们添加到hive-site.xml,因为将它们添加到 mapred-site.xml 无效:

    <property>
      <name>mapreduce.map.java.opts</name>
      <value>-Djava.util.logging.config.file=parquet-logging.properties</value>
    </property>
    <property>
      <name>mapreduce.reduce.java.opts</name>
      <value>-Djava.util.logging.config.file=parquet-logging.properties</value>
    </property>
    <property>
      <name>mapreduce.child.java.opts</name>
      <value>-Djava.util.logging.config.file=parquet-logging.properties</value>
    </property>
    
    • 创建一个名为parquet-logging.properties 的文件,内容如下:

    # Note: I'm certain not every line here is necessary. I just added them to cover all possible
    # class/facility names.you will want to tailor this as per your needs.
    .level=WARNING
    java.util.logging.ConsoleHandler.level=WARNING
    
    parquet.handlers=java.util.logging.ConsoleHandler
    parquet.hadoop.handlers=java.util.logging.ConsoleHandler
    org.apache.parquet.handlers=java.util.logging.ConsoleHandler
    org.apache.parquet.hadoop.handlers=java.util.logging.ConsoleHandler
    
    parquet.level=WARNING
    parquet.hadoop.level=WARNING
    org.apache.parquet.level=WARNING
    org.apache.parquet.hadoop.level=WARNING
    
    • 将文件添加到作业中。在 Hive 中,这很容易做到:
      添加文件 /path/to/parquet-logging.properties;

    完成此操作后,当您运行 Hive 查询时,parquet 应该只 将警告(和更高)级别的消息记录到标准输出容器日志中。

    【讨论】:

      【解决方案5】:

      要关闭除 ERROR 之外的所有消息,您应该编辑 conf/log4j.properties 文件,更改以下行:

      log4j.rootCategory=INFO, console
      

      进入

      log4j.rootCategory=ERROR, console
      

      希望对您有所帮助!

      【讨论】:

      • 这实际上适用于来自 spark 的 log4j 日志,但不适用于这些。这些镶木地板原木似乎是由其他东西生产的? log4j.rootCategory 不会影响它们。
      【解决方案6】:

      不是解决方案,但如果您构建自己的 Spark,则此文件:https://github.com/Parquet/parquet-mr/blob/master/parquet-hadoop/src/main/java/parquet/hadoop/ParquetFileReader.java 拥有最多几代的日志消息,您现在可以将其注释掉。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-04
        • 1970-01-01
        • 1970-01-01
        • 2018-01-26
        • 2017-03-17
        • 1970-01-01
        • 1970-01-01
        • 2019-10-29
        相关资源
        最近更新 更多