Sqoop 이용하여 Cloud DB for MySQL에서 Cloud Hadoop으로 데이터 마이그레이션하기

Jeon Kang il
NAVER CLOUD PLATFORM
10 min readDec 15, 2020

본 포스팅에서는 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 접속하기 가이드를 참고하면 별도의 설치 없이 마이그레이션 작업을 진행할 수 있습니다.

  1. 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.propertiesOK
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에서도 조회할 수 있습니다.

마치며

지금까지 Sqoop Client를 이용해서 MySQL 데이터를 Cloud Hadoop로 이전하는 방법을 알아보았습니다. 분석에 필요한 데이터를 쉽게 이전하는데 도움이 되었으면 합니다.

--

--