hadoop - 就字数统计示例而言,map reduce 并行处理如何在 hadoop 中真正发挥作用?

标签 hadoop mapreduce hdfs

我正在使用字数统计示例学习 hadoop map reduce,请参阅附图:enter image description here

我的问题是关于并行处理实际上是如何发生的,我的理解/问题如下,如果我错了请纠正我:

  1. 拆分步骤:这分配了映射器的数量,这里两个数据集转到两个不同的处理器 [p1,p2],所以两个映射器?这种 split 是由第一个处理器 P 完成的。
  2. 映射步骤:这些处理器 [p1,p2] 中的每一个现在通过在键上应用所需的函数 f() 来将数据分成键值对,产生值 v 给 [k1,v1], [k2,v2].
  3. 合并步骤 1:在每个处理器中,值按键分组,给出 [k1,[v1,v2,v3]]。
  4. 合并步骤 2:现在 p1,p2 将输出返回给 P,P 合并两个结果键值对。这发生在 P。
  5. 排序步骤:现在这里 P 将对所有结果进行排序。
  6. Reduce Step:这里 P 将在每个单独的键 [k1,[v1,v2,v3]] 上应用 f() 以给出 [k1,V]

让我知道这种理解是否正确,我觉得我在很多方面都完全不对劲?

最佳答案

让我稍微详细地解释一下每个步骤,这样您会更清楚,我尽量让它们尽可能简短,但我建议您阅读官方文档 (https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html) 以获得整个过程感觉不错

  1. Split Step:如果你现在已经制作了一些程序,你一定已经观察到我们有时会设置多个 reducer 但我们从不设置多个 mapper,因为 mapper 的数量取决于输入 split 。简而言之,任何作业中的映射器数量与输入拆分的数量成正比。所以现在问题出现了, split 是如何发生的。这实际上取决于许多因素,例如设置输入分割大小的 mapred.max.split.size,还有许多其他方法,但事实上我们可以控制输入分割的大小。

  2. 映射步骤:如果 2 个处理器是指 2 个 JVM(2 个容器)或 2 个不同的节点或 2 个映射器,那么您的直觉是错误的容器,或者说节点与拆分任何输入文件无关这是工作hdfs 在不同节点上划分和分发文件,然后资源管理器负责在具有输入拆分的同一节点上启动映射器任务,如果可能的话,一旦启动映射任务,您就可以创建键和值对根据您在映射器中的逻辑。这里要记住的一件事是,一个映射器只能处理一个输入拆分。

您在第 3 步、第 4 步和第 5 步上有点混淆了。我试图通过引用处理这些步骤的实际类进行描述来解释这些步骤。

  1. Partitioner 类:此类根据reducer 的数量划分mapper 任务的输出。如果你有超过 1 个 reducer ,这个类很有用,否则它不会影响你的输出。此类包含一个名为 getPartition 的方法,该方法决定映射器输出将转到哪个缩减器(如果您有多个缩减器)为映射器输出中存在的每个键调用此方法。您可以覆盖此类和随后的此方法以根据您的要求对其进行自定义。所以在你的例子中,因为有一个 reducer ,所以它将把两个映射器的输出合并到一个文件中。如果有更多的 reducer 并且会创建相同数量的中间文件。

  2. WritableComparator 类:映射输出的排序由此类完成。此排序是根据键完成的。像分区程序类一样,您可以覆盖它。在您的示例中,如果键是颜色名称,那么它将像这样对它们进行排序(这里我们正在考虑如果您不覆盖此类,那么它将使用默认方法对按字母顺序排列的文本进行排序):


    Black,1
    Black,1
    Black,1
    Blue,1
    Blue,1
    .
    .
    and so on 

现在,同一个类也用于根据您的键对您的值进行分组,以便在 reducer 中您可以在 Ex -> 的情况下对它们使用 iterable

Black -> {1,1,1}   
Blue -> {1,1,1,1,1,1}
Green -> {1,1,1,1,1}
.
.
and so on
  1. Reducer -> 此步骤将根据您的 reducer 类中定义的逻辑简单地减少您的 map 。你的想法适合这门课。

现在还有一些其他影响也会影响 mapper 和 reducer 之间以及 mapper 之前的中间步骤,但这些与您想知道的内容没有太大关系。

希望这能解决您的疑问。

关于hadoop - 就字数统计示例而言,map reduce 并行处理如何在 hadoop 中真正发挥作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42347045/

相关文章:

hadoop - 无法在HDFS/config/advanced/custom-core-site中添加新属性

hdfs - 为什么 Impala 花费大量时间打开 HDFS 文件(TotalRawHdfsOpenFileTime)?

hadoop - Spark 处理小文件(合并与 CombineFileInputFormat)

hadoop - 关于不调用基础MapReduce作业的Hive命令

hadoop - 索引谷歌数据的 Mapreduce

file - hadoop中的序列文件是什么?

hadoop - Oozie shell 操作 - 运行 sqoop 命令并需要日志记录详细信息

scala - 在 IntelliJ Idea 中运行 Apache Spark 示例应用程序

java - 即使已实现,也会收到工具界面警告

scala - Spark : java. io.FileNotFoundException:copyMerge 中不存在文件