1. 아래와 같이 전역 변수를 사용한면, 너무나 당연한 이야기겠지만

 Map 과 Reduce class 가 inner class 일 때, Map, Reduce 내부에서도 사용이 가능하다.

class WordCount{
  private static final String TEMP = "temp";
  main(){}

  class Map(){

    context.write(TEMP, ...);

  }

  class Reduce(){

    context.write(TEMP, ...);

  }

}

 

 

 

 

 

2. 만약 main의 args 등으로 받은 값을 Map 과 Reduce 에 넘겨줘야 한다면,

 Configuration 을 사용하여 넘겨줄 수 있다. 아래 예시 코드.

class WordCount{

  main(){

    Configuration conf = new Configuration();

    conf.set("name", "eyeballs"); //value 값은 String

    ....

  }

  class Map{

    map(Object key, Object value, Context context){

      Configuration conf = context.getConfiguration();

      String name = conf.get("name");

      ....

    }

  }

}

 설명 : Configuration 인스턴스에 set 으로 key 와 value 값을 준 후,

 map 이나 reduce method 내부에서 context.getConfiguration() 을 이용해 conf 인스턴스를 받는다.

 그 인스턴스의 get method 에 key를 넣으면 위의 set에서 넣은 value 값이 튀어나온다.

 

 value 가 String인 set 을 사용하였는데 String 말고

 boolean 값이 들어가는 setBoolean,

 enum 값이 들어가는 setEnum,

 pattern 값이 들어가는 setPattern... 등 다양한 타입을 value 로 사용 가능하다.

 어떤 것들이 있는지 보고 싶다면 여기 참고.

 

 

 

 

 

 

3. Map이나 Reduce 클래스 내부의 전역변수는 값이 고정된다.

 아래 Map 코드를 예로 들어 설명한다.

class Map{

  private String name = "eyeballs";

  void map(){

    context.write(name, ...);

  }

}

코드에서처럼 Map class 내의 전역변수 name 은 map 메소드 내부에서 사용 될 때도 값이 fix 되어있다.

하나의 work node 에서 map 작업을 할 때 계속해서 불리는 것은

Map 전체 클래스가 아니라, map() 이 하나의 method 만 계속 불리는 것이다.

 

만약 map() method 내부에서 전역변수를 바꿨다면? 바뀐 값 그대로 유지된다.

 

물론 slave1의 Map 전역변수를 바뀌었다고 해서, slave2의 Map 의 전역변수가 바뀌진 않을 것이다.

 

 

 

 

 

4. Reduce 에서 값이 저장될 때는 key가 나오고 tab 이 중간에 들어가고 그 뒤에 value 값이 나온다.

무슨 말이냐면, 만약 reduce() method 에서 key 값을 "Life", value 값을 "is awesome!" 이라고 출력한다고 하자.

reduce(){

  context.write(new Text("Life"), new Text("is awesome!"));

}

그러면 출력되어져서 나오는 값은 아래와 같다.

Life          is awesome!

tab 으로 나눠지는 게 싫다면, NullWritable 이라는 것을 사용하면 된다.

import org.apache.hadoop.io.NullWritable;

reduce(){

  context.write(NullWritable.get(), new Text("Life is awesome!"));

}

Life is awesome!

 

+ Recent posts