RDBMS와 HDFS 간의 효율적인 대용량 bulk 데이터 전송을 지원해주는 도구이다. MS SQL, PostgreSQL, MySQL, Oracle 등 JDBC와 호환되는 모든 RDBMS에 사용이 가능하다.
Sqoop은 Hadoop 내에서 실행되는데, Sqoop Import와 Sqoop Export 작업으로 외부 데이터베이스에서 데이터를 읽어오거나 외부 데이터베이스에 데이터를 작성한다.
Sqoop Import
외부 데이터베이스의 위치, 권한, 테이블 컬럼 정보 등의 메타데이터를 가져온 후, Hadoop Cluster에 Map 작업인 Sqoop Job을 각 노드들에 할당하여 외부 테이블에 접속, 데이터 를 받아오도록 한다.
//mysql world 스키마를 예시로 사용한다
//메타데이터 수집: 데이터베이스 내 스키마 확인
> sqoop list-databases --connect jdbc:mysql://_HOSTNAME_/world
--username _USERNAME_ --password _PASSWORD_
...
information_schema
world
//메타데이터 수집: 스키마 내 테이블 확인
> sqoop list-tables --connect jdbc:mysql://_HOSTNAME_/world
--username _USERNAME_ --password _PASSWORD_
...
City
Country
CountryLanguage
//Map 작업을 Hadoop에 요청: 하둡 클러스터의 각 노드는 DB 접근권한을 미리 부여받아야 한다.
//option -m : Map Job의 개수. DB의 크기에 따라 결정된다.
> sqoop import --connect jdbc:mysql://_HOSTNAME_/world
--username _USERNAME_ --password _PASSWORD_
--table Country -m 4 --target-dir /user/username/sqoop-mysql-import/Country
//HDFS에 저장된 데이터 확인
> hdfs dfs -ls sqoop-mysql-import/Country
> hdfs dfs -cat sqoop-mysql-import/Country/part-m-00000
...
ABW,Aruba,North
America,Caribbean,...
...
ZWE,Zimbabwe,Africa,Eastern
Africa,...
Shell
복사
Sqoop Export
import와 비슷하게, 외부 데이터베이스의 위치, 권한, 테이블 컬럼 정보 등의 메타데이터를 가져온 후, Hadoop Cluster에 Map 작업인 Sqoop Job을 각 노드들에 할당하여 외부 테이블에 접속, 데이터 를 작성하도록 한다.
//mysql world 스키마를 예시로 사용한다
//데이터를 저장할 데이터베이스 및 테이블(CityExport)을 생성
mysql) USE world;
mysql) CREATE TABLE 'CountryExport' ( 'ID' int(11) NOTNULL AUTO_INCREMENT, 'Name' ...);
//Map 작업을 Hadoop에 요청
> sqoop export --connect jdbc:mysql://_HOSTNAME_/world
--username _USERNAME_ --password _PASSWORD_
--table CountryExport -m 4 --export-dir /user/username/sqoop-mysql-import/Country
Shell
복사