hadoop - 无法在 Spark API 中打印/记录消息

标签 hadoop apache-spark logging rdd

我正在调试 Spark 作业,但不知何故,控制台/日志中隐藏了 Spark API 调用中的任何内容,这是我的代码:

public static JavaRDD<SolrInputDocument> join(
        JavaPairRDD<ImmutableBytesWritable, Result> hBaseRdd,
        List<NuggetsField> fields) {
        System.out.println("In join method....");
        logger.error("In join method.... logger.error");

        JavaRDD<ProductJoin> pjs =  hBaseRdd.map(tuple -> {
            System.out.println("in map API .....");
            logger.error("in map API.... logger.error");
            /**do some transformation*/
        });

        System.out.println("got ProductJoin RDD.....");
        System.out.println("pjs.count() = " + pjs.count());
        return pjs;
  }

在连接方法中....在连接方法中.... logger.error得到了ProductJoin RDD.....pjs.count() = 总能打印出来。

但是,in map API .....in map API.... logger.error 从未显示。

这是为什么? 此外,pjs.count() 值不为 0。

有人可以帮帮我吗?

谢谢!

最佳答案

这里的关键是 JVM 运行打印行的内容,因为这是它将出现的日志。 在您的情况下,因为您在除驱动程序之外的 yarn 上运行,您可以看到驱动程序的打印输出,但看不到在执行程序上运行的任何代码(如 map )。 该输出进入相应的 yarn 容器 stderr 文件。

如果您想在调试时看到任何打印语句,最简单的方法就是在本地模式下运行。

关于pjs.count(),map操作是一对一的转换,不能移除元素。您稍后需要应用过滤器来删除空值。

关于hadoop - 无法在 Spark API 中打印/记录消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45603835/

相关文章:

hadoop - oozie作业提交失败,并检查您的mapreduce.framework.name配置和相应的服务器地址

file - 文件格式存储的最佳实践 (Hadoop)

hadoop - 是否可以在 Hadoop 1(没有 YARN)中使用 Impala?

Java 读写 Spark Vector 到 Hdfs

java - 如何记录 Spring 5 WebClient 调用

logging - Microsoft Enterprise Library 5.0 Logging Application Block 线程安全吗?

c# - 使用 Serilog 时如何在输出消息中获取丰富的属性

java - Oozie Java操作失败,原因如下:java.lang.ClassNotFoundException:com.fasterxml.jackson.core.exc.InputCoercionException

sql - 窗口功能的默认窗口框架是什么

apache-spark - spark read parquet with partition filters vs 完整路径