【问题标题】:HADOOP - Problems copying text files into HDFSHADOOP - 将文本文件复制到 HDFS 时出现问题
【发布时间】:2015-05-07 20:00:49
【问题描述】:

我正在按照著名的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

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

【问题讨论】:

  • 你需要再下一个目录。或者,您可以使用-lsr 列出目录树中的文件。 -lsr 递归搜索目录。
  • 谢谢,对我有用的 commanf(Linux 和 Hadoop 的新手!:))
  • 嘿@DatamineR,也许您可​​以将某些答案标记为已接受,对吗? ;)
  • 既然你的答案是第一位的,我会接受它。

标签: hadoop mapreduce hdfs word-count


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    hadoop dfs -copyFromLocal /tmp/gutenberg /user/hduser/gutenberg
    

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

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

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

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

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

    【讨论】:

    • 我的问题显然是在创建/user/hduser/gutenberg 目录时引起的。我需要将测试文件放在此目录中,但 copyFromLocal 命令会创建另一个名为 gutenberg 的文件夹,其中包含文本文件。谢谢!
    【解决方案3】:

    试试这个:

    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
    

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

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2012-11-21
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多