Hadoop Map Reduce 限制counter的默认数量120

最近用Hadoop统计将近一亿行的数据,由于每一行的列再加上Overall的统计 counter数量超过了120,故在Hadoop的运行过程中,抛出如下异常:

  1. org.apache.hadoop.mapreduce.counters.LimitExceededException: Too many counters: 121 max=120  
由于无法修改Hadoop的配置(因为很多人在用),解决这个异常,我尝试了如下方法进行解决:

1. 在conf配置文件job-local.xml中增加修改Configuration的内容

  1. <property>  
  2.     <name>mapreduce.job.counters.limit</name>  
  3.     <value>200</value>  
  4. </property>  
      运行的时候加上这个参数: *********** -conf job-local.xml ,运行后还是抛上面的LimitExceededException异常,但是在程序中输出con.get("mapreduce.job.counters.limit")的结果已经由120 变为了 200, 说明参数已经设置到con中,但是并没有起作用.

结果: 失败


2. 在程序中直接设置mapreduce.job.counters.limit

  1. con.set("mapreduce.job.counters.limit""200");  
  2. ....  
  3. ....  
  4. logger.info(con.get("mapreduce.job.counters.limit"));  

结果输出已经是200了,但是运行后还是抛出上面的LimitExceededException异常

结果: 失败, 方法 1 和方法 2 的设置过程和结果都是一样的,但是并没有起作用


3. 在Hadoop的配置文件mapred-default.xml 如下内容, 详细见博客: http://blog.csdn.net/xin_jmail/article/details/24086919 , 但是前面说了因为很多项目在用Hadoop机群,不可能因为我的原因就修改整个Hadoop机群的配置

  1. <property>  
  2.           <name>mapreduce.job.counters.limit</name>  
  3.           <value>120</value>  
  4.           <description>Limit on the number of counters allowed per job. </description>  
  5. </property>  
结果: 伪失败


4. 修改程序,或者减少counter(临时方法,最终满足不了需求), 或者讲mapper的结果放到文件中,然后reduce进行统计并读取文件,请查看我的另一篇博文《Hadoop Map Reduce的Counter数量超过默认值120的解决方案

结果: 可实现


知识点:

1. mapreduce.job.counters.max已经取代了mapreduce.job.counters.limit,但是考虑兼容性, 两者都可以用,代表的是一个数值

2. 在job level是无法修改mapreduce.job.counters.limit(或mapreduce.job.counters.max)的值的,这应该是个BUG, hadoop的mail list有人提过,但Resolution状态是Won't Fix,原因是 I'm marking this JIRA as won't fix. We can consider re-opening.it if you propose a compelling use case

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章