[
https://issues.apache.org/jira/browse/HADOOP-1915?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12528818
]
Alejandro Abdelnur commented on HADOOP-1915:
--------------------------------------------
As far as I know you can not subclass Enum. An Enum 'constants' are constants,
cannot be added.
The trick I've done until now is to have an Enum class like the following:
---------------------
public enum X {
A,B,C, D, E, F;
private String name;
public String toString() {
return name;
}
private static int next = 0;
public static synchronized Enum getEnum(String name) {
X x = X.values()[next++];
x.name = name;
return x;
}
}
---------------------
Everytime I need a new counter I invoke getEnum($NAME$).
By doing this I can set to the Enum the dynamic name and then from the running
job I just get it by the dynamic name.
The problem i see now is the ordinal. I was not aware until your response that
it is being use for collection instead the string value of the counter. as the
counters are not declared up front but added dynamically it can be the case
that in different tasks they are used in different order.
So, to be able to use String the ordinal would have to be removed from the
serialized counter. Or, when aggregating counters from different task the names
should be used instead the ordinal.
> adding counters methods using String (as opposed to Enum)
> ---------------------------------------------------------
>
> Key: HADOOP-1915
> URL: https://issues.apache.org/jira/browse/HADOOP-1915
> Project: Hadoop
> Issue Type: New Feature
> Environment: all
> Reporter: Alejandro Abdelnur
> Priority: Minor
> Fix For: 0.15.0
>
>
> Currently to use the counters from within Map/Reduce code Enums have to be
> used, the Enum class defines the group and the Enum itself the counter.
> Internally they are converted to Strings (the class name and the enum
> toString) and you can retrieve them as strings from the client API.
> Using dynamic counters (driven by configuration of the map/reduce) is not
> easy with the counters Enum based API. For example, currently I have an Enum
> class with 50 enums and we have to map the cardinality to the counter name on
> the client. This is cumbersome.
> This could be easily improve by adding a String based counter method
> increment(String group, String counter, long count) to allow use of the
> counters without Enums.
> Internally this method already exists, so the changes are minimal.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.