hadoop-将文本文件复制到hdfs时出现问题

5t7ly7z5  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(477)

我正在按照著名的michaelnoll教程实现hadoop单节点集群。群集正在工作,正在与进行检查 jps 显示执行后所有组件都在运行 start-all.sh .
我在使用一些下载的文本复制wordcount示例时遇到了一个问题。我把文件下载到 /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

我不明白这里出了什么问题,如果能帮我解决这个问题,我将不胜感激!

jfewjypa

jfewjypa1#

试试这个:
1删除现有目录:

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

2创建目录:

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

三。使用put命令将文件上载到hdfs:

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

4现在,列出hdfs中的文件:

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

你现在应该看到所有的文件了。

bjg7j2ky

bjg7j2ky2#

你必须使用 bin/hadoop dfs -ls /user/hduser/gutenberg/gutenberg 你应该看到所有的文件,你正在使用 ls 命令不对,没别的了。

6ju8rftf

6ju8rftf3#

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

这是将数据从本地文件系统复制到hdfs文件系统的copy命令。在您的命令中,本地文件系统路径是/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。

相关问题