1

我正在尝试在 hadoop 中运行以下示例:http: //hadoop.apache.org/common/docs/current/mapred_tutorial.html

但是我不明白正在使用的命令,特别是如何创建输入文件,将其上传到 HDFS,然后运行字数统计示例。

我正在尝试以下命令:

bin/hadoop fs -put inputFolder/inputFile inputHDFS/

但是它说

put: File inputFolder/inputFile does not exist

我在hadoop文件夹中有这个文件夹,它是“bin”之前的文件夹,为什么会这样?

谢谢 :)

4

1 回答 1

2

希望这不是矫枉过正:

假设您已经安装了 hadoop(本地、分布式或伪分布式),您必须确保 hadoop 的 bin 和其他 misc 参数在您的路径中。在 linux/mac 中,只需将以下内容添加到您的一个 shell 文件(~/.bashrc~/.zshrc~/.bash_profile等 - 取决于您的设置和偏好)中,这很简单:

export HADOOP_INSTALL_DIR=/path/to/hadoop # /opt/hadoop or /usr/local/hadoop, for example
export JAVA_HOME=/path/to/jvm
export PATH=$PATH:$HADOOP_INSTALL_DIR/bin
export PATH=$PATH:$HADOOP_INSTALL_DIR/sbin

然后运行exec $SHELL或重新加载您的终端。要验证 hadoop 是否正在运行,请键入hadoop version并查看没有引发错误。假设您按照有关如何设置单节点集群的说明并使用start-all.sh命令启动了 hadoop 服务,那么您应该很高兴:

  • 在伪 dist 模式下,您的文件系统伪装成 HDFS。因此,只需像使用任何其他 linux 命令一样引用任何路径,例如cator grep。这对于测试很有用,您不必复制任何内容。

  • 在实际运行 HDFS 的情况下,我使用copyFromLocal命令(我发现它可以正常工作):

      $ hadoop fs -copyFromLocal ~/data/testfile.txt /user/hadoopuser/data/
    

在这里,我假设您在作为集群一部分的机器上执行复制。请注意,如果您的 hadoopuser 与您的 unix 用户名相同,则可以删除该/user/hadoopuser/部分 - 隐式假定它在您的 HDFS 用户目录中执行所有操作。此外,如果您使用客户端计算机在集群上运行命令(您也可以这样做!),请知道您需要在-conf之后使用 flag传递集群的配置hadoop fs,例如:

# assumes your username is the same as the one on HDFS, as explained earlier
$ hadoop fs -conf ~/conf/hadoop-cluster.xml -copyFromLocal ~/data/testfile.txt data/ 

对于输入文件,您可以使用任何包含文本的文件。我使用了来自Gutenberg 网站的一些随机文件。

最后,要运行 wordcount 示例(作为 hadoop 发行版中的 jar 提供),只需运行以下命令:

$ hadoop jar /path/to/hadoop-*-examples.jar wordcount /user/hadoopuser/data/ /user/hadoopuser/output/wc

这将读取data/文件夹中的所有内容(可以有一个或多个文件)并将所有内容写入output/wc文件夹 - 全部在 HDFS 上。如果您在伪 dist 中运行它,则无需复制任何内容 - 只需将其指向正确的输入和输出目录。确保该wc目录不存在,否则您的工作将崩溃(无法覆盖现有目录)。请参阅此以获得更好的字数细分。

同样,所有这一切都假设您已成功通过设置阶段(不小壮举)。

希望这不会太令人困惑 - 祝你好运!

于 2012-04-28T20:52:25.383 回答