지구정복

[Sqoop] Sqoop 설치 및 MySQL과 Import, Export하기 본문

데이터 엔지니어링 정복/Sqoop

[Sqoop] Sqoop 설치 및 MySQL과 Import, Export하기

eeaarrtthh 2021. 5. 28. 22:05
728x90
반응형

pc환경은 다음과 같다.

-오라클버추얼박스 5.2.44

-CentOS 7 리눅스 서버 4대(주키퍼, 하둡, 하이브 설치상태)

-하이브가 설치되어있는 서버 2에 설치예정

 

항상 설치전에는 버추얼박스에서 각 서버에 대한 스냅샷을 찍어놓자!!!!

 

1. 설치

아래 사이트 클릭

http://sqoop.apache.org/

 

아래 다운로드 클릭

 

아래 클릭

링크주소를 복사한다.

 

그리고 설치를 할 서버에서 아래 명령어 실행한다.

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

그리고 심볼릭 링크를 설정한다.

ln -s sqoop-1.4.7.bin__hadoop-2.6.0 sqoop

 

이제 서버2의 계정에 스쿱사용에 대한 환경변수 설정을 해준다.

-참고-

/etc/profile : 부팅시 적용되는 파일 (root)

/home/사용자계정/.bash_profile : 각 계정에 로그인할 때 로드

/home/사용자계정/.bashrc : 로그인 한 상태에서 터미널을 열면 실행

 

vi ~/.bashrc

아래 표시한 부분만 적어준다. 나머지 환경변수는 각자마다 다를 것이다.

export JAVA_HOME=/usr/local/java

export HADOOP_HOME=/home/hadoop01/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

export SQOOP_HOME=/home/hadoop01/sqoop
export SQOOP_CONF_DIR=$SQOOP_HOME/conf

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$SQOOP_HOME/bin

수정한 환경변수 적용시킨다.

source ~/.bashrc

 

이제 스쿱 설정파일에 하둡관련 설정을 추가해야 한다.

sqoop-env.sh 수정

 

예시파일을 복사해서 만든다.

cp sqoop/conf/sqoop-env-template.sh sqoop/conf/sqoop-env.sh

해당 디렉토리로 이동

cd sqoop/conf/

 

sqoop-env.sh수정한다.

vi sqoop-env.sh 

나는 하둡이 /home/hadoop01/hadoop에 있고 하이브는 /home/hadoop01/hive에 있다.

export HADOOP_HOME=/home/hadoop01/hadoop

export HADOOP_COMMON_HOME=/home/hadoop01/hadoop

export HADOOP_MAPRED_HOME=/home/hadoop01/hadoop

export HIVE_HOME=/home/hadoop01/hive

 

 

이제 스쿱과 연동할 DBMS의 연결 드라이버를 다운받아야한다.

나는 MySQL과 연동을 할 예정이다.

 

아래 명령어 db 커넥터 다운로드

wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.46.tar.gz

tar파일을 풀어준다.

tar -xvf mysql-connector-java-5.1.46.tar.gz

 

 

그리고 폴더로 들어가서 jar 파일을 스쿱의 lib디렉토리로 옮겨준다.

cd mysql-connector-java-5.1.46/

mv mysql-connector-java-5.1.46-bin.jar /home/hadoop01/sqoop/lib/

 

이제 스쿱의 jar파일을 하둡lib디렉토리에 복사시켜준다.

cd

cd sqoop

cp sqoop-1.4.7.jar /home/hadoop01/hadoop/share/hadoop/tools/lib/

 

그리고 아래 사이트에 가서 commons-lang-2.6-bin.tar.gz이란 jar파일을 다운받는다.

이 파일이 없으면 sqoop import 수행 시, java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils 발생한다.

 

http://commons.apache.org/proper/commons-lang/download_lang.cgi

 

우클릭후 링크주소복사

 

터미널에서 아래 명령어 입력

cd

wget https://mirror.navercorp.com/apache//commons/lang/binaries/commons-lang-2.6-bin.tar.gz

tar -xvf commons-lang-2.6-bin.tar.gz

cd commons-lang-2.6

 

그리고 commons-lang-2.6.jar 파일을 ~/sqoop/lib 디렉토리로 복사해준다.

cp commons-lang-2.6.jar /home/hadoop01/sqoop/lib

 

그리고 해당 디렉토리로 가서 겹치는 기존 파일의 이름을 바꿔준다.

cd /home/hadoop01/sqoop/lib/

ll common*

mv commons-lang3-3.4.jar commons-lang3-3.4.jar.bak

 

계속 그리고이지만

할 게 더 남았다.ㅎㅎ

 

나의 경우 자꾸 3306 포트 사용중이라고해서 밑에 스쿱과 mysql 연동이 안되었다.

원래 mysql 기본 포트번호가 3306인데 3307로 미리 바꿔준다.

바꿔주지 않으면 3306포트에 접속할 수 없다는 에러가 뜬다..

 

루트 계정으로 로그인

su - root
비번

 

mysql 설정파일 수정

vi /etc/my.cnf

port=3307

 

그리고 mysql 프로세스를 재구동해줘야한다.

systemctl restart mysqld

 

정말 마지막으로 이따가 sqoop에서 mysql 로 접속할 mysql사용자를 만들고 권한을 주어야 한다.

만약 권한이 없으면 해당 사용자가 DB에 접속할 권한이 없다는 에러가 뜬다.

 

mysql에 root로 접속한다.

mysql -u root -p

 

현재 유저를 보는명령어는 아래와 같다.

use user;

select user, host from user;

 

그리고 사용자를 만든다. %는 모든 외부접속을 허용한다는 뜻이다. 보통 저기에 localhost를 적는다. 근데 우리는 

외부에서 'hive' 라는 계정으로 접속을 해야 되므로 모든 외부접속이 가능하게끔 한다.

create user 'hive'@'%' identified by '비밀번호';

 

이때 비밀번호가 무슨 정책에 맞지 않는다고하면 두 가지 방법이 있다.

첫 번째는 아예 정책 plugin을 삭제하는 방법

두 번째는 비밀번호 정책을 수정하는 방법

 

그냥 정책을 삭제해버린다.

uninstall plugin validate_password;

 

계정을 만들었으면 권한을 부여한다. 

grant 권한이름(select, insert, update 등등) privileges on DB이름.테이블이름 to '계정'@'ip주소';

의 형식인데 아래처럼 입력한다. 모든 권한과 모든 DB, 모든 Table에 대해서 권한을 줘버린다.

grant all privileges on *.* to 'hive'@'%';

그리고 항상 사용자를 만들거나 수정, 권한 등을 변경하고 나서는 flush 명령어를 실행한다. 그렇지 않으면 변경사항 적용이 안된다.

flush privileges;

 

그리고 조금 이따가 import할 데이터베이스와 테이블을 미리 만들어준다.

create database test;

use test;

create table dept(
deptno int(10) not null,
deptname varchar(30) not null
)

insert into dept values( 1, 'aaa');
insert into dept values( 2, 'bbb');
insert into dept values( 3, 'ccc');
insert into dept values( 4, 'ddd');
insert into dept values( 5, 'eee');
insert into dept values( 6, 'fff');

select * from dept;

 

 

이제 빠져나와서 스쿱 명령어를 간단하게 쳐본다.

sqoop help

에러 안나면 스쿱은 잘 설치가 된 것이다. 

로그 중에 무슨 hbase, zookeeper, 어쩌고저쩌고 하는데 이는 어큐물로 및 HBase연동을 위한 주키퍼 경로가 설정돼 있지 않다는 그냥 경고 메세지이다. 스쿱은 하둡경로만 잘 설정되어 있으면 기본적인 기능들은 문제없이 실행된다.

 

 

이제 정말로 준비가 다 된 것 같다...나는 여기까지 오는데 여러번의 삽질이 있었다.

 

하둡에코시스템들을 수동설치하는 것은 너무나 고된 일이다...정말..

 

 

 

2. 데이터베이스 리스트 확인 및 import하기

먼저 잘 연결이 되는지 확인하기 위해서

MySQL의 테이블을 스쿱에서 출력해보자.

sqoop list-databases --connect jdbc:접속할DB이름://ip주소:포트번호 --username DB에접속하는계정명 --P

--P는 비밀번호를 따로 입력하겠다는 의미이다.

그리고 ip주소같은 경우 나는 192.168.56.121가 hadoop02으로 설정되어 있어서 바로 hadoop02로 썼다.

sqoop list-databases --connect jdbc:mysql://hadoop02:3307 --username hive --P

information_schema
metastore
mysql
performance_schema
sys
test

 

이제 대망의 import를 시켜보자. hdfs에 mysql에 있는 테이블을 저장하기 위해 하둡을 미리 구동시킨다.

 

아래 import명령어를 입력한다.

sqoop import --connect jdbc:mysql://hadoop02:3307/test --table dept --target-dir /user/hadoop01/mysql_table --username hive --P -m 1

여기서 --tabel은 어떤 테이블을 가져올 건지 명시하는 곳이다.

--target-dir은 어디에 저장시킬 지를 명시한다. 나는 하둡 저장소에 저장시킨다. 또한 이미 존재하는 디렉토리를 쓰면 에러난다.

맨 뒤에 -m 1은 맵리듀스의 매퍼를 몇 개 실행시킬 지 적는 것이다. 매퍼수를 지정해서 하둡의 처리속도를 향상시킬 수 있다.

 

아무 에러없이 작업이 끝나면 hdfs에 잘 들어갔는지 확인한다.

hdfs dfs -cat /user/hadoop01/mysql_table/part-m-00000
1,aaa
2,bbb
3,ccc
4,ddd
5,eee
6,fff

 

 

3. export하기

 

미리 mysql에 테이블을 만들어준다. hdfs에 저장되어있는 테이블값이 들어갈 수 있게 만들어줘야 한다.

create table dept2(
deptno int(10) not null,
deptname varchar(10) not null
);

 

그리고 hdfs에 방금 import시킨 dept 테이블을 export해서 dept2 테이블에 넣어보자.

sqoop export --connect jdbc:mysql://hadoop02:3307/test --table dept2 --export-dir /user/hadoop01/mysql_table/part-m-00000 --username hive --P

--table에는 데이터가 집어넣어질 mysql의 테이블명을 적는다.

--export-dir은 hdfs의 테이블 파일이 있는 경로를 적어준다.

 

에러가 없이 성공하면 mysql에 접속해서 데이터가 잘 들어갔는지 확인한다.

아래처럼 dept2 테이블에 6개의 데이터가 잘 들어간 것을 확인할 수 있다.

mysql> select * from dept2;
+--------+----------+
| deptno | deptname |
+--------+----------+
|      1 | aaa      |
|      2 | bbb      |
|      5 | eee      |
|      3 | ccc      |
|      4 | ddd      |
|      6 | fff      |
+--------+----------+
6 rows in set (0.00 sec)

 

 

스쿱이 정상작동하니깐 버추얼박스에 또 다시 스냅샷을 찍어주자!! 스냅샷은 필수 

 

 

끝~

 

 

728x90
반응형
Comments