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

时间:2017-08-10 03:16:24

标签: 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;
  }

In join method....In join method.... logger.error以及got ProductJoin RDD.....pjs.count() =可以随时打印出来。

但是,永远不会显示in map API .....in map API.... logger.error

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

有人能帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

如果要在调试时查看任何打印语句,最简单的方法是以本地模式运行。

关于pjs.count(),地图操作会进行1比1的转换,但不能删除元素。稍后您需要应用过滤器来删除空值。