目錄
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 【已解決】本地目錄裏面不要空格
如果本地地址有空格,報如下錯誤