Sqoop이란?
Apache Sqoop is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases. |
Apache Sqoop은 SQL-to-Hadoop 의 약자로 Apache Hadoop과 정형화된 Datasource, 예를 들어, Oracle 같은 RDB 간의 대량 데이터를 전송하기 위해 만들어진 툴이다.
Oracle DB에 저장된 대량의 데이터를 HDFS 로 옮겨 분석을 하고자 할 때 쉽게 데이터를 Import 할 수 있으며, 반대로 분석 결과(HDFS)를 RDB로 Export 할 수 있다.
또한 Hive, Pig, Hbase 등으로 바로 옮겨서 확인 할 수도 있다.
Sqoop의 Import/Export
Apache 상위 프로젝트로 Sqoop 페이지에 들어가보면 Sqoop은 두 가지 Major 버전으로 나눠진다.
- Sqoop1
- 최신버전 : 1.4.5
- Sqoop2
- 최신버전 : 1.99.5
(at 2015/04/10 기준)
1. Sqoop1
sqoop1 은 이용자가 CLI(Command Line Interface)를 통해 sqoop command를 실행하는 구조이다.
2. Sqoop2
sqoop1이 CLI 방식이라면 sqoop2는 web-based GUI 방식이라고 할 수 있다.
REST API를 통해서 UI에서 Sqoop2를 제어할 수 있게 되었으며, 여기서 Admin과 Operators 권한으로 구분하여 create 또는 execute 권한을 제한할 수 있다.
Sqoop2 의 설계목적은 아래 3가지라고 한다.
- Ease of Use 사용이 쉽다.
- Ease of Extension 확장이 쉽다.
- Security 보안
- admin 또는 operators 권한
Sqoop2에서 다라진 점 중 가장 큰 부분은 붉은 박스부분인 Server 방식이 추가되었다는 것이다.
기존 Sqoop1의 CLI 방식(명령어 호출 방식) 이 중앙에 Sqoop Server를 두고 WebUI를 사용하거나 REST API 방식을 통해서 Sqoop을 제어할 수 있게 되었다.
또한 Server에만 설정하면 되고, 필요한 JDBC Driver도 Server에만 설치하여 관리되므로 편리해졌다고 할 수 있다.
JDBC Connector를 지원하며, 지원되는 데이터 타입은 아래와 같다.
- TINYINT, SMALLINT, INTEGER, BIGINT
- REAL, FLOAT, DOUBLE, NUMERIC, DECIMAL
- BIT
- BOOLEAN
- DATE, TIME, TIMESTAMP
- CHAR, VARCHAR, LONGVARCHAR
Sqoop Import
Import 과정
- 가져와야 할 Metadata를 가져온다.
- Map-Only Job으로 데이터를 Hadoop Cluster로 전송
※ Map-Only Job이란?
Hadoop Map&Reduce 중 Map 만으로 이뤄진 Job을 의미한다. 즉, 원하는 데이터만 mapping 해서 HDFS 저장하겠다는 의미이다.
Reduce가 없는 이유는 Sqoop의 목적은 대량 데이터 전송이지, 가공이 아니기 때문이다.
Import 예제
$ sqoop import -connect jdbc:mysql://127.0.0.1/userdb -table ORDERS -username dbuser -password dbpass -hive -import |
MySQL의 ORDERS 테이블 내의 데이터를 HDFS로 옮기면서 즉시 Hive로 Import 하는 명령어 샘플이다.
Sqoop Export
Export 과정
- 가져와야 할 DB의 Metadata를 가져온다.
- Map-Only Job으로 데이터를 RDB로 전송
Export 예제
$ sqoop export -connect jdbc:mysql://127.0.0.1/userdb -table ORDERS -username dbuser -password dbpass -export-dir=/hdfs_path/ORDERS -m 1 -input-fields-erminated-by '\001' |
HDFS 내의 ORDERS 데이터를 MySQL 의 ORDER 테이블로 데이터를 전송하는 명령어 샘플이다.
참고사이드
- http://sqoop.apache.org/index.html
- https://blogs.apache.org/sqoop/entry/apache_sqoop_highlights_of_sqoop
- http://hochul.net/blog/apache-sqoop-sql-to-hadoop/
- http://hochul.net/blog/apache_sqoop2/
'BigData > Sqoop' 카테고리의 다른 글
Sqoop 을 이용하여 Oracle에서 HDFS로 데이터를 전송할 때 Hdfs내에 파일명 지정이 가능할까? (0) | 2015.04.28 |
---|