1. 아래와 같이 전역 변수를 사용한면, 너무나 당연한 이야기겠지만
Map 과 Reduce class 가 inner class 일 때, Map, Reduce 내부에서도 사용이 가능하다.
class WordCount{ 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! |
'Hadoop' 카테고리의 다른 글
[Hadoop] namenode format 방법 (0) | 2019.05.16 |
---|---|
[Hadoop] Service Port Number 모음 링크 (0) | 2019.05.14 |
[Hadoop] 하둡과 MongoDB 연동하는 코드 (0) | 2019.03.21 |
[Hadoop] mongo-hadoop connector 에서 MongoDB 에 쿼리 보내기 (0) | 2019.02.15 |
[Hadoop] MapReduce 코드에서 HDFS 데이터 읽는 방법 (0) | 2019.02.15 |