Spark 採坑系列java
今天在網上看了一個例子,Spark啓動後讀取文件並計算的例子,本身在按照網上方法使用的時候意外菜了坑。shell
首先,我將3臺虛擬機的Spark集羣以及Hadoop集羣啓動。apache
而後我在其中一個服務器上編輯了一個文本,命名sparkFirst,內容以下:服務器
hello sparkoop
hello worldspa
hello spark!scala
保存後,存在了其中一臺服務器上,而後我開始試驗:hadoop
首先,執行spark的控制檯命令spark-shellget
而後,讀取文本,並執行計算行數的命令,結果報錯:文件上傳
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路徑並再次嘗試。
最後成功!