1. 程式人生 > >Spark 採坑系列(一) 叢集環境讀取本地檔案的坑

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): 

java.io.FileNotFoundException: File file:/opt/soft/hadoop/sparkFirst does not exist

並且,很多人建議採用hdfs的方式載入檔案,這樣就不會出現剛才的問題了,好用並且高大上。既然這樣,我們就來試一試,把剛才的檔案上傳到hdfs中:

 

我們將sparkFirst 檔案上傳到了hdfs的根目錄(注意最後的 .),然後我們將載入檔案的路徑改為hdfs路徑並再次嘗試。

 

最後成功!