hadoop-common-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alejandro Abdelnur (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HADOOP-1915) adding counters methods using String (as opposed to Enum)
Date Wed, 19 Sep 2007 16:52:15 GMT

    [ 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.

View raw message