Spark 採坑系列(一) 叢集環境讀取本地檔案的坑
Spark 採坑系列
今天在網上看了一個例子,Spark啟動後讀取檔案並計算的例子,自己在按照網上方法使用的時候意外菜了坑。
首先,我將3臺虛擬機器的Spark叢集以及Hadoop叢集啟動。
然後我在其中一個伺服器上編輯了一個文字,命名sparkFirst,內容如下:
hello spark
hello world
hello spark!
儲存後,存在了其中一臺伺服器上,然後我開始試驗:
首先,執行spark的控制檯命令spark-shell
然後,讀取文字,並執行計算行數的命令,結果報錯:
scala> val lines=sc.textFile("/opt/soft/hadoop/sparkFirst")
lines: org.apache.spark.rdd.RDD[String] = /opt/soft/hadoop/sparkFirst MapPartitionsRDD[1] at textFile at <console>:24
scala> lines.count()
報錯如圖
然後開始上網找原因,網上說如果Spark採用叢集模式讀取本地檔案,必須保證每個叢集下都有相同的問題件,否則就會報找不到檔案的錯誤:
WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 192.168.194.130, executor 1):
並且,很多人建議採用hdfs的方式載入檔案,這樣就不會出現剛才的問題了,好用並且高大上。既然這樣,我們就來試一試,把剛才的檔案上傳到hdfs中:
我們將sparkFirst 檔案上傳到了hdfs的根目錄(注意最後的 .),然後我們將載入檔案的路徑改為hdfs路徑並再次嘗試。
最後成功!