Sqoop 이용하여 Cloud DB for MySQL에서 Cloud Hadoop으로 데이터 마이그레이션하기
본 포스팅에서는 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=8Job 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=9049458Map-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)=341311488File Input Format Counters
Bytes Read=0File Output Format Counters
Bytes Written=52020/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 existLogging 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 secondsLoading 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로 이전하는 방법을 알아보았습니다. 분석에 필요한 데이터를 쉽게 이전하는데 도움이 되었으면 합니다.