argparse(argparse是干什么的)

argparse(argparse是干什么的)div id module unit notification container hidden div p 作为一个简单的 MapReduce 示例 我们可以编写一个作业 程序来计算每个单词在一个文件或一组文件中出现的次数 例如 如果假设 A 和 B 两个文件包含有内容 This is a p

大家好,我是讯享网,很高兴认识大家。



 <div id="module-unit-notification-container" hidden=""></div> <p>作为一个简单的 MapReduce 示例,我们可以编写一个作业/程序来计算每个单词在一个文件或一组文件中出现的次数。 例如,如果假设 A 和 B 两个文件包含有内容“This is a cloud computing course”和“This is learning path 4 in the cloud computing course”,那么我们会得到类似下表所示的输出。 此类程序通常称为“WordCount”。 WordCount 程序包含在 Hadoop 发行版中,并随时可用于运行和测试。 它表示大数据应用程序中的大量文本处理算法。 因此,许多人都认为它是一种先进的基准工作负载,可用于评估 Hadoop 的效率。 原始的 MapReduce 论文 <sup>1</sup> 将 WordCount 用作基准工作负载。</p> 

讯享网

下表显示了包含“This is a cloud computing course”和“This is learning path 4 in the cloud computing course”内容的两个文件中每个单词的出现频率,据推测是由 WordCount 基准程序生成的:

单词 计数    单词 计数    单词 计数 This 2 computing 2 4 1 is 2 course 2 in 1 a 1 learning 1 The 1 cloud 2 path 1

可以用 Java 编程语言编写 MapReduce 程序。 若要编写 WordCount 程序(或常规的 MapReduce 程序),我们通常首先定义映射和归约函数的输入和输出格式。 由于我们处理的是键值对,因此只需指定输入和输出文件将包含的实际键和值及其类型(例如字符串或数字)。 无论是一个还是一百万个文件,作业的输入(输入数据集)必须始终采用相同的格式。 同样,作业的输出文件必须始终显示相同的格式,该格式可能不同于输入格式。

输入和输出格式可以是任意的,例如基于行的日志、图像、视频、多行记录或完全不同的内容。 Hadoop 可以处理任何文件格式,从纯文本到二进制文件再到结构化数据库不等。 为此,用户可以覆盖 Hadoop 的 (默认 )和 (默认 )类。 前一个类定义如何将输入文件读取为键值对,并构造映射任务的相应输入分段。 Hadoop 引擎为每个由此生成的输入分段生成一个映射任务。 类似地, 类定义归约任务如何将键值对作为输出文件写入到 HDFS。 以下视频详细说明了如何在 Hadoop MapReduce 中使用 和 类。

默认的 I/O 子类适用于文本处理。 具体而言, 支持读取文本文件,其中行的字节偏移量为键,实际的行内容为值。 支持将文件作为键值3文本对写入。 其他格式的类(如 和 类)随 Hadoop 一起提供,支持读取和写入二进制文件。 此外,Hadoop 用户始终可以实现为其输入数据集定制的自定义输入和输出格式类。 有关如何执行此操作的详细信息,请参阅 White 的“Hadoop:权威指南。”3


讯享网

我们将 WordCount 示例假设为文本文件输入。 这样,我们就可以直接使用 类,其中键是文件中某行的字节偏移量,值是该行内容本身。 此外,我们还可以直接使用 类,其中键是输入数据集中出现的单词,值是该单词出现的频率。 键类型可设置为 Java (Hadoop 中的 ),值类型可设置为 Java (Hadoop 中的 )。 归约函数应接收来自映射任务的单词作为键,每个单词的数字 1 作为值,4因此键类型将是这些单词的类型 (),值类型将是单位数字(Java ,Hadoop 中的 )。 剩下的就是映射和归约函数的逻辑。 对于映射函数,应分析输入分段,并将每个发出的单词的计数计为 1。 在归约函数中,接收到的每个单词都可以仅按照其频率进行输出,并在聚合与该单词一起接收到的所有 1 之后进行计算。5

以下代码片段显示 Hadoop 0.20.0 中发布的全新 Java MapReduce API 的完整 WordCount 示例代码。

讯享网

此代码片段显示程序员仅需创建两个顺序函数(映射和归约),这两个函数封装在两个(内部)类中,在此示例中为 和 内部类。 内部类扩展 类并覆盖其 函数。 类将给定的输入键值对类型( 和 )映射到一组输出键值对类型( 和 )。 在 类中定义的输出键值对类型应始终与 类中的输入键值对类型匹配。 内部类扩展 类并覆盖其 函数。 除了定义输入键值对类型外, 类还定义归约任务将用于生成最终结果的输出键值对类型( 和 )。


3 请注意,这是键与值之间的制表符空格(不是单个空格)。

4 每个单词 W 的数字 1 是输出,表示 W 已出现在输入分段中。 这样,接收 W 的归约任务只需为 W 递增其计数。

5 每个归约任务可接收来自多个映射任务的多个单词,但每个单词只显示在一个归约任务中。


  1. J. Dean and S. Ghemawat (Dec. 2004). MapReduce:Simplified Data Processing on Large Clusters OSDI
  2. M. Zaharia, A. Konwinski, A. Joseph, R. Katz, and I. Stoica (2008). 提高异类环境中的 MapReduce 性能,OSDI
  3. T. White (2011). Hadoop:权威指南,O’Reilly 第 2 版

小讯
上一篇 2025-04-16 11:51
下一篇 2025-04-16 14:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/187360.html