Hadoop无法看到我的输入目录

时间:2017-02-03 21:53:13

标签: java mapreduce hdfs hadoop2

我正在关注Apache Map Reduce tutorial,我正在分配输入和输出目录。我在这里创建了两个目录:

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

但是当我运行fs时,找不到文件和目录。我作为ubuntu用户运行,它拥有目录和输入文件。

根据以下建议的解决方案,我尝试了:

找到我的hdfs目录hdfs dfs -ls / /tmp  我使用/tmp

mkdir内创建了输入/输出/

尝试复制本地.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

任何疑难解答的想法?感谢

2 个答案:

答案 0 :(得分:1)

由于hadoop Invalid Input Exception建议无法找到位置“/ home / ubuntu / projects / hadoop / WordCount / input”。

是本地还是HDFS路径?我认为这是本地的,这就是输入Exception发生的原因。

要执行jar文件,您必须将jar放在HDFS目录中。输入和输出目录也必须是HDFS。

使用copyFromLocal命令将jar从local复制到hadoop目录:

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

答案 1 :(得分: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/

用于作业的jar,在这种情况下wc.jar应驻留在本地,并在执行时提供命令的绝对或相对本地路径。

所以最后的命令看起来像

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