본문 바로가기

Archive/하둡

아파치 스쿱 : 설치 및 수집

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

 - Sqoop User Guide (v1.4.7)

 

 

 

'Archive > 하둡' 카테고리의 다른 글

아파치 하둡 : 단일 노드 설치  (0) 2020.03.06