Spark读取本地文件需要主节点

时间:2015-12-31 01:55:10

标签: apache-spark

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

1 个答案:

答案 0 :(得分:1)

我现在可以解释这个问题。 因为我在主节点中运行此程序。所以该文件应存在于主节点中,如果我在从属节点中运行该程序,一切正常。 我做了一些测试来验证我的猜测。您应确保该文件存在于您运行该程序的节点上,此文件仅用于FileInputFormat的getSplits,文件中的内容未被读取,最后,工作节点任务将根据localhost读取该文件。分裂。