1.我的問題。Spark讀取本地文件需要該文件存在於主節點
我在4節點spark集羣中運行wordCount程序。程序的輸入是本地文件系統文件。我知道我應該將文件分發給所有工作節點(在我的情況下,quad102是主節點,quad103-quad105是從節點,所以文件應該存在於這些從節點中的相同路徑中,並且我確信我不會使quad102作爲奴隸)根據這個問題的答案Spark: how to use SparkContext.textFile for local file system !!! 但是,在我的練習,如果主節點沒有相同的文件,程序不能運行,實際上,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)指令i運行此程序。
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
實際上不是它正在運行spark應用程序的機器(而不是spark-master節點),在該機器上需要訪問文件以確定分割? –