我正在尝试在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”之前的文件夹,为什么会这样呢?
谢谢:)
答案 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服务,那么您应该这样做:
cat
或grep
。这对于测试非常有用,您无需复制任何内容。实际运行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以获得更好的字数分解。
同样,所有这些都假设您已经成功完成了设置阶段(不小的壮举)。
希望这不是太混乱 - 祝你好运!