파이문

[Hadoop] TableReducer 로 테이블 여러개 사용하기 본문

TIL

[Hadoop] TableReducer 로 테이블 여러개 사용하기

민Z 2020. 11. 20. 17:59

HBase 를 대상으로 MR 어플리케이션을 개발할 때 TableMapper / TableReducer 를 사용할 때가 있다.

이 때 TableReducer 를 사용해서 데이터를 써야 하는데, 데이터를 각각 다른 테이블에 저장해야 했다.

 

TableMapReduceUtil 를 사용하면 하나의 테이블에 쓰는 것 밖에 안된다.

 

그래서 서로 다른 테이블에 데이터를 넣으려면 (TableReducer 를 상속받은) Reducer에서 아래 처럼 해 주고

Put put1 = createPut(...);
context.write(new ImmutableBytesWritable(Bytes.toBytes("table1")), put1);

Put put2 = createPut(...);
context.write(new ImmutableBytesWritable(Bytes.toBytes("table2")), put2);

Job 생성할 때 TableMapReduceUtil 대신 그냥 Reducer 로 등록해준다.

job.setReducerClass(SampleReducer.class); // Reducer 명은 예제임
job.setOutputFormatClass(MultiTableOutputFormat.class);

 

hbase reference guide 에서는 예제가 없어서 살짝 삽질 했다는 슬픈 이야기가..ㅠㅠ

hbase.apache.org/book.html#mapreduce.example.readwrite.multi

Comments