尘世壹俗人 2025-10-28 17:34 采纳率: 81.3%
浏览 3
已结题

如何在Hive自定义函数中输出日志并出现在yarn聚合结果中

尝试了一下log4j但是没有效果,也可能我用的不对,现在无论是直接用Java的控制台输出或者是apache.common下的日志类都拿不到日志,有点头大

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-10-28 17:38
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    你遇到的问题是Hive自定义函数中无法输出日志并出现在YARN聚合结果中。这里有几点需要注意:

    1. Hive自定义函数的日志级别:Hive自定义函数的日志级别默认是INFO,需要在函数中设置日志级别为DEBUG或TRACE,才能看到日志。
    2. YARN日志收集:YARN会收集应用的日志,但是需要配置日志收集器才能看到日志。
    3. Hive自定义函数的日志输出:Hive自定义函数的日志输出需要通过System.out.println()Logger类来实现。

    解决方法

    1. 在Hive自定义函数中设置日志级别为DEBUG或TRACE:
    import org.apache.log4j.Logger;
    
    public class MyUDF {
      private static final Logger LOG = Logger.getLogger(MyUDF.class);
    
      public String evaluate(String input) {
        LOG.setLevel(Level.DEBUG);
        // ...
      }
    }
    
    1. 配置YARN日志收集器:
    yarn logs -applicationId <应用ID>
    
    1. 在Hive自定义函数中输出日志:
    public String evaluate(String input) {
      System.out.println("日志信息:" + input);
      // ...
    }
    

    或者使用Logger类:

    public String evaluate(String input) {
      LOG.debug("日志信息:" + input);
      // ...
    }
    

    注意

    • 需要在Hive自定义函数中设置日志级别和输出日志。
    • 需要配置YARN日志收集器才能看到日志。
    • 日志输出需要通过System.out.println()Logger类来实现。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月28日
  • 已采纳回答 10月28日
  • 创建了问题 10月28日