1. 개요
- 스쿱은 하둡과 RDBMS 간 데이터 전송을 위해 설계된 도구
- 스쿱을 사용하여 MySQL 또는 Oracle과 같은 RDBMS로부터 HDFS로 데이터를 import하거나,
반대로 RDBMS로 export함
- 스쿱 설치 및 간단한 import 및 export 작업의 수행을 확인하고자 함
- 수집 대상 RDBMS는 mysql을 사용
. mysql server : 5.7.29 버전 사용*1)
. sample database : MySQLTUTORIAL 사이트에서 제공하는 MySQL Sample Database인 classicmodels 사용*2)
. connector j : mysql-connector-java-5.1.48
2. 스쿱 설치
2.1. 다운로드
- 스쿱 프로젝트 사이트에서 최신 안정 배포판을 다운로드 받아 적절한 위치에 압축 해제
- bin 디렉토리 아래 sqoop 명령을 실행하여 정상 실행 여부 확인
# 최근 안정 버전 (1.4.7) 다운로드 wget http://mirror.navercorp.com/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz # 압축 해제 tar xvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz # 실행 확인 cd sqoop-1.4.7.bin__hadoop-2.6.0 bin/sqoop help |
2.2. 환경 변수 설정
- .bashrc 파일에 SQOOP_HOME 및 SCOOP_CONF_DIR 설정
# 텍스트 편집기로 .bashrc 파일 열기 & 스쿱의 환경변수 추가 vi ~/.bashrc # scoop config export SQOOP_HOME=/home/hadoop/bigdata/sqoop-1.4.7.bin__hadoop-2.6.0 export SQOOP_CONF_DIR=/home/<username>/<any directory>/sqoop-1.4.7.bin__hadoop-2.6.0/conf export PATH=$PATH:$SQOOP_HOME/bin |
- sqoop-env.sh 파일에 하둡 관련 설정
# 스쿱 설치폴더의 conf 디렉토리로 이동 cd conf/ # sqoop-env-template.sh 파일을 sqoop-env.sh 이름으로 바꾸어 복사 cp sqoop-env-template.sh sqoop-env.sh # sqoop-env.sh 파일을 수정하기 위해 텍스트 편집기로 열기 vi sqoop-env.sh # hadoop 관련 설정 export HADOOP_COMMON_HOME=/home/<username>/<any directory>/hadoop export HADOOP_HOME=/home/<username>/<any directory>/hadoop export HADOOP_MAPRED_HOME=/home/<username>/<any directory>/hadoop |
2.3. JDBC 연결 설정
- 스쿱은 JDBC를 통한 RDBMS 연결을 지원
- 연결하고자 하는 DBMS에 대한 JDBC 드라이버를 다운받아 $SQOOP_HOME/lib에 위치 시키고
- SQOOP 실행 시 JDBC 연결 문자열을 파라미터로 사용하여 연결
# MySQL Connector/J 5.1.48 다운로드 & 설치 # https://dev.mysql.com/downloads/connector/j/ # Select Operating System 콤보박스에서 Platform Independent 선택 # "Looking for previous GA version?" 링크 선택 > *.tar.gz 파일 다운로드 # 압축 해제 tar xvf mysql-connector-java-5.1.48.tar.gz # jar파일을 cp 명령어로 sqoop의 라이브러 리로 복사 cd mysql-connector-java-5.1.48 cp mysql-connector-java-5.1.48-bin.jar $SQOOP_HOME/lib |
※ commons-lang-2.6.jar 파일을 다운로드 받아 $SQOOP_HOME/lib에 위치
- sqoop import 수행 시, java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils 발생
3. 스쿱 실행
3.1. import 및 export 작업 수행
- SQOOP은 sqoop COMMAND [ARGS] 형태로 실행하며, sqoop help 입력하여 사용 가능한 명령 확인 가능
- classicmodels의 customers 테이블의 복제 테이블을 customers_export로 만들어 두고
customers 테이블의 데이터를 import 한 후, import한 데이터를 customers_export 테이블에 export 하고자 함
# import (from classicmodels.customers to sqoop_out1 directory ) sqoop import --connect jdbc:mysql://localhost/classicmodels --table customers --target-dir sqoop_out1 --enclosed-by '\"' --username root -P # export (from sqoop_out1 to classicmodels.customers_export) sqoop export --connect jdbc:mysql://localhost/classicmodels --table customers_export --export-dir sqoop_out1 --enclosed-by '\"' --username root -P |
--enclosed-by '\"' : import / export 작없 시 필드 구분자로 ','를 디폴트로 사용함. customers 테이블의 필드 내 문자열이 ','를 포함하고 있어 "로 필드 값을 둘러 쌈
3.2. 기타 작업
- eval : SQL 쿼리를 수행하고 결과를 표시함
- list-databases : 서버에서 사용가능한 데이터베이스 목록 표시
- list-tables : 데이터베이스 내에 접근 가능한 테이블 목록 표시
# 조회 sqoop eval --connect jdbc:mysql://localhost/classicmodels --username root -P --query 'SELECT customerNumber, customerName, phone, city, state FROM customers where country = "USA"' # dml sqoop eval --connect jdbc:mysql://localhost/classicmodels --username root --P --e 'INSERT INTO customers_export VALUES (500, "Mad Cat, Inc", "Christmas", "Merry", "010-1234-5678", "500, BNL", null, "New York", null, null, "USA", null, null)' # 데이터베이스 목록 조회 sqoop list-databases --connect jdbc:mysql://localhost/classicmodels --username root --P # 테이블 목록 조회 sqoop list-tables --connect jdbc:mysql://localhost/classicmodels --username root --P |
*1) mysql server 설치
sudo apt-get install mysql-server-5.7 |
*2) 샘플 데이터베이스 다운로드 : https://www.mysqltutorial.org/mysql-sample-database.aspx
※ References
'Archive > 하둡' 카테고리의 다른 글
아파치 하둡 : 단일 노드 설치 (0) | 2020.03.06 |
---|