한땀한땀 정성들인 코딩
[맵리듀스]join하기 본문
고급맵리듀스중 하나
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 |