【已解決】Spark textFile報錯InvalidInputException(小白踩坑記錄)

目錄

1 問題 InvalidInputException

2 背景textFile

3 解決

3.1 hdfs導入 報錯原因+解決

3.2 本地導入 報錯原因+解決

3.2.1 【已解決】根目錄file://到底在哪裏

3.2.2 hadoop看根目錄

3.2.3 【已解決】本地目錄裏面不要空格


1 問題 InvalidInputException

org.apache.hadoop.mapred.InvalidInputException: 
    Input path does not exist

2 背景textFile

textFile是一個從外部創建RDD的函數

def textFile(
      path: String,
      minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
    assertNotStopped()
    hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
      minPartitions).map(pair => pair._2.toString).setName(path)
  }

參數:

path: String 這個地址可以是HDFS、本地文件

minPartitions= math.min(defaultParallelism, 2) 是指定數據的分區,一版默認2(如果核數大於2)

其中,path一般在寫作:

hdfs文件:'hdfs:///user/root/1.txt'、‘/user/root/1.txt’;

本地文件:‘file:///user/root/1.txt’

但是,會出現上述報錯

3 解決

3.1 hdfs導入 報錯原因+解決

原因:我們安裝hadoop時修改了文件\hadoop-2.8.5\etc\hadoop\core-site.xml

根據我們安裝時填寫的路徑修改代碼,即可

比如我的就改成 var rdd = spark.sparkContext.textFile("hdfs://localhost:9000/user/root/input")

3.2 本地導入 報錯原因+解決

本地文件導入報錯是因爲根目錄下不存在該文件!

注意hdfs根目錄和spark根目錄的區別!!!

同一個本地地址,spark查無此人,hadoop卻是有的,因爲打開spark、hadoop的根目錄是不同位置!!

小白OS:不想知道爲什麼會讓我覺得這兩個的file://是一個東西   原因指路→3.2.1 【已解決】根目錄file://到底在哪裏

 

下圖可證我的結論,我最後就都在G盤打開這倆東西了,成功

只要在一個盤裏打開,即使具體位置不同,也是可以用的,也蠻方便的。

3.2.1 【已解決】根目錄file://到底在哪裏

在不同文件目錄下打開cmd,file://指向的根目錄不一樣,比如:

一般人用菜單打開cmd,那麼file://指C盤

有些人會在D盤安裝hadoop,然後在其下打開cmd,那麼file://指D盤

如果在同一個盤的不同文件中打開cmd,比如在D:/1/2位置和D:/3/4位置分別打開cmd,那麼file://都指D盤

 

3.2.2 hadoop看根目錄

hadoop fs -ls file://​測試一下根目錄到底在哪裏,根目錄下是否有對應文件

一般情況你在什麼大盤目錄下打開,hadoop默認的根目錄就在這個大盤下

舉個栗子:

比如在一個G盤文件目錄下打開cmd,那麼根目錄就在G盤下

其中,file:///hadoop目錄是hadoop這個軟件在自動生成的文件夾,在哪個大盤打開,就在哪裏生成

3.2.3 【已解決】本地目錄裏面不要空格

如果本地地址有空格,報如下錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章