HADOOP - 将文本文件复制到 HDFS 时出现问题
HADOOP - Problems copying text files into HDFS
我正在按照著名的 Michael Noll Tutorial 实施 Hadoop 单节点集群。集群正在运行,检查 jps
显示所有组件在执行 start-all.sh
.
后 运行ning
我在使用一些下载的文本重现 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
我不明白这里出了什么问题,非常感谢任何帮助解决这个问题!
您必须使用 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
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
您现在应该可以看到所有文件。
我正在按照著名的 Michael Noll Tutorial 实施 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
我不明白这里出了什么问题,非常感谢任何帮助解决这个问题!
您必须使用 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
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
您现在应该可以看到所有文件。