在集群上运行spark应用程序时,出现:
Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
如下图所示:原因是下图最后一段代码:pairRDD.foreach(println)
应该改为:pairRDD.collect().foreach(println)。我修改之后就如下图所示成功了:
整个问题的原因是:
当采用Local模式在单机上执行时,pairRDD.foreach(println)会打印出所有的元素。但是,当采用集群模式执行时,在Worker节点上执行打印语句时输出到Worker节点的stdout中,就需要使用stdout中,而不是输出到任务控制节点Driver中,因此,任务控制节点Driver中的stdout是不会显示打印语句的这些内容的。为了把所有worker上的打印输出信息也显示到driver中,就需要使用collect()方法。(这段话来源于课本)
注:在课本《spark编程基础(Scala版)》120页