2017-02-03 46 views
0

我在跟隨Apache Map Reduce tutorial,我正在分配輸入和輸出目錄。我在這裏創建了兩個目錄:Hadoop無法看到我的輸入目錄

~/projects/hadoop/WordCount/input/ 
~/projects/hadoop/WordCount/output/ 

但是當我運行fs時,找不到文件和目錄。我以ubuntu用戶身份運行,它擁有目錄和輸入文件。

基於下面提出的解決方案,我然後嘗試:

找到我的HDFS目錄hdfs dfs -ls /它是/tmp 我創建的輸入/輸出/內部/tmpmkdir

試圖複製本地.jar to.hdfs:

hadoop fs -copyFromLocal ~projects/hadoop/WordCount/wc.jar /tmp 

收稿日期:

copyFromLocal: `~projects/hadoop/WordCount/wc.jar': No such file or directory 

enter image description here

任何故障排除的想法?謝謝

+0

創建'Hadoop的FS -mkdir/input'輸入目錄,然後運行單詞計數的水瓶中'Hadoop的罐子wc.jar字計數/輸入/ output'。讓我知道如果這個解決 – franklinsijo

+0

謝謝,我認爲這將工作!我能夠在hdfs中創建輸入/輸入。一個問題:我如何將輸入數據文件導入hdfs/input,並且需要以相同方式創建/輸出還是本地?我認爲你的帖子會解釋和感謝 – Slinky

+0

我已經解釋它爲答案 – franklinsijo

回答

1

的MapReduce預計InputOutput路徑是在HDFS的目錄,而不是當地的,除非羣集在本地模式配置。此外,輸入目錄必須存在,輸出不應該。

例如:

如果輸入是/mapreduce/wordcount/input/,這個目錄必須在它與所有的輸入文件創建的。使用HDFS命令來創建它們。

hdfs dfs -mkdir -p /mapreduce/wordcount/input/ 
hdfs dfs -copyFromLocal file1 file2 file3 /mapreduce/wordcount/input/ 

file1 file2 file3在本地使用的輸入文件

且輸出爲/examples/wordcount/output/。父目錄必須存在,但不是output/目錄。 Hadoop在作業執行中創建它。

hdfs dfs -mkdir -p /examples/wordcount/ 

用於作業,在這種情況下wc.jar應在本地和執行駐留提供絕對或相對的本地路徑命令的罐子。

所以最後命令會是什麼樣子

hadoop jar /path/where/the/jar/is/wc.jar ClassName /mapreduce/wordcount/input/ /examples/wordcount/output/ 
+1

感謝您的明確解釋。它確實幫助我理解了這個問題,是的,解決方案奏效了,而且更好,我明白我做錯了什麼,並且知道今後會更好。 – Slinky

1

由於hadoop無效輸入異常表明它找不到位置「/ home/ubuntu/projects/hadoop/WordCount/input」。

它是本地還是HDFS路徑?我認爲這是本地的,這就是爲什麼輸入異常發生。

要執行一個jar文件,你必須把jar放在HDFS目錄下。輸入和輸出目錄也必須在HDFS中。

使用copyFromLocal命令將罐子從本地複製到Hadoop的目錄:

hadoop fs -copyFromLocal <localsrc>/wc.jar hadoop-dir