ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터의 이동을 쉽게 해보자! Embulk 사용하기 (Test용 DB설치 포함, postgresql)
    Data Engineering 2021. 5. 21. 10:35
    반응형

    Homebrew(홈브류) 설치 및 사용법, MacOS에서 프로그램을 쉽게 다운로드 및 삭제할 수 있는 패키지 관리자

    설치전 사이트 참고 바랍니다.

    postgresql은 Homebrew를 이용해서 설치를 진행합니다.

     

     

    바로 테스트용

     

    brew install postgresql
    initdb /usr/local/var/postgres
    pg_ctl -D /usr/local/var/postgres start
    createdb test1
    
    # login db
    psql test1

     

    Embulk란?

    출처 : https://jungwoon.github.io/bigdata/2017/08/31/Embulk_Setup.html

     

    Embulk 설치 및 기본 사용법 | Jungwoon Blog

    Embulk 설치 및 기본 사용법에 대해서 알아보겠습니다. Embulk? Embulk는 Sqoop과 거의 같은 기능을 하는 솔루션으로 여러 데이터 소스로 읽어와서 부어주는 기능을 하는 솔루션입니다 Embulk 특징 플러

    jungwoon.github.io

    다른 친절한 분이 올리신 4년전 글에 DB와 결과를 postgresql로 바꾸고 조금 수정해서 올렸습니다.

     

    Embulk는 Sqoop과 거의 같은 기능을 하는 솔루션으로 여러 데이터 소스로 읽어와서 부어주는 기능을 하는 솔루션입니다.

    Embulk 특징

    • 플러그인 형태로 여러 데이터 소스를 이용할 수 있습니다(BigQuery, Oracle, MySQL, PostgreSQL, CSV, JSON…)
    • 병렬로 로딩이 가능합니다.
    • 스키마를 예측해서 해당 스키마가 없으면 알아서 만들어 줍니다.

    Embulk 설치

    설치 방법은 MacOS입니다.

    MacOS외의 환경에서 설치방법 및 자세한 설명은 

    Embulk  에서 확인 가능합니다.

    • 기본적으로 java jdk8 이상이 설치가 되어 있어야 합니다.

    -로컬에서 설치방법

    차례대로 쉘에 입력

    curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
    chmod +x ~/.embulk/bin/embulk
    echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
    source ~/.bashrc

    설치 완료 후 확인

    embulk -version

    Embulk plug-in 설치

    input으로 들어가서 output으로 나오는 설정을 하기 위해서는 플러그인을 설치해야 합니다.

    설치 예시

    embulk gem install [plug-in] # 필요한 플러그인은 [plug-in] 부분에 넣어서 설치를 합니다
    embulk gem list # 설치할 수 있는 플러그-인 리스트를 확인합니다

    설치해야할 플러그인 목록

    embulk gem install jdbc
    embulk gem install embulk-input-jdbc
    embulk gem install embulk-output-jdbc
    embulk gem install embulk-input-postgresql
    embulk gem install embulk-output-postgresql

    Embulk Example (CSV -> PostgreSQL)

    Embulk는 기본적으로 예제를 지원합니다 예제로 생성되는 csv 파일로부터 데이터를 읽어와을 postgresql에 넣는 작업을 진행하겠습니다.

    우선 다음 명령어로 Sample을 만듭니다.

     

    $ embulk example
    
    
    --- 결과물
    2017-08-31 09:32:03.449 +0900: Embulk v0.8.31
    Creating embulk-example directory...
        Creating embulk-example/
        Creating embulk-example/csv/
        Creating embulk-example/csv/sample_01.csv.gz
        Creating embulk-example/seed.yml
    
    Run following subcommands to try embulk:
    
         1. embulk guess embulk-example/seed.yml -o config.yml
         2. embulk preview config.yml
         3. embulk run config.yml

    그럼 디렉토리에 embulk-example이 생성이 됩니다, 다음 명령어를 통해서 해당 디렉토리로 들어갑니다, 그럼 csv와 seed.yml이 생성되어 있는걸 확인할 수 있습니다.

     

    cd embulk-example
    csv      seed.yml

    Embulk는 기본적으로 설정에 대한 부분은 yml파일에 명시를 해놓고 실행하는 식으로 되어 있습니다

    기본적으로 생성이 되는 seed.yml을 열어보면 다음과 같습니다

    • in: - 읽어들이는쪽의 설정 *주의! (플러그인에 따라 달라짐)
    • out: - 로딩하는쪽의 설정 *주의! (플러그인에 따라 달라짐)
    in:
      type: file # file 타입의 파일 여기서는 csv 파일
      path_prefix: "/Users/jungwoon/embulk-example/csv/sample_" # csv 파일 경로
    out:
      type: stdout # stdout은 그냥 화면 출력
    

    yml이 만들어졌으면 embulk guess란 명령으로 해당 데이터에 대한 추론이 가능할뿐아니라 자동으로 설정까지 만들어 줍니다 일단 아래 명령어를 통해 seed.yml에 대해서 확인을 해봅니다.

    embulk guess seed.yml

    vim을 이용해서 config.yml을 알맞게 수정해줍니다.

     

    vim config.yml
    

    그럼 위와 같이 결과가 나옵니다. 이 추론을 이용해서 -o 옵션을 통해 설정 파일을 만듭니다

    * guess를 사용하면 자동으로 설정파일을 생성해줍니다.

    embulk guess seed.yml -o config.yml

    그럼 config.yml이란 파일이 생성이 되면서 위에서 추론했던 결과가 그대로 들어가게 됩니다.

     

    그럼 이제 out: 부분을 수정해서 postgresql에 들어가도록 config.yml을 수정합니다.

     

    * 주의 path_prefix는 자동으로 내 로컬주소로 변경됨.

    out 이후로만 수정하면 됩니다.

    user와 password만 설정하시면 됩니다.

    table은 자동으로 생성됩니다.

    in:
      type: file
      path_prefix: /Users/joon09/embulk-example/csv/sample_
      decoders:
      - {type: gzip}
      parser:
        charset: UTF-8
        newline: LF
        type: csv
        delimiter: ','
        quote: '"'
        escape: '"'
        null_string: 'NULL'
        trim_if_not_quoted: false
        skip_header_lines: 1
        allow_extra_columns: false
        allow_optional_columns: false
        columns:
        - {name: id, type: long}
        - {name: account, type: long}
        - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
        - {name: purchase, type: string} # timestamp가 들어가면 에러가 나서 String으로 바꿔줌
        - {name: comment, type: string}
    out:
       type: postgresql
       host: localhost
       port: 5432
       user: dbuser
       password: ""
       database: test1 
       table: my_table1
       mode: insert

    설정이 끝났으면 embulk를 실행해주면 데이터가 이동됩니다.

     

    embulk run config.yml
    

    전송이 성공되면 이런식으로 뜹니다.

     

    실제 dbeaver를 이용해서 로컬 db에 접속을 하면 입력이 완료된 것을 확인할 수 있습니다.

     

     

     

    반응형
Designed by Tistory.