Data Engineering/Sqoop

[Linux/Sqoop] Apache Sqoop에 대해 알아보자

seoraroong 2024. 8. 22. 00:00

 

Apache Sqoop

Apache Sqoop은 관계형 데이터 베이스 (RDBMS)와 Hadoop 간의 데이터 전송을 효율적으로 처리하는 오픈 소스 도구이다.

Sqoop을 사용해 데이터를 Hadoop으로 import 하거나 Hadoop에서 데이터베이스로 export 할 수 있다.

 

 

데이터 가져오기 (import)

데이터를 관계형 데이터베이스에서 Hadoop의 분산 파일 시스템(HDFS), Apache Hive, Apache HBase 등으로 가져오는 과정

 

- Sqoop Import 명령어 실행

sqoop import \
  --connect jdbc:mysql://localhost/mydatabase \
  --username myuser \
  --password mypassword \
  --table mytable \
  --target-dir /user/hive/warehouse/mytable \
  --split-by id

 

  • --connect: 데이터베이스의 JDBC 연결 URL을 지정한다
  • --username과 --password: 데이터베이스 접속에 사용할 사용자 이름과 비밀번호를 지정한다
  • --table: 가져올 데이터베이스 테이블의 이름을 지정한다
  • --target-dir: HDFS에 데이터를 저장할 디렉토리를 지정한다
  • --split-by: 데이터 분할 기준이 되는 컬럼을 지정한다.

- JDBC 연결 설정

Sqoop은 JDBC 드라이버를 사용하여 데이터베이스에 연결한다.

명령어에서 지정한 --connect 옵션의 URL을 통해 데이터베이스와 연결을 설정하고, 데이터베이스의 메타데이터를 조회하여 테이블 구조를 확인한다.

 

- 데이터 분할 및 병렬 처리

 

  • 데이터 분할: --split-by 옵션으로 지정된 컬럼을 기준으로 데이터를 여러 조각으로 나누어 병렬로 처리한다. 
  • 병렬 처리: 각 조각의 데이터는 독립적으로 가져와서 Hadoop의 HDFS에 저장된다.

 

- 데이터 전송 및 저장

 

  • 데이터 전송: 각 조각의 데이터는 MapReduce 작업을 통해 HDFS로 전송된다.
  • 저장: 가져온 데이터는 지정한 HDFS 디렉토리에 저장되며, 일반적으로 CSV 파일 형식이 사용된다.

 

데이터 내보내기 (export)

Hadoop의 분산 파일 시스템(HDFS)에서 관계형 데이터베이스로 데이터를 내보내는 과정

 

- Sqoop Export 명령어 실행

sqoop export \
  --connect jdbc:mysql://localhost/mydatabase \
  --username myuser \
  --password mypassword \
  --table mytable \
  --export-dir /user/hive/warehouse/mytable

 

 

 

 

  • --connect: 데이터베이스의 JDBC 연결 URL을 지정한다.
  • --username과 --password: 데이터베이스 접속에 사용할 사용자 이름과 비밀번호를 지정한다.
  • --table: 데이터를 내보낼 데이터베이스 테이블의 이름을 지정한다.
  • --export-dir: HDFS에서 데이터를 읽어올 디렉토리를 지정한다.

- JDBC 연결 설정

Sqoop은 JDBC 드라이버를 사용하여 데이터베이스에 연결한다.

명령어에서 지정한 --connect 옵션의 URL을 통해 데이터베이스와 연결을 설정하고, 데이터베이스의 테이블 구조를 확인한다.

 

- 데이터 읽기 및 전송

 

  • 데이터 읽기: --export-dir 옵션으로 지정된 HDFS 디렉토리에서 데이터를 읽어온다.
  • 전송: 데이터는 MapReduce 작업을 통해 관계형 데이터베이스로 전송된다. 데이터베이스에 삽입될 때는 각 데이터 레코드가 지정된 테이블에 추가된다.

- 데이터 삽입

읽어온 데이터는 데이터베이스의 테이블에 삽입된다.

Sqoop은 데이터를 효율적으로 삽입하기 위해 INSERT 문을 사용한다.