1.我的问题。
我在4节点火花群中运行wordCount程序。程序的输入是本地文件系统文件。我知道我应该将文件分发给所有工作节点(在我的情况下,quad102是master,quad103-quad105是slave,所以文件应该存在于这些slave节点的相同路径中,我确定我不知道根据这个问题回答Spark: how to use SparkContext.textFile for local file system使quad102成为奴隶 !!! 但是,在我的练习中 ,如果主节点没有相同的文件,程序也无法运行,事实上,4节点都需要在同一个文件中包含此文件,否则无法运行。我已经阅读了SparkContext.textFile源代码,我没有发现任何问题,有人可以解释为什么主人也需要这个文件吗?(在我看来,只有从属节点需要这个文件。)
2.我的程序和群集配置。
(1)4节点集群是独立模式,quad102是主节点,quad103-quad105是从节点。
(2)程序非常简单:
object WordCount {
def main(args:Array[String]) {
//For test
if(args.length == 1) println(args(0))
val conf = new SparkConf().setAppName("WordCount")
val sc = new SparkContext(conf)
val rdd = sc.textFile(args(0))
rdd.flatMap(p => p.split("\\s+")).map(x => (x, 1)).reduceByKey(_ + _).collect().foreach(println(_))
sc.stop()
}
}
(3)我运行该程序的命令。
spark-submit --master spark://192.168.1.2:7077 --class cn.siat.postspark.mllib.WordCount file:///root/postspark_2.10-1.0.jar file:///root/Documents/java-listen-data/data/test1
答案 0 :(得分:1)
我现在可以解释这个问题。 因为我在主节点中运行此程序。所以该文件应存在于主节点中,如果我在从属节点中运行该程序,一切正常。 我做了一些测试来验证我的猜测。您应确保该文件存在于您运行该程序的节点上,此文件仅用于FileInputFormat的getSplits,文件中的内容未被读取,最后,工作节点任务将根据localhost读取该文件。分裂。