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



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

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

并以同样的方式继续,其中abc, def是头,some data是带有制表符空间的记录。

我的任务是消除标题并将其附加到下面的记录,如

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

每个标头将有50条记录。

我使用默认的记录读取器,因此它一次读取每行

现在我的问题是我怎么知道map函数已经被调用了n次?我有办法知道吗?这样我就可以使用计数器将header附加到字符串

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

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

您可以使用member variables来保持计数,到目前为止已经处理了多少。成员变量是instance variables,不会在每次map函数被调用时被重置。您可以在mapper setup方法中实例化它们。

显然,可以使用静态变量来保存计数器。

HDFS中的数据是以块的形式存储的,当数据被分成两个块时,你将如何处理

要处理两个块之间的数据分割,可能需要Reducers。reducer的属性是,与特定键相关的所有数据(值)总是发送到相同的(单个)reducer。减速机的输入是keylist of values,在您的情况下是list of data。因此,您可以很容易地根据您的需要存储它们。

优化:您可以使用与Combiner相同的Reducer代码来优化数据传输。

Idea: Mapper将发出keyvalue。现在,当Reducer接收到Key, List<value>的数据时,所有的值已经由MapReduce framework组合。你只需要再次释放它们。

相关内容

  • 没有找到相关文章

最新更新