HADOOP - 将文本文件复制到HDFS时出现问题

时间:2015-05-07 00:38:10

标签: hadoop mapreduce hdfs word-count

我正在使用突出的here实现Hadoop单节点集群。群集正在运行,使用jps进行检查显示执行start-all.sh后所有组件都在运行。

我在使用一些下载的文本复制wordcount-example时遇到了问题。我在/tmp/gutenberg下载了这些文件并检查它们是否存在,这似乎就是这种情况:

hduser@ubuntu:~$ ls -l /tmp/gutenberg/
insgesamt 3604
-rw-r----- 1 hduser hadoop  674570 Mai  7 01:03 pg20417.txt
-rw-r----- 1 hduser hadoop 1573151 Mai  7 01:03 pg4300.txt
-rw-r----- 1 hduser hadoop 1423803 Mai  7 01:03 pg5000.txt

然后按照教程中的说明启动Hadoop集群,然后执行以下操作:

hduser@ubuntu:~$ hadoop dfs -copyFromLocal /tmp/gutenberg /user/hduser/gutenberg
copyFromLocal: `/user/hduser/gutenberg': No such file or directory

显然没有文件/user/hduser/gutenberg,所以我用以下内容创建了它:

hduser@ubuntu:/usr/local/hadoop$ bin/hadoop fs -mkdir -p /user/hduser/gutenberg

然后重新运行copyFromLocal命令而没有任何错误。如果我然后检查文件是否在那里,我得到:

hduser@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls /user/hduser/gutenberg
Found 1 items
drwxr-xr-x   - hduser supergroup          0 2015-05-07 02:22 /user/hduser/gutenberg/gutenberg

因此,如您所见,文本文件。如果我重新运行copyFromLocal命令,我会收到一条消息,指出文件

hduser@ubuntu:/usr/local/hadoop$ hadoop dfs -copyFromLocal /tmp/gutenberg /user/hduser/gutenberg
copyFromLocal: `/user/hduser/gutenberg/gutenberg/pg20417.txt': File exists
copyFromLocal: `/user/hduser/gutenberg/gutenberg/pg4300.txt': File exists
copyFromLocal: `/user/hduser/gutenberg/gutenberg/pg5000.txt': File exists

我不明白这里有什么问题,非常感谢您解决这个问题的任何帮助!

3 个答案:

答案 0 :(得分:1)

您必须使用bin/hadoop dfs -ls /user/hduser/gutenberg/gutenberg并且您应该看到所有文件,您正在使用ls命令错误,仅此而已。

答案 1 :(得分:1)

hadoop dfs -copyFromLocal /tmp/gutenberg /user/hduser/gutenberg

这是将数据从本地文件系统复制到HDFS文件系统的复制命令。 在您的命令中,本地文件系统路径为 / tmp / gutenberg ,HDFS文件系统路径为 / user / hduser / gutenberg 。这意味着您将整个 gutenberg 目录从本地复制到给定的HDFS目录。 copyFromLocal 命令用于将文件和目录从本地文件系统复制到HDFS文件系统,并在第一次将目录与文件一起复制到HDFS目录时触发它。

copyFromLocal 命令不允许覆盖HDFS上的文件,因此当您第二次运行文件存在错误时运行它。

当您执行hdfs dfs -ls /user/hduser/gutenberg/gutenberg/时,您将能够在那里看到您的文件。

您还可以使用 -put 命令代替 -copyFromLocal 将数据从本地文件系统复制到HDFS文件系统。

hadoop dfs已被弃用,因此我建议您使用hdfs dfs进行与hadoop相关的进一步操作。

答案 2 :(得分:0)

试试这个:

<强> 1。删除现有目录:

hadoop fs -rm -R /user/hduser/gutenberg

<强> 2。创建目录:

hadoop fs -mkdir /user/hduser/gutenberg/gutenberg

第3。使用put命令将文件上传到hdfs:

hadoop fs -put /tmp/gutenberg/*.* /user/hduser/gutenberg/gutenberg

<强> 4。现在,列出hdfs中的文件:

hadoop fs -ls /user/hduser/gutenberg/gutenberg

您现在应该看到所有文件。