【问题标题】:How Hadoop distribute data and mapreduce task across multiple data nodesHadoop 如何跨多个数据节点分布数据和 mapreduce 任务
【发布时间】:2018-01-21 16:53:23
【问题描述】:

我是 hadoop 新手,我阅读了很多页的 hadoop mapreduce 和 hdfs,但仍然无法弄清楚一个概念。

可能是这个问题是愚蠢或不寻常的,如果它对此感到非常抱歉。 我的问题是,假设我在 hadoop 中为大小为 1 GB 的文件创建了一个字数统计程序,其中 map 函数将每一行作为输入,输出作为键值对,reduce 函数将接受输入 作为键值对并简单地迭代列表并计算一个单词出现在该文件中的总次数。

现在我的问题是,因为这个文件存储在跨多个数据节点的块中,并且 map-reduce 在每个数据节点上并行执行。假设我的文件存储在两个数据节点上,第一个数据节点上的文件包含单词“hadoop”5次,第二个数据节点上的文件包含单词“hadoop”7次。所以基本上 整个 map reduce 过程的输出将是:

hadoop:7

hadoop:5

因为 2 个 map-reduce 函数在 2 个不同的数据节点上并行执行, 但输出应该是两个文件上“hadoop”字数的总和,即: hadoop:13

那么我将如何实现这一点,或者我在这里错过了一些概念。请帮助我严重坚持这个概念,如果我无法让你理解我想问的问题,我很抱歉。

【问题讨论】:

    标签: java hadoop mapreduce hdfs


    【解决方案1】:

    您可能阅读了许多 Hadoop Mapreduce 和 HDFS 页面,但您似乎错过了包含 Map 之后和 Reduce 之前的阶段,即所谓的 Shuffle 和 Sort。

    基本上它的作用是,它对来自所有映射器的数据进行洗牌,并将具有相同键的行以排序顺序发送到同一个减速器。因此,在您的情况下,hadoop 7hadoop 5 都将使用同一个减速器,这会将其减少到 hadoop 12(不是 13!)

    您可以在网络上轻松获取有关 Shuffle 和 Sort 的更多信息。有questions like this too可以看。

    【讨论】:

    • 好的,非常感谢你的帖子。现在我的概念已经清晰了。非常感谢
    【解决方案2】:

    我认为你完全错过了 reducer 的概念,因为这正是它的功能,reducer 输入将是一个键(在本例中为 hadoop)和与此键关联的值列表(7 和 5),所以你的reducer 程序将迭代值列表并进行求和,然后是 hadoop,13。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      相关资源
      最近更新 更多