2012-08-27 40 views
6

Hadoop計數器大小有限制。默認爲120。我嘗試使用配置「mapreduce.job.counters.limit」來改變它,但它不起作用。我見過源代碼。這就像在類「org.apache.hadoop.mapred.Counters」中的JobConf實例是私有的。 以前有人看過嗎?你的解決方案是什麼? THX :)hadoop中有120多個計數器

+0

您運行的是什麼版本的Hadoop? – HypnoticSheep

+0

這是0.20。你之前看到過嗎? –

+0

我還沒有遇到同樣的問題(主要是因爲我沒有使用計數器),但我使用1.0.3和JobConf的東西是不同的。試試下面的Lorand解決方案,看起來好像會起作用。 – HypnoticSheep

回答

5

您可以覆蓋mapred-site.xml該財產在你的JT,TT,客戶端節點,但要確保這將是一個全系統的修改:

<configuration> 
    ... 
    <property> 
    <name>mapreduce.job.counters.limit</name> 
    <value>500</value> 
    </property> 
    ... 
</configuration> 

然後重新啓動映射精簡您的服務簇。

+0

我試過你的解決方案。有用。謝謝 :)。我只是想知道是否有辦法動態地解決這個問題。 –

+0

單一工作沒有辦法做到這一點嗎? – javamonkey79

-1

我們可以將限制定製爲僅用於特定作業的命令行選項,而不是在mapred-site.xml中進行更改。

-Dmapreduce.job.counters.limit=x 
-Dmapreduce.job.counters.groups.max=y 

注:xy是基於您的環境/需求自定義值。

4

在Hadoop中2,此配置參數被稱爲

mapreduce.job.counters.max 

在命令行或在您的配置對象設置是不夠的,雖然。您需要調用靜態方法

org.apache.hadoop.mapreduce.counters.Limits.init()

在您的映射或減速的設置()方法來獲得生效的設置。

使用2.6.0和2.7.1進行測試。

0

對位是通過配置文件設置,而低於第生效

mapreduce.job.counters.max=1000 
mapreduce.job.counters.groups.max=500 
mapreduce.job.counters.group.name.max=1000 
mapreduce.job.counters.counter.name.max=500 
0

萬一有人加入這個其他面臨我們做了同樣的問題:從MRJob增加計數器。

爲了提高計數器的數量,增加emr_configurationsmrjob.conf(或者將它傳遞給MRJob作爲一個配置參數):

runners: 
    emr: 
    emr_configurations: 
     - Classification: mapred-site 
     Properties: 
      mapreduce.job.counters.max: 1024 
      mapreduce.job.counters.counter.name.max: 256 
      mapreduce.job.counters.groups.max: 256 
      mapreduce.job.counters.group.name.max: 256