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

本文讨论在使用Hadoop处理大量数据时遇到的Counter数量限制问题,包括尝试调整配置文件、直接设置参数、利用博客提供的解决方案等方法,最终通过减少Counter数量或采用临时方法成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

结果: 失败


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

con.set("mapreduce.job.counters.limit", "200");
....
....
logger.info(con.get("mapreduce.job.counters.limit"));

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

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


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

<property>
          <name>mapreduce.job.counters.limit</name>
          <value>120</value>
          <description>Limit on the number of counters allowed per job. </description>
</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

详细见URL: http://markmail.org/message/gljicmpbklazzsb6 


不知道最新的Hadoop版本(我们现在用的版本是2.4.0-mdh2.0.5)是否Fix了这个BUG,如果有人知道消息请给我留言,谢谢.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值