- 인쇄
- PDF
CDB MySQL 데이터 이전
- 인쇄
- PDF
Sqoop(SQL to Hadoop)은 관계형 데이터베이스와 Hadoop 간에 효율적으로 데이터를 전송할 수 있도록 지원하는 툴입니다.
RDBMS에 저장되어 있는 데이터를 HDFS에서 분석할 수 있도록 HDFS로 가져올 수 있습니다. 반대로 분석 결과를 RDBMS로 내보낼 수 있으며 HDFS, Hive, HBase, Accumulo 등으로도 전송할 수도 있습니다.
이 가이드는 Sqoop을 이용하여 네이버 클라우드 플랫폼 Cloud DB for MySQL에서 Cloud Hadoop으로 데이터 마이그레이션하는 방법을 소개합니다.
Sqoop 사용 및 명령어에 대한 내용은 Sqoop 사용 가이드를 참고해 주십시오.
사전 작업
- Object Storage를 생성해 주십시오.
- Object Storage 생성에 대한 자세한 내용은 Object Storage 사용 가이드를 참고해 주십시오.
- Cloud Hadoop 클러스터를 생성해 주십시오.
- Cloud Hadoop 클러스터 생성에 대한 자세한 내용은 Cloud Hadoop 시작 가이드를 참고해 주십시오.
- Cloud DB for MySQL를 생성합니다.
- Cloud DB for MySQL 생성에 대한 자세한 내용은 Cloud DB for MySQL 사용 가이드를 참고해 주십시오.
Sqoop을 이용한 데이터 마이그레이션
Sqoop 클라이언트는 엣지 노드를 제외한 마스터 노드와 데이터 노드 서버에 기본적으로 설치되어 있습니다. 별도의 Sqoop 클라이언트 설치없이 마이그레이션을 진행할 수 있습니다.
SSH로 클러스터 노드 접속 가이드를 참고하여 서버에 접속한 후, 다음 단계를 차례대로 진행해 주십시오.
1. Cloud DB for MySQL로 접속할 Sqoop 계정 생성
Cloud DB for MySQL 콘솔의 DB User 관리 메뉴를 이용하여 설정 정보를 입력해 Cloud DB for MySQL의 계정을 생성해 주십시오.
Cloud Hadoop 서버들의 IP는 Ambari UI의 Hosts 메뉴에서 확인할 수 있습니다.
<예시>
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를 추가해 주십시오.
3. 샘플링 테이블 및 데이터 생성
생성된 Cloud DB for MySQL에 예제 샘플링 테이블과 데이터를 입력해 주십시오.
MySQL 접속 명령어
mysql -u [클러스터 관리자 계정명] -p
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
참고에러가 난다면 Primary Key의 존재 유무를 확인해 주십시오.
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에 마이그레이션된 테이블과 데이터를 Hive Viewer 2.0 또는 Hue UI에서 조회할 수 있습니다. Hive 사용에 대한 자세한 내용은 Hive 사용 가이드를 참고해 주십시오.
SELECT * FROM mig_test_tb;