Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark读取本地文件需要文件存在于主节点中_Apache Spark - Fatal编程技术网

Apache spark Spark读取本地文件需要文件存在于主节点中

Apache spark Spark读取本地文件需要文件存在于主节点中,apache-spark,Apache Spark,1.我的问题 我在一个4节点spark集群中运行一个wordCount程序。程序的输入是本地文件系统文件。我知道我应该将文件分发给所有工作节点(在我的情况下,quad102是主节点,quad103-quad105是从节点,因此文件应该存在于这些从节点中的同一路径中,我确信我不会将quad102作为从节点) !!!但是,在我的实践中,如果主节点没有相同的文件,那么程序也无法运行,事实上,4个节点都需要在相同的文件中包含此文件,否则它无法运行。我已经阅读了SparkContext.textFile源

1.我的问题

我在一个4节点spark集群中运行一个wordCount程序。程序的输入是本地文件系统文件。我知道我应该将文件分发给所有工作节点(在我的情况下,quad102是主节点,quad103-quad105是从节点,因此文件应该存在于这些从节点中的同一路径中,我确信我不会将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

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

这不是运行spark应用程序的实际机器吗(而不是spark主节点),需要在其上访问文件以确定拆分?