当前位置: 首页 > 知识库问答 >
问题:

Hadoop 如何在多个数据节点之间分发数据和映射减少任务

隆谦
2023-03-14

我是hadoop的新手,我阅读了许多hadoop mapreduce和hdfs的页面,但仍然无法明确一个概念。

也许这个问题是愚蠢的或不寻常的,如果真是如此的话。我的问题是,假设我在hadoop中为一个大小为1GB的文件创建了一个单词计数程序,其中map函数将把每一行作为输入,输出作为键值对,reduce函数将输入作为键值,并简单地迭代列表,计算单词进入该文件的总次数。

现在我的问题是,因为这个文件存储在多个数据节点的块中,地图缩减在每个数据节点上并行执行。假设我的文件存储在两个数据节点上,第一个数据节点上的文件包含单词“hadoop”5次,第二个数据节点上的文件包含单词“hadoop”7times.So基本上整个地图缩减过程的输出将是:

hadoop:7

hadoop:5

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

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

共有2个答案

岳时铭
2023-03-14

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

周学义
2023-03-14

您可能已经阅读了许多Hadoop Mapreduce和HDFS的页面,但是您似乎错过了在地图之后和Redize之前包含阶段的页面,这被称为随机播放和排序。

基本上,它所做的是将所有映射器中的数据进行混洗,并将具有相同键的行按排序顺序发送到相同的还原器。因此,在您的例子中,hadoop 7hadoop 5,都将使用相同的缩减器,将其缩减为hadoop 12(而不是13!)

您可以在 Web 上轻松获取有关随机播放和排序的更多信息。也有这样的问题,你可以阅读。

 类似资料:
  • 问题内容: 我刚刚开始使用hadoop / hbase MapReduce工作(使用cloudera),但我有以下问题: 假设我们有一个带有主要和静态viariable的java类。该类定义与Mapper和Reducer任务相对应的内部类。在启动作业之前,主程序初始化静态变量。在Mapper类中读取此变量。然后使用群集上的“ hadoop jar”启动该类。 我的问题:我看不到其他节点上的Map和

  • 我在一个大约50个节点的集群上运行2.2.0上的hadoop,我的工作是64个map任务和20个reduce任务。map在大约30分钟内完成,然后所有reduce任务都在运行,但是我发现一个奇怪的日志是这样的:

  • 我试图从dfb中减去dfa,其中列映射基于第三个映射数据帧。在本例中,应从x1中减去B,从x2中减去A。 这可以通过循环和其他一些肮脏的方法来实现,但我想知道是否有更简洁的方法来实现这一点。 数据帧a 数据帧b 数据帧c 所需结果

  • 我在1.1GB文件上运行Hadoop MapReduce多次,使用不同数量的映射器和化简器(例如,1个映射器和1个化简器,1个映射器和2个化简器,1个映射器和4个化简器,...) Hadoop安装在具有超线程的四核机器上。 以下是按最短执行时间排序的前 5 个结果: 1 - 8 个化简器和 1 - 8 个映射器的结果:列 = 映射器行数 = 化简器数 (1)当我有8个映射器时,程序运行速度似乎稍快

  • 我正在经历Spark节点和HBase节点之间的高延迟。我目前的资源要求我在不同的服务器上运行HBase和Spark。 谢谢

  • 我正在做一些类似于标准MapReduce示例的事情——字数统计,但是有所改变,我只希望得到前N个结果。 假设我在HDFS有一个非常大的文本数据集。有大量的例子展示了如何构建一个Hadoop MapReduce作业,为你提供文本中每个单词的字数。例如,如果我的语料库是: “这是对测试数据的检验,也是检验这一点的好方法” 来自标准 MapReduce 字数统计作业的结果集为: 测试:3、a:2、thi