Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 无法在Spark API中打印/记录消息_Hadoop_Apache Spark_Logging_Rdd - Fatal编程技术网

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

Hadoop 无法在Spark API中打印/记录消息,hadoop,apache-spark,logging,rdd,Hadoop,Apache Spark,Logging,Rdd,我正在调试Spark作业,但不知何故,Spark API调用中的任何内容都隐藏在控制台/日志中,以下是我的代码: public static JavaRDD<SolrInputDocument> join( JavaPairRDD<ImmutableBytesWritable, Result> hBaseRdd, List<NuggetsField> fields) { System.out.println("I

我正在调试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;
  }
在联接方法中。。。。在join方法中。。。。logger.error并获得ProductJoin RDD。。。。。pjs.count=始终可以打印出来

但是,在map API中。。。。。在地图API中。。。。logger.error从不显示

为什么会这样? 另外,pjs.count值不是0

有人能帮我吗


谢谢

这里的关键是JVM运行打印行的内容,因为它将出现在日志中。 在您的例子中,因为您运行的是除驱动程序之外的其他程序,所以您可以看到驱动程序的打印输出,但不能看到在map等执行器上运行的任何代码。 该输出进入相应的纱线容器stderr文件

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

关于pjs.count,映射操作进行1对1转换,它无法删除元素。稍后,您需要应用筛选器来删除空值。

执行join方法时,根据您的代码,方法中提到的系统输出消息将打印在您提交spark submit作业的驱动程序端。但在pjs的情况下,它是一个RDD,只有在对其调用操作时才会对其进行评估,在调用pjs.count时才会执行,这将在执行器端进行评估。所以,无论您在转换中提到什么样的Sysout消息,都将在执行器端打印出来。要访问这些日志,您需要通过纱线日志-applicationId application\u id访问纱线容器日志,因为来自执行者的日志将聚合到容器中。当我看到您没有找到Thread命令时,请将$Thread\u HOME/bin添加到您的类路径并尝试该命令

请使用以下连结:-


部分:调试您的应用程序

您是否可以使用纱线日志检查-applicationId application\u id。我以前尝试过,但是我得到了-bash:warn:command not found,:好的,我可以这样做,但是在这个纱线日志中,仍然没有任何日志记录。可能出现什么问题?您运行spark应用程序的模式是什么?-master Thread-部署模式客户端