检索Hadoop中reduce输入组的数量

检索Hadoop中reduce输入组的数量,hadoop,mapreduce,Hadoop,Mapreduce,我有一个家庭作业,其中我必须检索某个文档中不同单词的总数 这与Hadoop提供的WordCount示例非常相似。但现在我只需要文档中不同单词的总数。在控制台输出中,reduce输入组的数量对应于不同单词的总数 有没有一种简单的方法可以在不减少数据的情况下检索这个数字。或者Map/Reduce不是解决这个问题的方法。链接也可以是一种解决方案,但由于答案已经在作业的控制台输出中提供,我想知道是否有一种简单的方法可以检索reduce输入组的数量,而不做不需要的事情 您好, Hadoop新手在某种程度上

我有一个家庭作业,其中我必须检索某个文档中不同单词的总数

这与Hadoop提供的WordCount示例非常相似。但现在我只需要文档中不同单词的总数。在控制台输出中,reduce输入组的数量对应于不同单词的总数

有没有一种简单的方法可以在不减少数据的情况下检索这个数字。或者Map/Reduce不是解决这个问题的方法。链接也可以是一种解决方案,但由于答案已经在作业的控制台输出中提供,我想知道是否有一种简单的方法可以检索reduce输入组的数量,而不做不需要的事情

您好,
Hadoop新手

在某种程度上,您希望对其进行分组,因为如果不将数据集中在一起,就无法检查其差异性


嗯,你在如何作弊方面是对的。我所说的欺骗,是指我在生产环境中如何做到这一点,仅仅因为它是多么简单,但无论如何都会让我感到肮脏

在控制台输出中,查找“Reduce input groups=”。这将告诉您减缩器收到了多少组。一个组映射到一个键,这意味着每个唯一键只表示一次

    Reduce input groups=146030
您可以制作自己的计数器来计算组数,但数字将是相同的

。。。然后使用
grep
或类似的方法将其拉出

如果要获取计数器值,还可以通过驱动程序中的API查询作业状态


你的另一个选择,这显然是缓慢的,因为它是一个额外的工作:第一阶段,做字计数;第二阶段,进行线路计数


进行行计数的一般方法是发出与键相同的伪字符串,并为每行发出1。基本上,您的map函数是单独的
context.write(dummyText,one)
。确保使用组合器并将还原器的数量设置为1。

感谢您的输入,我现在使用“还原输入组”计数器的值。这可以通过使用
Job
实例
Job.getCounters().findCounter(“org.apache.hadoop.mapred.Task$Counter”,“REDUCE\u INPUT\u GROUPS”)
的以下方法找到。Im使用Hadoop 1.0.0