如何计算mapreduce程序中调用map函数的次数?

utugiqy6  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(416)

我必须对我的输入数据进行某些操作,并使用mapreduce程序将其写入hdfs。我的输入数据看起来像

abc  
some data  
some data  
some data  
def  
other data  
other data  
other data

以同样的方式继续,在哪里 `` , def 标题和 some data 是带制表符空间的记录。
我的任务是删除标题并将其附加到下面的记录中,如

some data abc  
some data abc  
some data abc  
other data def  
other data def  
other data def

每个标题将有50条记录。
我使用的是默认的记录阅读器,所以它一次读取每一行
现在我的问题是如何知道map函数已经被调用了n次?我有柜台知道吗?这样我就可以用这个计数器将头附加到字符串

if (counter % 50 ==0 )
   *some code*

或者静态变量是唯一的方法?

dz6r00yl

dz6r00yl1#

你可以用 member variables 算一下,到目前为止已经处理了多少。成员变量是 instance variables 并且不会在每次调用map函数时重置。可以在mapper中示例化它们 setup 方法。
显然,可以使用静态变量来保持计数器。
hdfs中的数据存储在块中,当数据被拆分为两个块时,您将如何处理。
要处理两个块之间的数据分割,可能需要 Reducers . reducer的属性是,与特定键相关的所有数据(值)总是发送到同一个(单个)reducer。减速器的输入为 key 以及 list of values 你的情况是这样的 list of data . 所以你可以很容易地根据你的要求储存它们。
优化:您可以使用相同的 Reducer 代码为 Combiner 优化数据传输。
创意:the Mapper 将发出 key 以及 value 就这样。现在当 Reducer 接收数据,即 Key, List<value> ,所有值都已由 MapReduce framework . 你只需要再次发射它们。这是您要查找的输出。

相关问题