我刚开始学习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中打印出它们的内容。即使我将主人和工人设置为本地,它似乎也不起作用。
我在这里理解错了吗?
答案 0 :(得分:0)
如果你想在执行器中打印一些东西,普通的println就可以了。这将在执行程序的标准输出中打印输出
答案 1 :(得分:0)
您可以在浏览器[主机]中的 localhost:8080 中查看工作人员状态,应用程序状态stderr,每个工作人员rdd分发的标准以及更多内容。单击worker-Id,您可以查看日志(stdout,stderr)。如果您想查看实际的分布和状态,可以点击正在运行的应用程序,点击应用程序详细用户界面链接,它将显示您的应用程序的完整详细信息。
如果您只想查看工作人员用户界面,可以在工作人员系统中输入 localhost:8081 进行查看。
答案 2 :(得分:0)
每当您提交Spark作业时,Spark作业的任务(说明)都会从驱动程序转移到执行程序。驱动程序可以在您当前登录的同一节点上运行(本地和YARN客户端),或者驱动程序可以在另一个节点(应用程序主服务器)上运行。
所有操作都会将结果返回给驱动程序,因此如果您登录到运行驱动程序的计算机,则可以看到输出。但是您无法在执行程序节点上看到输出,因为任何打印语句都将打印在相应计算机的控制台上。你可以只做一个sc.textFile(),它会将所有分区分别保存到目录中。通过这种方式,您可以看到每个分区中的内容。