Sqoop 이용하여 Cloud DB for MySQL에서 Cloud Hadoop으로 데이터 마이그레이션하기
By: Jeon Kang Il
Tags: Hadoop, Data Migration, Sqoop, Cloud Computing, MySQL

본 포스팅에서는 Sqoop을 이용하여 네이버 클라우드 플랫폼 Cloud DB for MySQL에서 Cloud Hadoop 으로 데이터 마이그레이션하는 방법에 대해 설명합니다. Cloud Hadoop 1.2 클러스터와 Cloud DB for MySQL 이 이미 생성되었음을 가정합니다.

​Sqoop 은 관계형 데이터베이스와 Hadoop 간에 효율적으로 데이터를 전송할 수 있게 지원하는 툴입니다. RDBMS에 저장되어있는 데이터를 HDFS에서 분석할 수 있도록 HDFS로 Import 할 수 있고, 반대로 분석 결과를 RDBMS로 Export 할 수 있습니다. HDFS, Hive, HBase, Accumulo 등으로도 전송이 가능합니다.

Cloud DB for MySQL 에서 Cloud Hadoop Hive 으로 데이터 마이그레이션

​Sqoop 클라이언트는 엣지노드를 제외한 마스터 노드와 데이터 노드 서버에 설치되어있습니다. 클러스터 노드에 SSH 접속하기 가이드를 참고하면 별도의 설치 없이 마이그레이션 작업을 진행할 수 있습니다.

Cloud DB for MySQL로 접속할 Sqoop계정 생성

먼저 아래의 설정 정보를 입력하여 Cloud DB for MySQL 의 계정을 생성하겠습니다. Cloud Hadoop 서버들의 IP는 Ambari Web UI에서 확인할 수 있습니다.

예제 DB 설정 정보

- User_ID : mig_acct

- Host(IP) : Cloud Hadoop 서버의 IP 대역 (예시. 10.10.10.%)

- 암호 : 임의의 암호

2. ACG 설정

Cloud Hadoop 마스터 노드 2번 서버가 Cloud DB for MySQL 에 접속할 수 있도록 ACG를 추가합니다. cloud-db ACG 설정의 접근 소스에 Cloud Hadoop 마스터 노드 2번 서버 IP ACG를 추가하면 됩니다.

3. 샘플링 테이블&데이터 생성

생성된 Cloud DB for MySQL 에 예제 샘플링 테이블 & 데이터를 입력합니다.

CREATE TABLE `mig_test_tb` (

`col1` int(11) NOT NULL,

`col2` char(2) NOT NULL,

`col3` char(15) DEFAULT NULL,

`col4` char(4) DEFAULT NULL,

`col5` char(1) DEFAULT NULL,

PRIMARY KEY (`col1`,`col2`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into mig_test_tb values

(1,’a’,’mig-test1',’run’,’y’),(2,’a’,’mig-test1',’init’,’n’),

(3,’b’,’mig-test1',’run’,’y’),(4,’b’,’mig-test1',’run’,’y’),

(5,’c’,’test-mysql’,’init’,’n’),(6,’c’,’test-mysql’,’run’,’n’),

(7,’d’,’test-mysql’,’init’,’n’),(8,’d’,’test-mysql’,’run’,’y’),

(9,’e’,’sqoop-test’,’run’,’n’),(10,’e’,’sqoop-test’,’run’,’y’),

(11,’f’,’sqoop-test’,’run’,’n’),(12,’f’,’sqoop-test’,’init’,’y’),

(13,’g’,’mysql-sqoop’,’run’,’n’),(14,’g’,’mysql-sqoop’,’init’,’y’),

(15,’h’,’mysql-sqoop’,’run’,’y’),(16,’h’,’mysql-sqoop’,’init’,’n’),

(17,’i’,’sqp-to-my’,’run’,’n’),(18,’i’,’sqp-to-my’,’init’,’n’),

(19,’j’,’sqp-to-my’,’init’,’y’),(20,’j’,’sqp-to-my’,’init’,’y’),

(21,’k’,’my-mig-sq’,’run’,’n’),(22,’k’,’my-mig-sq’,’run’,’y’),

(23,’i’,’my-mig-sq’,’run’,’y’),(24,’i’,’my-mig-sq’,’run’,’n’);

4. Sqoop 명령어로 데이터 마이그레이션

Sqoop CLI 의 import-all-tables 옵션을 사용하여 데이터를 Hive 로 마이그레이션 하겠습니다. jdbc 정보에는 Cloud DB for MySQL의 Private 도메인과 포트를 사용하였습니다.

> sqoop import-all-tables --connect jdbc:mysql://test-db.mysql.domain.com:3306/migdb --username mig_acct -P --hive-import

Resource manager Job으로 등록되어 마이그레이션 작업이 수행됩니다.

20/11/30 16:27:10 INFO mapreduce.Job: Job job_1606446027726_0007 completed successfully

20/11/30 16:27:10 INFO mapreduce.Job: Counters: 30

File System Counters

FILE: Number of bytes read=0

FILE: Number of bytes written=685116

FILE: Number of read operations=0

FILE: Number of large read operations=0

FILE: Number of write operations=0

HDFS: Number of bytes read=414

HDFS: Number of bytes written=520

HDFS: Number of read operations=16

HDFS: Number of large read operations=0

HDFS: Number of write operations=8 Job Counters

Launched map tasks=4

Other local map tasks=4

Total time spent by all maps in occupied slots (ms)=13269

Total time spent by all reduces in occupied slots (ms)=0

Total time spent by all map tasks (ms)=13269

Total vcore-milliseconds taken by all map tasks=13269

Total megabyte-milliseconds taken by all map tasks=9049458 Map-Reduce Framework

Map input records=24

Map output records=24

Input split bytes=414

Spilled Records=0

Failed Shuffles=0

Merged Map outputs=0

GC time elapsed (ms)=393

CPU time spent (ms)=4780

Physical memory (bytes) snapshot=813985792

Virtual memory (bytes) snapshot=10053660672

Total committed heap usage (bytes)=341311488 File Input Format Counters

Bytes Read=0 File Output Format Counters

Bytes Written=520 20/11/30 16:27:10 INFO mapreduce.ImportJobBase: Transferred 520 bytes in 15.7176 seconds (33.084 bytes/sec)

20/11/30 16:27:10 INFO mapreduce.ImportJobBase: Retrieved 24 records.

20/11/30 16:27:10 INFO mapreduce.ImportJobBase: Publishing Hive/Hcat import job data to Listeners

20/11/30 16:27:10 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `mig_test_tb` AS t LIMIT 1

20/11/30 16:27:10 INFO hive.HiveImport: Loading uploaded data into Hive

20/11/30 16:27:10 WARN conf.HiveConf: HiveConf of name hive.server2.enable.doAs.property does not exist

20/11/30 16:27:10 WARN conf.HiveConf: HiveConf of name hive.server2.enable.doAs.property does not exist Logging initialized using configuration in jar:file:/home1/cdp/usr/hdp/2.6.5.0–292/hive/lib/hive-common-1.2.1000.2.6.5.0–292.jar!/hive-log4j.properties OK

Time taken: 1.796 seconds Loading data to table default.mig_test_tb

Table default.mig_test_tb stats: [numFiles=4, numRows=0, totalSize=520, rawDataSize=0] OK

Time taken: 0.418 seconds

OK 메세지와 함께 정상적으로 마이그레이션 작업이 완료된 것을 확인할 수 있습니다. Hive Viewer 2.0에서 Hive에 마이그레이션된 테이블과 데이터를 조회하거나 에서 Hue browser에서도 조회할 수 있습니다.