我正在调试 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/