我是hadoop领域的新手,正在努力完成一个简单的任务。
有人能告诉我如何仅使用Map duce代码技术来获取字数示例的前n个值吗?
我不想为这个简单的任务使用任何hadoop命令。
你有两个明显的选择:
有两个MapReduce作业:
将字数的输出写入 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方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!