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

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