返回介绍

11.2 Hello World

发布于 2025-04-22 19:57:21 字数 3327 浏览 0 评论 0 收藏

wordcount 示例是介绍 Hadoop MapReduce 编程的经典案例。这个应用程序用来统计文本文件中单词出现的频率。虽然使用 UNIX 命令行,如 sed、awd、或 wc( http://en.wikipedia.org/wiki/Wc_%28Unix%29 )看上去也可以轻松完成这个任务,但使用 Hadoop 来实现的原因是可以将它扩大规模以符合 Hadoop 的分布式特性。UNIX 命令行程序可以将数据扩展到 MB 甚至 GB 的级别。然而,它们运行在单一的进程中并且受到单台机器的磁盘传输速率的限制,大约只能达到 100MB/s。读取 1TB 的数据将会花费大约两个半小时的时间。使用 Hadoop,可以将数据分布到 HDFS 集群中,可把数据增长到数百 GB、TB 甚至 PB 级别。将 1TB 的数据集分布到 100 台机器可以将读取时间缩短到两分钟之内。HDFS 会将文件分成多个部分,分别存储在 Hadoop 集群的节点中。执行数据逻辑的 MapReduce 代码会被传送到数据驻留的节点之中,在接近数据的地方执行以增加 I/O 带宽并减少全部 job 的延迟时间,这个阶段就是 MapReduce 的“Map”阶段。为了汇总每一个节点所产生的结果,在集群中有一个节点被用来将各个部分的结果“Reduce”成最终的数据集。在字数统计的示例中,各机器所累加的单词计数会汇总为最终的单词频率清单。

在执行 wordcount 时最有趣的地方是选择要输入的示例文本。Gutenberg 项目提供了从公共领域书籍中下载大量文本的便捷方法,尽管这肯定不是原作者的意图。Gutenberg 项目的目的是将公共领域书籍全面数字化,目前已有超过 39 000 本书籍可供使用。可以浏览这个项目的网站并且使用 wget 下载一些经典文献。在示例 11-1 中,我们在/tmp/gutenberg/download 目录下执行该命令。

示例 11-1 使用 wget 下载 wordcount 所需的文本

P177

现在需要使用 HDFS Shell 命令将这些数据放入 HDFS 中。

在运行 Shell 命令前,需要安装 Hadoop( http://hadoop.apache.org/docs/r1.0.3/file_system_shell.html ),有一个很棒的 Michael Noll 在线教程能够引导你在单一机器上设置自己的 Hadoop 集群( http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster )。

调用位于 Hadoop 发布版 bin 目录下的 hadoop 命令即可执行 HDFS Shell 命令。可以使用 Hadoop 命令行参数 dfs 来使用 HDFS,接在它后面的是传统的文件命令和参数,如 cat 或者 chmod。将文件从本地文件系统复制到 HDFS 的命令是 copyFromLocal,如示例 11-2 所示。

示例 11-2 复制本地文件到 HDFS

P178a

检查文件是否已经存储在 HDFS 里,使用 ls 命令,如示例 11-3 所示。

示例 11-3 浏览 HDFS 文件

P178b

我们使用 Hadoop 发布版中的示例 jar 文件来执行 wordcount 应用程序。这个应用程序的参数是要执行的应用程序的名称 - 在例子中也就是 wordcount - 之后加上 HDFS 的输入目录和输出目录,如示例 11-4 所示。

示例 11-4 使用 Hadoop 命令行工具运行 wordcount

P178c

在发送命令后,Hadoop 会执行一段时间,最后的结果放在目录/user/gutenberg/output 下。可以使用示例 11-5 的命令在 HDFS 中查看输出结果。

示例 11-5 在 HDFS 查看 wordcount 输出结果

P178d

输出文件可能会多于一个,这取决于有多少输入文件。在默认情况下,输出文件名会符合示例 11-5 所示的模式,最后一组递增数字用来表示增加到输出中的每一个文件。若要将结果从 HDFS 复制到本地系统文件中,可使用示例 11-6 的命令。

示例 11-6 将结果从 HDFS 复制到本地系统文件中

P178e

如果在 HDFS 中有多个输出文件,从 HDFS 复制数据到本地文系统文件的时候,可使用 getmerge 选项将它们合并成一个单独的文件。查看该文件的内容,会看到按字母顺序排序的单词和它们在文件中出现的次数。那些看起来有点多余的引号是 MapReduce 程序标记单词的工具。示例 11-7 为 wordcount 应用程序示例的输出。

示例 11-7 wordcount 输出文件的部分内容

P179a

在下一个章节会介绍 Hadoop 发布版中的示例应用程序是如何提交 job 给 Hadoop 的。这有助于了解开发和运行自己的应用程序时需要关注的内容。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。