새소식

반응형
Data pipeline/Embulk

Embulk 테스트 하면서 정리 한 글

  • -
반응형

이 테스트 시나리오는 sql-server to sql-server입니다. 

다른 시나리오와 맞지 않을 수 있으니 꼭 참고 부탁 드립니다.


Ⅰ. Embulk 프로세스



1. Embulk를 실행 시 적용된 쿼리를 읽어서 하나의 Transaction으로 만듭니다.

2. 생성 된 Transaction을 각각의 task로 쪼개는 작업을 합니다.

이때 테이블이 Thread 개수에 맞게 생성되는 것을 볼 수 있습니다.

3. 해당 Thread 개수 만큼의 테이블을 생성하여, 각각 테이블에 parallel 처리로 데이터를 Insert 시킵니다.

4. Temp Table에 데이터를 모두 넣으면 이것을 모두 Union 하여, 최종 목적지 테이블에 insert into 시킵니다.

 

위에 프로세스를 보면 CPU 성능이 매우 중요합니다. 그래서, 테스트 할 때 마다 성능이 매번 다르게 나왔는데요. 이유를 보니 Embulk가 설치 된 서버에서 어떠한 작업(CPU를 많이 사용 하는)이 있을 경우 성능에 매우 크게 저하되는 것을 확인 하였습니다. 한가지를 예를 들면, IDC에서 gateway를 거쳐서 Tokyo Region으로 가는 부분에서 gateway 서버에서 작업이 있어서 CPU를 70%이상 쓰고 있을 때 돌렸을 때4천만건을 ETL 할 경우 1시간 30분 이상이 걸렸습니다. 하지만 CPU가 대부분이 쉬고 있을 때 돌릴 경우 같은 작업이 20분 밖에 걸리지 않았습니다. (테스트 시나리오라서 블로그에 공유는 못하였습니다.)


* 결론적으로 embulk가 설치 된 서버의 CPU가 매우 중요하며, 다음으로 Network 성능이 중요합니다. (Network로 보내고 받기 때문에)




. Embulk 설치 및 스크립트

 

Embulk 설치는 다음과 같습니다.


1. Embulk 다운로드

①Windows 설치 시 : http://burning-dba.tistory.com/ ( windows 설치 시 공식 홈페이지 설치 방법이 안되서 제가 블로그에 올렸습니다. )

②Linux 설치 시 : https://jungwoon.github.io/bigdata/2017/08/31/Embulk_Setup/

2. Java 설치

3. JDBC 설치 (mssql 연결 용)

4. Embulk plugin 설치

5. MSSQL Native 설치 (Native 옵션을 사용하기 위해서는 필수)

 

Embulk 스크립트를 만들 때 몇가지 중요한 사항이 있습니다.

1. Tab을 인식하지 못하므로, 띄어쓰기로 해야 합니다.

2. Out 부분에 column options을 재대로 지정하지 않을 경우 (길이 / 타입등) bulk insert를 하지 못합니다.

3. 테이블이 없으면 Out 부분의 내용을 토대로 테이블을 생성 합니다. (단 인덱스,제약조건등은 불가능)

4. Overwrite , append 모드가 존재 합니다.

5. 서버 시간에 따라서, datatime등의 시간 컬럼의 경우 자동으로 embulk에서 + or –를 합니다. 꼭 날짜를 확인해서 적절하게 select 쿼리에서 + / - 해줘야 합니다.


SQL SERVER용 스크립트 예시는 다음과 같습니다. (native 옵션의 유무가 상당한 차이를 냅니다.)

-       Embulk 옵션 : http://www.embulk.org/docs/built-in.html

exec:

  max_threads: 8

  min_output_tasks: 8

in:

  type: sqlserver

  host: 123.123.123.123

  port: 1433

  user: "sa"

  password: "1234"

  database: TESTDB

  query: |-

   select * from TEST_TABLE


out:

  type: sqlserver

  driver_path: C:\sqljdbc_4.2\kor\jre8\sqljdbc42.jar

  host: 54.238.238.131

  port: 1433

  user: sa

  password: 1234

  database: TESTDB

  table: SRC_TABLE

  mode: insert

  insert_method : native

  column_options:

   Col1: {type: 'int'}

   Col2: {type: 'varchar(10)'}

   Col3: {type: 'datetime}


반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.