한땀한땀 정성들인 코딩

[맵리듀스]join하기 본문

빅데이터

[맵리듀스]join하기

romance penguin 2017. 1. 9. 02:15
반응형

고급맵리듀스중 하나


join기법인데

서로 다른( 포멧이 달라도 되고 ) input파일 두개를 받아서 key를 기준으로 value를 합치는 연산


맵퍼가 두개가 존재하고 리듀스가 두 파일을 key로 묶어준다고 보면된다.


여기까지가 hadoop hdfs상에서 쓰는 거고


hbase에서는

Scan scan1 = new Scan();
scan1.setStartRow(start1);
scan1.setStopRow(end1);
Scan scan2 = new Scan();
scan2.setStartRow(start2);
scan2.setStopRow(end2);
MultiTableInputCollection mtic = new MultiTableInputCollection();
mtic.Add(tableName1, scan1);
mtic.Add(tableName2, scan2);
TableMapReduceUtil.initTableMapperJob(mtic, TestTableMapper.class, Text.class, IntWritable.class, job1);

scan객체를 활용한다.

MultiTableInputCollection 객체

startrow ~ endrow는 별로 신경쓸 필요 없다


join방식에 두가지를 생각했는데

-input포맷의 경우

1. csvfile + hbaseData

2. hbaseData + hbaseData

후자의 경우 hbase는 테이블에 data를 삽입할때 리소스를 많이 잡아먹으므로 피한다.

**후자는 위방법을 쓰면 된다. hbase RDBMS가 아니라는것을 생각하면 join자체는 피하는것이 상책인거 같다.


1.csvfile + hbaseData

맵리듀스과정을 1번으로 축소하면 좋겠으나 .. 좋은 방법이 떠오르질 않는다.


1) 맵퍼로 hbase에서 key : 출발지,도착지 value : 1 맵핑하고

2) 리듀서 count(집계) 한다.

3) 임시파일 hdfs로 format( 시퀀스형식 ) output

4) 맵퍼로 두 file 조인

5) 리듀서로 hbase내에 결과 저장




반응형

'빅데이터' 카테고리의 다른 글

[spark]스파크가 왜 좋냐?  (0) 2017.01.16
[맵리듀스]row count 테이블 로우갯수  (0) 2017.01.13
항공데이터 hbase상 맵리듀스 완료!!!  (0) 2017.01.06
[HBase]shell명령어  (0) 2017.01.06
[맵리듀스] map클래스  (0) 2017.01.05