※ Sqoop(정형 데이터 수집)
* MySQL -> Sqoop -> HDFS
* RDB -> HDFS
* HDFS -> RDB
* 대용량 데이터 전송 솔루션
* 커넥터(Connector)를 사용하여 RDBMS에서 HDFS로 데이터를 수집하거나 HDFS에서 RDBMS로 데이터를 보내는 기능 수행
* Oracle, MS-SQL, DB2와 같은 상용 RDBMS와 MySQL과 같은 오픈소스 RDBMS 지원
※ 설치
1. File Download
wget https://downloads.apache.org/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
https://downloads.apache.org/sqoop/1.4.7/
2. Tar xvzf
tar xvzf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
3. 환경변수 설정
* .bashrc 파일의 환경 변수를 추가한다.
export SQOOP_HOME=/home/hdoop/sqoop-1.4.7/
export PATH=$PATH:$SQOOP_HOME/bin
* 환경 변수 변경 적용
source .bashrc
* 환경 변수 확인
echo $SQOOP_HOME
4. lib 폴더 내 jar 파일 대체 및 추가
* sqoop-1.4.7/lib/commons-lang-3.3.4.jar 삭제 후 commons-lang-2.6.jar 추가
http://commons.apache.org/proper/commons-lang/download_lang.cgi
* jdbc 드라이버 추가(Hive 설치 때 사용한 JDBC driver를 복사해서 사용하면 된다)
" mysql-connector-java-8.0.24.jar "
※ Sqoop 실행 및 활용
1. MySQL => Sqoop 사용 => HDFS
* sqoop을 실행하기 전에, start-all.sh 실행하여 하둡을 실행해야 한다.
* sqoop list-databases: 데이터베이스 리스트 출력
sqoop list-databases --connect jdbc:mysql://localhost:3306/?serverTimezone=UTC --username root -password root
* sqoop import: MySQL -> HDFS
sqoop import --connect jdbc:mysql://localhost:3306/test?serverTimezone=UTC\
--username root \
--password root \
--table employee \
--m 1 \
--target-dir /sqoop/employee \
--delete-target-dir
--connect: 연결하려는 MySQL 서버(연결하려는 db까지 명시)
--username, --password
--table: 테이블명
--m: 몇 개의 파일로 저장할 지 결정하는 파라미터(예: -m 1 (파일 1개로 저장))
--target-dir: HDFS 입력 위치
--delete-target-dir: HDFS 입력 위치 폴더가 이미 존재하면 삭제하고 생성할 수 있도록 함.
Import한 테이블을 HDFS 영역에서 확인
* 만약 2개의 파일로 나누어 저장한다면?
sqoop import --connect jdbc:mysql://localhost:3306/test?serverTimezone=UTC --username root --password root --table employee --m 2 --target-dir /sqoop/employee --delete-target-dir
2. HDFS => Sqoop 사용 => MySQL
* mysql> truncate employee; 를 사용해 데이터를 지운 다음, HDFS에서 데이터를 Export한다.
sqoop export --connect jdbc:mysql://localhost:3306/test?serverTimezone=UTC\
--username root \
--password root \
--table employee \
--m 2 \
--export-dir /sqoop/employee
3. DB 변경 시 내용 반영(MySQL -> HDFS)
INSERT INTO employee(ename, dept, hiredate) VALUES('nata', 'f', '2021-06-06');
sqoop import --connect jdbc:mysql://localhost:3306/test?serverTimezone=UTC\
--username root \
--password root \
--table employee \
--m 1 \
--target-dir /sqoop/employee \
--incremental append
--check-column id
4. MySQL -> Sqoop -> Hive -> HDFS
* Hive를 거치는 이유: Hive에 있는 메타 데이터 테이블을 이용해야만 데이터 처리가 가능하기 때문에, 데이터 처리를 요구하는 서비스를 구현할 경우에는 Hive를 연계해야한다. 반대로, 데이터 처리가 필요 없는 서비스의 경우 Sqoop의 기능만 사용해(Import/Export 기능) 서비스를 구현한다.
★ 실행 전 수행사항
1) Hive의 파일 중 hive-exec-3.1.2.jar 파일을 sqoop/lib에 복사해놓아야 한다.
2) Hive의 출력용 table은 미리 삭제
3) metastore 서버 실행: $ hive --service metastore &
* 실행
sqoop import --connect jdbc:mysql://localhost:3306/test?serverTimezone=UTC\
--username root \
--password root \
--table employee \
--m 2 \
--hive-import \
--fields-terminated-by "," \
--columns "eid, ename, dept, hiredate"
실행 후, 제대로 Import 되었는지 HDFS 영역에서 확인해본다.
Sqoop을 통해 HDFS에 파일을 저장했으니, Hive로 데이터를 확인해보자
COUNT(*)를 써서 MapReduce 작업도 확인해보자
5. MySQL <- Sqoop <- Hive <- HDFS
TRUNCATE TABLE employee;
SELECT * FROM employee;
sqoop export --connect jdbc:mysql://localhost:3306/test?serverTimezone=UTC \
--username root \
--password root \
--table employee \
--m 2 \
--export-dir /user/hive/warehouse/employee \
--input-fields-terminated-by ","
'프로그래밍' 카테고리의 다른 글
[Spark] Ubuntu 20.04 Spark (0) | 2021.06.09 |
---|---|
[Sqoop] Ubuntu 20.04 Sqoop 활용(2) - 예시 (0) | 2021.06.08 |
[Python] Text Data Analysis(2) (0) | 2021.06.06 |
[Python] Text Data Analysis(1) (0) | 2021.06.06 |
[Big Data] 빅데이터 모델 운영시스템 및 생명 주기 (0) | 2021.06.06 |