EXCELSIOR

아파치 스쿱(Apache Sqoop) 본문

DataBase/Hadoop

아파치 스쿱(Apache Sqoop)

Excelsior-JH 2016. 12. 7. 15:46

스쿱(sqoop)은 관계형 데이터베이스와 하둡 사이에서 데이터 이관을 지원하는 툴이다. 스쿱을 이용하면 관계형 데이터베이스의 데이터를 HDFS, 하이브, Hbase에 임포트(import)하거나, 반대로 관계형 DB로 익스포트(export)할 수 있다. 

스쿱은 클라우데라에서 개발했으며, 현재 아파치 오픈소스 프로젝트로 공개되어 있다.


1. 스쿱 아키텍처

스쿱은 관계형 DB를 읽고 쓸 수 있는 커넥터라는 개념을 사용한다. 커넥터는 각 DB별로 구현돼 있으며, JDBC 드라이버를 이용해 데이터베이스 접속 및 쿼리 실행을 요청한다.



1) 데이터 임포트 동작 방식


        1. 클라이언트가 스쿱에 임포트를 요청. 클라이언트는 데이터베이스 접속 정보, 임포트 대상 테이블, 임포트 질의, 실행할 맵 태스크 개수등을 설정
        2. 스쿱은 데이터베이스에서 해당 테이블의 메타데이터를 조회해 ORM(Object Relational Mapping)클래스를 생성. ORM클래스에는 익스포트 대상 테이블의 컬럼을 자바 변수로 매핕하고, 맵리듀스 잡 실행에 필요한 직렬화 메소드가 생성
        3. 스쿱은 ORM클래스가 정상적으로 생성되면 맵리듀스 잡 실행을 요청. 스쿱은 맵 태스크의 출력 결과를 임포트에 사용하기 때문에 리듀스 태스크는 실행되지 않는다.
        4. 맵 태스크는 데이터베이스에 JDBC로 접속한 후 SELECT 쿼리를 실행. 이때 쿼리문은 사용자가 직접 설정한 쿼리일 수도 있고, 사용자가 테이블만 설정했을 경우에는 ORM 클래스를 이용해 쿼리를 설정.
          스쿱은 대상 테이블의 Primary key의 최소값과 최대값을 조회한 후 데이터가 균등하게 분포되도록 쿼리문을 수정한다.
        5. 맵 태스크는 쿼리문을 실행한 결과를 HDFS에 저장한다. 전체 맵 태스크가 종료되면 스쿱은 클라이언트에게 작업이 종료됐다고 알려준다.
        6. 사용자가 설정한 하이브 테이블을 생성한다.
        7. 맵 태스크에 저장된 결과를 하이브 테이블의 데이터 경로로 로딩한다.

2) 데이터 익스포트 동작 방식


  1. 클라이언트는 스쿱에 익스포트를 요청한다.

  2. 스쿱은 데이터베이스에서 메타데이터를 조회한 후 맵리듀스 잡에서 사용할 ORM클래스를 생성한다.

  3. 스쿱은 데이터베이스의 중간 테이블의 데이터를 모두 삭제한 후 맵리듀스 잡을 실행한다.

  4. 맵 태스크는 HDFS에서 데이터를 조회한 후 INSERT 쿼리문을 만들어 중간 테이블에 데이터를 입력한다. 이때 쿼리문은 레코드당 한 번씩 실행하는 것이 아니라 천 개 단위로 배치로 실행한다. 중간 테이블 사용여부와 배치 단위는 sqoop.export.records.per.statement 옵션으로 수정할 수 있다.

  5. 스쿱은 맵리듀스 잡이 정상적으로 종료되면 중간 테이블의 결과를 최종 테이블에 입력한다. 예를 들어, 중간 테이블 이름이 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
Comments