일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 주식분석
- 코딩더매트릭스
- 딥러닝
- C언어
- scrapy
- collections
- Sort
- GRU
- 그래프이론
- 텐서플로
- 하이브
- codingthematrix
- 하둡2
- hadoop2
- tensorflow
- HelloWorld
- NumPy
- LSTM
- python
- effective python
- yarn
- 선형대수
- recursion
- C
- 알고리즘
- RNN
- Java
- graph
- 파이썬
- hive
- Today
- Total
EXCELSIOR
아파치 스쿱(Apache Sqoop) 본문
스쿱(sqoop)은 관계형 데이터베이스와 하둡 사이에서 데이터 이관을 지원하는 툴이다. 스쿱을 이용하면 관계형 데이터베이스의 데이터를 HDFS, 하이브, Hbase에 임포트(import)하거나, 반대로 관계형 DB로 익스포트(export)할 수 있다.
스쿱은 클라우데라에서 개발했으며, 현재 아파치 오픈소스 프로젝트로 공개되어 있다.
1. 스쿱 아키텍처
스쿱은 관계형 DB를 읽고 쓸 수 있는 커넥터라는 개념을 사용한다. 커넥터는 각 DB별로 구현돼 있으며, JDBC 드라이버를 이용해 데이터베이스 접속 및 쿼리 실행을 요청한다.
1) 데이터 임포트 동작 방식
- 클라이언트가 스쿱에 임포트를 요청. 클라이언트는 데이터베이스 접속 정보, 임포트 대상 테이블, 임포트 질의, 실행할 맵 태스크 개수등을 설정
- 스쿱은 데이터베이스에서 해당 테이블의 메타데이터를 조회해 ORM(Object Relational Mapping)클래스를 생성. ORM클래스에는 익스포트 대상 테이블의 컬럼을 자바 변수로 매핕하고, 맵리듀스 잡 실행에 필요한 직렬화 메소드가 생성
- 스쿱은 ORM클래스가 정상적으로 생성되면 맵리듀스 잡 실행을 요청. 스쿱은 맵 태스크의 출력 결과를 임포트에 사용하기 때문에 리듀스 태스크는 실행되지 않는다.
- 맵 태스크는 데이터베이스에 JDBC로 접속한 후 SELECT 쿼리를 실행. 이때 쿼리문은 사용자가 직접 설정한 쿼리일 수도 있고, 사용자가 테이블만 설정했을 경우에는 ORM 클래스를 이용해 쿼리를 설정.
스쿱은 대상 테이블의 Primary key의 최소값과 최대값을 조회한 후 데이터가 균등하게 분포되도록 쿼리문을 수정한다. - 맵 태스크는 쿼리문을 실행한 결과를 HDFS에 저장한다. 전체 맵 태스크가 종료되면 스쿱은 클라이언트에게 작업이 종료됐다고 알려준다.
- 사용자가 설정한 하이브 테이블을 생성한다.
- 맵 태스크에 저장된 결과를 하이브 테이블의 데이터 경로로 로딩한다.
클라이언트는 스쿱에 익스포트를 요청한다.
스쿱은 데이터베이스에서 메타데이터를 조회한 후 맵리듀스 잡에서 사용할 ORM클래스를 생성한다.
스쿱은 데이터베이스의 중간 테이블의 데이터를 모두 삭제한 후 맵리듀스 잡을 실행한다.
맵 태스크는 HDFS에서 데이터를 조회한 후 INSERT 쿼리문을 만들어 중간 테이블에 데이터를 입력한다. 이때 쿼리문은 레코드당 한 번씩 실행하는 것이 아니라 천 개 단위로 배치로 실행한다. 중간 테이블 사용여부와 배치 단위는 sqoop.export.records.per.statement 옵션으로 수정할 수 있다.
스쿱은 맵리듀스 잡이 정상적으로 종료되면 중간 테이블의 결과를 최종 테이블에 입력한다. 예를 들어, 중간 테이블 이름이 tmp_table1, 최종 테이블이 table1이라면 (INSERT INTO table1 (SELECT * from tmp_table1)의 쿼리를 실행한다.
'DataBase > Hadoop' 카테고리의 다른 글
스쿱(sqoop)과 MS-SQL 연동하기 (0) | 2016.12.08 |
---|---|
스쿱(sqoop) 설치 (0) | 2016.12.07 |
하이브 버킷(Hive Bucket) (0) | 2016.11.30 |
하이브 조인(Hive Join) (0) | 2016.11.30 |
하이브(Hive) - 데이터 업로드 (0) | 2016.11.26 |