Spark Cluster:如何在每个工作节点上打印出RDD的内容

时间:2017-05-11 04:03:54

标签: scala apache-spark

我刚开始学习apache spark,想知道为什么这对我不起作用。

我正在运行spark 2.1并启动了一个主人和一个工人(不是本地人)。这是我的代码:

object SimpleApp {
    def main(args: Array[String]) {
    val file = [FILELOCATION]
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val textFile = sc.textFile(file)   
    val counts = textFile.flatMap(line => line.split(" "))
                         .map(word => (word.toLowerCase.toCharArray.toList.sorted.mkString, 1))
                         .reduceByKey(_ + _)

    counts.map(println)
    counts.foreach(println)

    val countCollect = counts.collect()

    sc.stop()    
    }
}

我似乎无法让工作节点在stdout中打印出它们的内容。即使我将主人和工人设置为本地,它似乎也不起作用。

我在这里理解错了吗?

3 个答案:

答案 0 :(得分:0)

如果你想在执行器中打印一些东西,普通的println就可以了。这将在执行程序的标准输出中打印输出

答案 1 :(得分:0)

您可以在浏览器[主机]中的 localhost:8080 中查看工作人员状态,应用程序状态stderr,每个工作人员rdd分发的标准以及更多内容。单击worker-Id,您可以查看日志(stdout,stderr)。如果您想查看实际的分布和状态,可以点击正在运行的应用程序,点击应用程序详细用户界面链接,它将显示您的应用程序的完整详细信息。

如果您只想查看工作人员用户界面,可以在工作人员系统中输入 localhost:8081 进行查看。

答案 2 :(得分:0)

每当您提交Spark作业时,Spark作业的任务(说明)都会从驱动程序转移到执行程序。驱动程序可以在您当前登录的同一节点上运行(本地和YARN客户端),或者驱动程序可以在另一个节点(应用程序主服务器)上运行。

所有操作都会将结果返回给驱动程序,因此如果您登录到运行驱动程序的计算机,则可以看到输出。但是您无法在执行程序节点上看到输出,因为任何打印语句都将打印在相应计算机的控制台上。你可以只做一个sc.textFile(),它会将所有分区分别保存到目录中。通过这种方式,您可以看到每个分区中的内容。