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

HADOOP-将文本文件复制到HDFS时出现问题,hadoop,mapreduce,hdfs,word-count,Hadoop,Mapreduce,Hdfs,Word Count,我正在实现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.

我正在实现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
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop fs -mkdir -p /user/hduser/gutenberg
显然没有文件
/user/hduser/gutenberg
,因此我使用以下内容创建了它:

hduser@ubuntu:~$ hadoop dfs -copyFromLocal /tmp/gutenberg /user/hduser/gutenberg
copyFromLocal: `/user/hduser/gutenberg': No such file or directory
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop fs -mkdir -p /user/hduser/gutenberg
然后重新运行copyFromLocal order,没有任何错误。如果我检查文件是否在那里,我会得到:

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

我不明白这里出了什么问题,非常感谢您的帮助

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

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相关的进一步操作。

尝试以下方法:

1。删除现有目录:

hadoop fs -rm -R /user/hduser/gutenberg
hadoop fs -mkdir /user/hduser/gutenberg/gutenberg
hadoop fs -put /tmp/gutenberg/*.* /user/hduser/gutenberg/gutenberg
hadoop fs -ls /user/hduser/gutenberg/gutenberg
2。创建目录:

hadoop fs -rm -R /user/hduser/gutenberg
hadoop fs -mkdir /user/hduser/gutenberg/gutenberg
hadoop fs -put /tmp/gutenberg/*.* /user/hduser/gutenberg/gutenberg
hadoop fs -ls /user/hduser/gutenberg/gutenberg
3。使用put命令将文件上载到hdfs:

hadoop fs -rm -R /user/hduser/gutenberg
hadoop fs -mkdir /user/hduser/gutenberg/gutenberg
hadoop fs -put /tmp/gutenberg/*.* /user/hduser/gutenberg/gutenberg
hadoop fs -ls /user/hduser/gutenberg/gutenberg
4。现在,在hdfs中列出文件:

hadoop fs -rm -R /user/hduser/gutenberg
hadoop fs -mkdir /user/hduser/gutenberg/gutenberg
hadoop fs -put /tmp/gutenberg/*.* /user/hduser/gutenberg/gutenberg
hadoop fs -ls /user/hduser/gutenberg/gutenberg

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

您需要再下一个目录。或者,您可以使用
-lsr
列出目录树中的文件
-lsr
递归搜索目录。谢谢,这对我(Linux和Hadoop的新手!)来说是一个有用的命令。嘿@DatamineR,也许你可以将一些答案标记为已接受,对吗?;)既然你的答案是第一位的,我就接受了。我的问题显然是在创建
/user/hduser/gutenberg
目录时发现的。我需要测试文件在此目录中,但是copyFromLocal命令创建另一个名为gutenberg的文件夹,其中包含文本文件。谢谢