MYSQL Hadoop 통합하기

김형수·2022년 12월 16일
0

Hadoop

목록 보기
7/11

Sqoop

Hive는 Hadoop 클러스터를 관계형 데이터베이스처럼 사용하지만 실제로 데이터베이스를 갖는 것은 아니었다. 그러나 만약 MySQL과 같은 진짜 관계형 데이터베이스를 갖고 있고 Hadoop 클러스터에 데이터를 불러오거나 내보내고 싶을 수도 있을 때 Sqoop을 활용하여 할 수 있다.

MYSQL

  • 거대한 하드 드라이브에 연결되는 하나의 서버에 설치.
  • 클러스터에 분산되지 않고 모든 것이 로컬에 있으므로 온라인 처리 프로세싱(OLTP)에 적절.
  • 데이터베이스에서 빠르게 결과를 구해야 한다면 MySQL 같은 도구가 적절

Sqoop

  • SQL과 Hadoop을 합친 이름.
  • 대용량 데이터 세트를 Hadoop 클러스터에 가져오거나 내보내고 관리한다.
    - MapReduce 작업을 통해 가능 함.
    • 데이터베이스를 Hadoop으로 내보내려고 하면 Sqoop은 내부적으로 여러 매퍼를 작동한다.(데이터를 한 곳에서 다른 곳으로 옮기는 일이니 매퍼만 사용)
    • 매퍼들은 Hadoop 클러스터의 HDFS 클러스터와 소통하며 HDFS에 거대한 테이블 생성한다.

Apache OverView (https://blogs.apache.org/sqoop/entry/apache_sqoop_overview)
  • Mapper에서 HDFS로 들어가는 과정은 병렬적으로 처리됨.
  • 각 Mapper는 같은 호스트에 있는 HDFS의 블록들과 개별적으로 소통하고 있으니 병목현상이 일어나지 않음.

SQL to HDFS

sqoop import --connect jdbc:mysql://<hostname>/<databasename> -- driver com.mysql.jdbc.Driver --table <tablename>
  • sqoop은 명령창에서만 작동됨.
    - {sqoop import}는 데이터를 클러스터로 가져온다는 뜻.
    • 'driver'를 명시해서 문제를 사전에 방지.

SQL to Hive

  • 파일을 HDFS 클러스터로 옮기는 중간 단계를 건너 뛰고 Hive 테이블을 만드는 것.
sqoop import --connect jdbc:mysql://<hostname>/<databasename> -- driver com.mysql.jdbc.Driver --table <tablename> --hive-import
  • 끝에 '--hive-import'라는 매개 변수를 추가하기만 하면 된다.

Incremental import

  • 데이터베이스를 불러올 때 순차 번호나 타임스탬프를 사용해 어디까지 가져왔는지 기억할 수 있음.
  • '--check-column'이란 매개 변수는 타임스탬프나 순차 번호 등을 가진 열(column).
  • '--last-value'는 열(column)의 값이 지정된 값보다 클 때만 데이터를 가져오겠다는 뜻
  • 이걸 사용해 데이터베이스를 불러올 때 순차 번호나 타임스탬프를 사용해어디까지 가져왔는지 기억할 수 있다.

Hive to SQL

sqoop export --connect jdbc:mysql://<hostname>/<databasename> -- driver com.mysql.jdbc.Driver --table <tablename> --export-dir /<where>/<is>/<hive data> --input-fields-terminated-by '\0001'
  • 'import' 대신 {sqoop export}라고 입력하고 연결하려는 데이터베이스를 지정
  • '-m 1'은 하나의 매퍼만 사용한다는 뜻.
  • 데이터를 저장할 MySQL의 테이블을 지정한다 이때 Sqoop이 테이블을 따로 만들지 않도록 그 테이블이 존재하는지 확인해야 한다.

0개의 댓글