2. 이미지 출처: siliconweek, <http://www.siliconweek.es/noticias/apache-sqoop-se-convierte-en-proyecto-prioritario-para-big-data-21558>
하둡과 RDBMS 사이에서 데이터를 전송하기 위한 Tool
Import Export
13년 10월 7일 월요일
6. 성능을 위한 Map Task의 분할
임포트 성능은 쿼리를 다수의 노드에 분산시켜서 얻을 수 있음
Sqoop은 테이블에 대한 메타 데이터를 사용하여 분할을 결정
(DataDrivenDBInputFormat)
“-m 1” 옵션을 사용하면 1개의 맵 태스크만 실행 됨.
Ex) 주키의 최소/최대 값 이용
0 ~ 99,999 값을 가지는 ID 컬럼이고, 5개의 맵태스크가 실행될 경우
각각의 맵 태스크는 아래와 같은 쿼리를 실행
SELECT * FROM widgets WHERE id >=0 AND id < 20000;
SELECT * FROM widgets WHERE id >=20000 AND id < 40000;
:
13년 10월 7일 월요일
7. ETC.
• 임포트 제어하기
WHERE 절의 추가하여 전체 테이블이 아닌 일부만 임포트 가능
• 임포트와 일관성
데이터 임포트시, 소스 데이터의 일관된 스냅샷에 접근하는 것이 중요. 이를 위해 임포
트 기간중 테이블을 수정하는 프로세스를 실행을 막는 것이 필요
• 직접 모드 임포트
직접 모드를 사용하여 임포트 성능을 향상 시킬수 있음. 이러한 직접 모드는 데이터
베이스에서 지원하는 툴을 사용(ex: mysqldump ...)
13년 10월 7일 월요일
9. Export Flow
1. JDBC를 이용해서 테이블을 검사
2. 레코드 컨테이너 클래스 생성
3. 맵리듀스 잡 실행
• INSET 문을 만들어서 대상 테이블에 다중 레코드를 추가
13년 10월 7일 월요일
10. ETC.
• 익스포트와 트랜잭션
프로세스의 병렬성으로 인하여 익스포트는 하나의 단일 동작으로 제어되지 않음.
(하나의 태스트 결과는 다른 태스크가 끝나기 전에 참조될 수 있음)
이를 위해 먼저 임시 테이블에 익스포트 후, 잡이 종료되는 시점에 단일 트랜잭션으로
목표 테이블로 옮김 (staging-table 옵션)
• 직접 모드 익스포트
직접 모드를 사용하여 익스 성능을 향상 시킬수 있음. 이러한 직접 모드는 데이터 베
이스에서 지원하는 툴을 사용(ex: mysqlimport ...)
13년 10월 7일 월요일
11. References
• Tom White (2013). 하둡 완벽가이드. (심탁길, 김현우, 옮김). 서울: 한빛미디어. (원서출
판 2012)
13년 10월 7일 월요일