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

Hadoop 映射缩减代码的前 N 个值

伯洋
2023-03-14

我是hadoop领域的新手,正在努力完成一个简单的任务。

有人能告诉我如何仅使用Map duce代码技术来获取字数示例的前n个值吗?

我不想为这个简单的任务使用任何hadoop命令。

共有1个答案

东方俊材
2023-03-14

你有两个明显的选择:

有两个MapReduce作业:

    < li>WordCount:统计所有单词(几乎与示例完全相同) < li>TopN:一个MapReduce作业,用于查找某个内容(下面是一些示例:源代码、博客文章)的前N名

将字数的输出写入 HDFS。然后,让 TopN 读取该输出。这称为作业链接,有许多方法可以解决此问题:oozie,bash脚本,从驱动程序中触发两个作业等。

您需要两个作业的原因是您正在执行两个聚合:一个是字数计数,第二个是topN。通常在MapReduce中,每个聚合都需要自己的MapReduce作业。

首先,让您的WordCount作业在数据上运行。然后,使用一些bash将顶部N拉出。

hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n20

< code>sort -n -k2 -r表示“按列#2以降序数字排序”。< code>head -n20拔得头筹。

对于WordCount来说,这是更好的选择,因为WordCount可能只输出几千或几万行,而你不需要MapReduce来完成这个任务。记住,仅仅因为你身边有hadoop并不意味着你应该用Hadoop解决你所有的问题。

一个非显而易见的版本,这是棘手的,但以上两者的混合...

写一个字数映射还原工作,但在化简器中做一些类似于我之前向您展示的TopN MapReduce工作。然后,让每个减速器仅输出来自该减速器的 TopN 结果。

所以,如果你在做Top 10,每个reducer会输出10个结果。假设你有30个归约器,你将输出300个结果。

然后,使用bash执行与选项#2相同的操作:

hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n10

这应该会更快,因为您只需对一小部分结果进行后处理。

这是我能想到的最快的方法,但可能不值得花这么大力气。

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

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

  • 我很困惑为什么会发生这种情况。我已经在这方面工作了一段时间,我只是不明白。 我的Map代码工作时,我能够在它所在的目录中验证输出。 文件中的输出如下所示: 但是为什么我不能拆分

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

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

  • 我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!