如何在Hadoop中运行wordCount示例?

时间:2012-04-28 19:47:19

标签: hadoop

我正在尝试在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”之前的文件夹,为什么会这样呢?

谢谢:)

1 个答案:

答案 0 :(得分:1)

希望这不是矫枉过正:

假设你有installed hadoop(在本地,分布式或伪分布式),你必须确保hadoop的bin和其他misc参数在你的路径中。在linux / mac中,这是一个简单的问题,即将以下内容添加到您的一个shell文件(~/.bashrc~/.zshrc~/.bash_profile等 - 取决于您的设置和首选项):< / p>

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服务,那么您应该这样做:

  • 在伪距模式下,您的文件系统假装为HDFS。因此,只需引用任何其他路径的路径,例如catgrep。这对于测试非常有用,您无需复制任何内容。
  • 实际运行HDFS时,我使用copyFromLocal命令(我发现它只是工作):

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

这里我假设您在作为群集一部分的计算机上执行复制。请注意,如果您的hadoopuser与您的unix用户名相同,则可以删除/user/hadoopuser/部分 - 隐式假设它在您的HDFS用户目录中执行所有操作。此外,如果您使用客户端计算机在群集上运行命令(您也可以这样做!),请知道您需要在-conf之后使用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 site中的一些随机文件。

最后,要运行wordcount示例(来自hadoop发行版中的jar),只需运行命令:

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

这将读取data/文件夹中的所有内容(可以包含一个或多个文件)并将所有内容写入output/wc文件夹 - 所有这些都在HDFS上。如果你在伪dist中运行它,不需要复制任何东西 - 只需将它指向正确的输入和输出目录。确保wc目录不存在或您的作业将崩溃(无法覆盖现有目录)。 See this以获得更好的字数分解。

同样,所有这些都假设您已经成功完成了设置阶段(不小的壮举)。

希望这不是太混乱 - 祝你好运!