- 인쇄
- PDF
Sqoop + Oozie Workflow를 활용한 MySQL 8.0 마이그레이션
- 인쇄
- PDF
VPC 환경에서 이용 가능합니다.
Sqoop(SQL to Hadoop)은 Hadoop과 관계형 데이터베이스 간에 데이터를 전송할 수 있도록 설계된 오픈소스 소프트웨어입니다.
간단한 CLI로 Oracle, MySQL 등의 RDBMS 특정 테이블 또는 특정 조건에 맞는 데이터를 HDFS로 쉽게 옮길 수 있으며, Hive, Pig, HBase 등으로 바로 옮겨 확인할 수 있습니다. 반대로 HDFS에 저장되어 있는 데이터를 RDBMS로 옮길 수도 있습니다.
Oozie는 Hadoop의 여러 Job을 쉽게 관리하기 위해 만들어진 워크플로 스케줄링 시스템입니다. Job의 시작, 처리, 분기, 종료 등의 여러 Action으로 구성되며, Cloud Hadoop (VPC)에서 제공하는 Hue(Hadoop User Experience) 내에서 Oozie 워크플로를 쉽게 사용할 수 있습니다.
이 가이드에서는 Hue의 Oozie 워크플로 내에 Sqoop을 사용하여 Cloud DB for MySQL (VPC) 데이터를 불러와 Hive Table을 생성한 다음 Hive Query로 해당 테이블과 똑같은 사본 Hive Table을 만듭니다. 마지막으로 Sqoop을 이용하여 사본 Hive Table을 다시 Cloud DB for MySQL (VPC)에 전송하는 방법에 대하여 설명합니다.
Hue의 Oozie 워크플로와 Ambari에서 발생하는 Alerts에 대해 메일 혹은 메시지를 활용한 사용자 정의 알림을 설정할 수 있습니다. 이에 대한 자세한 내용은 사용자 정의 알림 설정 가이드를 참고해 주십시오.
사전 작업
Oozie에서 Sqoop을 사용하기 위해서는 다음과 같은 사전 작업이 필요합니다.
항목 | 설명 | 가이드 |
---|---|---|
MySQL 8 버전 connector 설정 | MySQL에 연결할 수 있도록 connector를 설치하고 Oozie에 설정 | |
MySQL 테이블 준비 | 원본 데이터를 가지고 있는 Source Table과 Hive Query 수행 결과를 받을 Target Table을 준비 | |
ACG 설정 | Cloud Hadoop (VPC)과 Cloud DB for MySQL (VPC)의 ACG를 설정 | 방화벽 설정(ACG) |
1. MySQL 8 버전 connector 설정
Sqoop으로 MySQL에 접근하기 위해서는 버전에 맞는 connector 설정이 필요합니다. 다음 순서에 따라 MySQL connector 설치 및 설정해 주십시오.
a. 엣지 노드에서 MySQL 8 버전 connector 설정
- Cloud Hadoop (VPC) 엣지 노드에 ssh로 접속해 주십시오. 엣지 노드에 접속하는 방법은 SSH로 클러스터 노드 접속 가이드를 참고해 주십시오.
- 아래 명령어를 수행해 MySQL 8 버전 connector를 다운로드해 주십시오.
wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz
- 아래 명령어를 수행해 다운로드한 MySQL 8 버전 connector의 압축을 풀어 주십시오.
tar -xvzf mysql-connector-java-8.0.26.tar.gz
- 아래 명령어를 수행해 기존에 설정되어 있는 MySQL connector을 새로 다운로드한 MySQL 8 버전 connector로 덮어씌워 주십시오.
sudo cp /home1/sshuser/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /usr/share/java/mysql-connector-java-8.0.26.jar sudo ln -Tfs /usr/share/java/mysql-connector-java-8.0.26.jar /usr/hdp/current/sqoop-client/lib/mysql-connector-java.jar
/user/oozie/share/lib/lib_{timestamp}/sqoop
경로에 mysql-connector-java-8.0.26.jar 파일을 넣어 주십시오. 만약/user/oozie/share/lib/lib_{timestamp}/sqoop
경로에 복수의lib_{timestamp}
파일이 보일 경우 최신 디렉터리에 붙여 넣어 주십시오.sudo -u oozie hadoop fs -put /home1/sshuser/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /user/oozie/share/lib/lib_{timestamp}/sqoop/mysql-connector-java-8.0.26.jar
b. Hue에서 MySQL 8 버전 connector 설정
/user/oozie/share/lib/lib_{timestamp}/sqoop
경로에 mysql-connector-java-8.0.26.jar 파일이 복사된 것을 확인해 주십시오.
- Oozie의 library를 업데이트하기 위해 엣지 노드에 접속하여 아래 명령어를 수행해 주십시오.
sudo -u oozie oozie admin -oozie http://{첫 번째 마스터 노드의 호스트 이름}:11000/oozie -sharelibupdate sudo -u oozie oozie admin -oozie http://{두 번째 마스터 노드의 호스트 이름}:11000/oozie -sharelibupdate
Ambari UI의 Hosts 페이지에서 호스트 이름을 확인할 수 있습니다. Ambari UI에 대한 자세한 내용은 Ambari UI 가이드를 참고해 주십시오.
- Ambari에 접속 후 왼쪽 메뉴에 [Oozie] > [ACTIONS] > [Restart All] 버튼을 클릭하여 Oozie를 재시작시켜 주십시오. Ambari에 접속하는 방법은 Ambari UI 가이드를 참고해 주십시오.
2. MySQL 테이블 준비
Hue에서 Oozie를 사용한 Workflow를 작성해보기 위해 원본 데이터를 가지고 있는 Source Table과 Hive Query 수행 결과를 받을 Target Table을 준비해 주십시오. 이 가이드에서는 아래 SQL을 통해 만든 SQOOP_TEST1, SQOOP_TEST2 테이블을 사용합니다.
CREATE TABLE SQOOP_TEST1
(
gp_sum INT PRIMARY KEY,
player VARCHAR(30)
);
INSERT INTO SQOOP_TEST1(gp_sum, player)
VALUES(1,'test_player');
CREATE TABLE SQOOP_TEST2
(
gp_sum INT PRIMARY KEY,
player VARCHAR(30)
);
3. ACG 설정
네이버 클라우드 플랫폼의 콘솔에서 MySQL Server의 ACG(Access Control Group)를 설정하는 방법은 다음과 같습니다.
여기에서는 ACG 설정 방법을 간단하게 소개합니다. ACG 설정 방법에 대한 자세한 내용은 ACG 사용 가이드를 참고해 주십시오.
- 접근하려는 Cloud DB for MySQL (VPC)의 ACG를 선택한 후 다음 네 가지 정보를 입력하고 2개의 ACG Rule을 추가해 주십시오.
- 프로토콜: TCP
- 접근 소스: 접근할 Cloud Hadoop (VPC)의 ACG명
- 허용 포트: 3306
- 메모(선택)
- 프로토콜: TCP
- 접근 소스: 접근할 사용자의 PC IP([myip] 버튼 클릭)
- 허용 포트: 3306
- 메모(선택)
- 접근하려는 Cloud Hadoop (VPC)의 ACG를 선택한 후 다음 네 가지 정보를 입력하고 ACG Rule을 추가해 주십시오.
- 프로토콜: TCP
- 접근 소스: 접근할 사용자의 PC IP([myip] 버튼 클릭)
- 허용 포트: 1-65535
- 메모(선택)
사전 작업 후 다음 단계를 차례대로 진행해 주십시오.
- 1. Sqoop으로 MySQL 데이터를 Hive로 전송
- 2. Hive Query로 새로운 테이블 생성
- 3. Sqoop으로 Hive 데이터를 MySQL로 전송
- 4. Hive와 MySQL 테이블 확인
1. Sqoop으로 데이터 가져오기
- Hue 왼쪽 메뉴에서 [스케줄러] > [Workflow] 을 클릭해 주십시오.
- [문서] > [작업] 을 클릭해 주십시오.
- [Sqoop 1] 버튼을 여기에 작업 두기로 드래그해 주십시오.
- 아래 Sqoop command를 입력 후 [추가] 버튼을 클릭해 주십시오.
sqoop import --connect jdbc:mysql://{Cloud DB for MySQL (VPC) Private 도메인}/{DB 이름} --username {DB 계정} --password "{DB 계정 비밀번호}" --table SQOOP_TEST1 --hive-import --hive-database default --hive-table sqoop_test1 -m 1 --external-table-dir "{Object Storage 버킷 URI}/sqoop_test1"
- 우측 상단의 [저장] 버튼을 클릭해 작성한 Workflow를 저장해 주십시오.
2. Hive Query로 새로운 테이블 생성
Hue 왼쪽 메뉴에서 [편집기] > [Hive] 을 클릭해 주십시오.
아래의 예시 Hive Query를 입력해 주십시오.
USE default; CREATE EXTERNAL TABLE sqoop_test2 STORED AS TEXTFILE LOCATION '{Object Storage 버킷 URI}/sqoop_test2' AS SELECT * FROM sqoop_test1;
우측 상단의 [저장] 버튼을 클릭한 뒤 이름을 설정하여 작성한 Hive Query를 저장해 주십시오.
Hue 왼쪽 메뉴에서 [스케줄러] > [Workflow] 을 클릭하고 [문서] 버튼을 클릭한 뒤 위에서 작성한 Workflow를 선택해 주십시오.
우측 상단의 [수정] 버튼을 클릭한 뒤 [작업] > [문서] 버튼을 클릭해 주십시오.
[Hive Query] 버튼을 Sqoop 1 밑의 공간으로 드래그한 뒤 문서 검색... 을 클릭하여 위에서 작성한 Hive Query를 선택한 뒤 [추가] 버튼을 클릭해 주십시오.
3. Sqoop으로 Hive 데이터를 MySQL로 전송
[문서] > [작업] 을 클릭해 주십시오.
[Sqoop 1] 버튼을 Hive 밑의 공간으로 드래그해 주십시오.
아래의 예시 Sqoop command를 입력해 주십시오.
sqoop export --connect jdbc:mysql://{Cloud DB for MySQL (VPC) Private 도메인}/{DB 이름} --username {DB 계정} --password "{DB 계정 비밀번호}" --table SQOOP_TEST2 --export-dir "{Object Storage 버킷 URI}/sqoop_test2" -m 1 --input-fields-terminated-by "\001"
우측 상단의 [저장] 버튼을 클릭해 작성한 Workflow를 저장한 뒤 [시작] 버튼을 클릭해 작성한 Workflow를 실행시켜 주십시오.
4. Hive와 MySQL 테이블 확인
- Hive를 통해 테이블이 잘 저장되어 있는지 확인해 주십시오.
- Hive 사용 방법은 Hive 사용 가이드를 참고해 주십시오.
SELECT * FROM SQOOP_TEST1;
SELECT * FROM SQOOP_TEST2;
- MySQL를 통해 테이블이 잘 저장되어 있는지 확인해 주십시오.
SELECT * FROM SQOOP_TEST1;
SELECT * FROM SQOOP_TEST2;