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

在hadoop流mapduce中使用组合器(使用mrjob)

冷宏茂
2023-03-14

当我学习mapreduce时,其中一个关键组件是组合器。这是映射器和还原器之间的一个步骤,基本上在映射阶段结束时运行还原器,以减少映射器输出的数据行数。随着我需要处理的数据的大小增加(以万亿字节的规模),减少步骤变得非常慢。我和我的一个朋友谈过,他说这也是他的经历,他没有使用组合器,而是使用哈希函数来划分他的reduce键,这减少了reduce步骤中每个键的值的数量。我试过了,效果很好。有没有其他人有过组合器步骤伸缩性不好的经验,为什么我找不到关于这个问题以及解决方法的任何文档?如果有办法使组合器步进缩放,我宁愿不使用解决方法。

[编辑]这里有一个我朋友建议的变通方法的例子,它比合并器快得多:

不是输出< code>word,count

映射器输出<code>(字、哈希(时间戳)%1024)、计数

然后有2个减少步骤来合并映射器的结果。

共有1个答案

汝彭薄
2023-03-14

我认为这些是不同的事情,没有变通办法。

>

  • 仅当所讨论的计算允许部分归约时,即从键的部分元组发出中间结果,并使用化简步骤组合中间结果时,组合器才适用。使用组合器可以轻松求和或平均值,而其他算法则不然。

    Reduce步骤的性能(可伸缩性)很大程度上取决于键分区函数将唯一映射输出键映射到reducer插槽的效果。一个好的分区员应该为每个减速机工人分配相同的工作负载。

    随着我需要处理的数据量的增加(在数TB的规模上),reduce步骤变得极其缓慢

    MR 范式没有任何固有的内容使“简化”步骤无法缩放。但是,您的算法可能无法很好地映射到地图还原。如果您能提供更多关于您具体在做什么的信息,我们可以帮助您弄清楚。

    他使用散列函数对他的减少键进行分区,该函数减少了减少步骤中每个键的值数量

    这对我来说没有意义。在键上使用哈希函数只能增加每个桶的值数量。

  •  类似资料:
    • 我对Hadoop和MapReduce完全陌生,正在努力完成它。我正在尝试用python开发一个mapduce应用程序,在这个应用程序中,我使用来自2. CSV文件的数据。我只是在mapper中读取这两个文件,然后将文件中的键值对打印到sys.stdout 当我在一台机器上使用它时,该程序运行正常,但是使用Hadoop流式处理时,我遇到了错误。我认为我在Hadoop上的映射器中读取文件时犯了一些错误

    • 我在stackoverflow上看到过一种使用zip文件存储引用的python模块来执行hadoop流作业的技术。 在执行作业的映射阶段,我遇到了一些错误。我相当确定它与zip'd模块加载有关。 为了调试脚本,我使用命令行管道通过sys.stdin/sys.stdout运行我的数据集,进入我的映射器和缩减器,如下所示: 输入数据文件的头。txt|./映射器。py |排序-k1,1|./reduce

    • 现在我正在编写一个 Java 程序,使用哈道普映射还原将输出写入 HBase。问题是关于合并器类的。因为现在我的 reduce 类扩展了 TableReducer,而不是化简器。那么我的合并器类呢,它应该也扩展表还原器,还是仍然扩展化简器?

    • 它考虑第一个KV对并给出相同的输出...!!??因为我只有一个价值。为什么它同时考虑钥匙和制造 既然我们考虑的是一次一对千伏?我知道这是一个错误的假设;请有人纠正我这一点

    • 我试图使用java中的hadoop mapreduce编程计算文件中出现的<b>特定(输入、输出、单词)。但我无法找到一种方法将单词传递给map函数。我尝试了以下方法,但没有成功:-在mapper类中创建了一个静态字符串变量,并将第三个参数(即要搜索的单词)的值分配给它。然后尝试在map函数中使用这个静态变量。但在map函数中,静态变量值为空。我无法在map函数中获得第三个arment的值。 有办

    • Ceph 文件系统可作为 Hadoop 文件系统( HDFS )的落地式替代品,本章描述了 Ceph 用于 Hadoop 存储的安装和配置过程。 依赖关系 CephFS 的 Java 接口 Hadoop 的 CephFS 插件 Important 当前要求 Hadoop 1.1.x 稳定版系列。 安装 在 CephFS 上使用 Hadoop 有三个必要条件。首先,必须有一个运行的 Ceph 。建设