45
初めての「 Embulk 株式会社プリファードインフラストラクチャー

20150219 初めての「embulk」

Embed Size (px)

Citation preview

Page 1: 20150219 初めての「embulk」

初めての「 Embulk」

株式会社プリファードインフラストラクチャー

Page 2: 20150219 初めての「embulk」

自己紹介

舛岡英人(Masuoka Hideto)- Twitterアカウント  hidetomasuoka

2012年 - PFIに Join- 製品事業部

趣味- フットサル- 旅行

2

Page 3: 20150219 初めての「embulk」

最近の業務

…契約、営業、導入支援、サポート等々 .

導入支援のときソフトウェアにデータを登録するのは結

…構大変 .

3

Page 4: 20150219 初めての「embulk」

アジェンダ

Embulkとは Embulkの使い方 Embulkプラグインとは

4

Page 5: 20150219 初めての「embulk」

Embulkとは

Page 6: 20150219 初めての「embulk」

Embulkとは

Fluentdのバッチ処理版のようなツール CSVデータやアクセスログなどの構造化データを高い

信頼性で転送することができる Fluentdのコミッターである古橋さん等が開発している

Page 7: 20150219 初めての「embulk」

Embulkを開発した理由

Fluentdでは解決出来ない問題が発生- ダウンロードしてきた『 CSVファイル』を 1回ロードして解析

してみたい- fluentdを導入したけど大量に残った過去データもロードして解

析したい- 日次のバッチ処理の一部にデータの転送処理がある- 異なるストレージにデータを同期したい

7

Page 8: 20150219 初めての「embulk」

Fluentdとの違い

Fluentdと違いバルク処理に特化トランザクション制御- 冪等性- 高速性- スキーマを使った validation

8

Page 9: 20150219 初めての「embulk」

Embulkの特徴

プラグインアーキテクチャ 高速な並列・分散処理 guess機構 リトライとリジューム

9

Page 10: 20150219 初めての「embulk」

プラグインアーキテクチャ

入力、出力、フィルタ(データ加工)などのプラグイン

を書くことが可能- 足りない機能を補完し、現場で使えるツールに拡張可能

ありとあらゆるデータ処理に対応可能- 壊れた値(例外データ)の扱い- エラー処理やリカバリ- 日付フォーマットの変換、 NULL値の扱い- …リトライ、二重ロードを防ぐ冪等性の制御 などなど、

10

Page 11: 20150219 初めての「embulk」

Embulkのイメージ

11

Page 12: 20150219 初めての「embulk」

高速な並列・分散処理

1回の処理を複数のタスクに分割し、並列に実行する仕

組みを備えている- これらのタスクを実行する Executorプラグインを追加すること

で、 Hadoopや YARN、あるいは Sun GridやMPIなどの分散

処理環境を使い、大規模データを高速にバルク処理することが

可能になり予定

Embulkのコア部分は Javaで書かれているため、単一ス

レッドの性能が高い。プラグインは、 Jrubyだけでなく

、 Javaで書くことも可能( v0.4〜)

12

Page 13: 20150219 初めての「embulk」

guess機構

Guess ( v0.1〜。 v0.5〜強化予定)- 1度少しだけデータを読み込み、自動的に設定ファイルを生成

する。- 設定を、必要なら少し手直ししてから使うことで、ゼロから設

定を書くよりもずっと素早くデータ処理をはじめることが可能

13

Page 14: 20150219 初めての「embulk」

リトライとリジューム

Embulkでは失敗したタスクだけを後からやり直すリジ

ューム機能を備えている( v0.3〜)

14

Page 15: 20150219 初めての「embulk」

Embulkを使ってみる

Page 16: 20150219 初めての「embulk」

インストール (2015/2/19 現在 )

$ wget

https://bintray.com/artifact/download/embulk/maven/emb

ulk-0.4.2.jar -O embulk.jar

$ chmod 755 embulk.jar

16

Page 17: 20150219 初めての「embulk」

コマンド一覧

Example- Embulkのチュートリアルファイルを指定したディレクトリにセ

ットする- $ java -jar embulk.jar example ./try1

Guess- 簡単に記載した configを元に完全版の configを作成する- java -jar embulk.jar guess ./try1/example.yml -o config.yml

17

Page 18: 20150219 初めての「embulk」

コマンド一覧

Preview- データロードのみドライランを実行する- $ java -jar embulk.jar preview config.yml

Run- Bulkでのデータ登録を実行する- $ java -jar embulk.jar run config.yml

18

Page 19: 20150219 初めての「embulk」

Example

$ java -jar embulk.jar example ./try1

19

Creating ./try1 directory...

Creating ./try1/

Creating ./try1/csv/

Creating ./try1/csv/sample_01.csv.gz

Creating ./try1/example.yml

Run following subcommands to try embulk:

1. guess ./try1/example.yml -o config.yml

2. preview config.yml

3. run config.yml

Page 20: 20150219 初めての「embulk」

guess

in:

type: file

paths: ["/home/pfi/embulk/try1/csv"]

out:

type: stdout

exec: {}

in:

type: file

paths: [/home/pfi/embulk/try1/csv]

decoders:

- {type: gzip}

parser:

charset: UTF-8

newline: CRLF

type: csv

delimiter: ','

quote: '"'

header_line: true

columns:

- {name: id, type: long}

- {name: account, type: long}

- {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:

%S'}

- {name: purchase, type: timestamp, format: '%Y%m%d'}

- {name: comment, type: string}

out: {type: stdout}

20

$ java -jar embulk.jar guess ./try1/example.yml -o config.yml

guessguess

Page 21: 20150219 初めての「embulk」

preview

$ ./embulk preview config.yml

21

Page 22: 20150219 初めての「embulk」

run

./embulk run config.yml -o config.yml

22

Page 23: 20150219 初めての「embulk」

Embulkの pluginを作ってみる

Page 24: 20150219 初めての「embulk」

Embulkのプラグイン

InputPlugin- データを Embulkに inputする際に使用する plug-in

OutputPlugin データから outputする際に使用する plug-in

Filterplugin- データを加工する際に使用する plug-in

Page 25: 20150219 初めての「embulk」

Embulkのアーキテクチャー

25

Input Plugin Output Plugin

Embulk( Fillter Plugin)

Page 26: 20150219 初めての「embulk」

Embulkのプラグインの種類

InputPlugin- embulk-input-s3

- embulk-input-mysql

- embulk-input-postgresql

- embulk-input-redshift

- embulk-input-jdbc

- embulk-input-slack-history

- embulk-plugin-input-jstat

Page 27: 20150219 初めての「embulk」

Embulkのプラグイン

OutputPlugin- embulk-output-mysql

- embulk-output-postgresql

- embulk-output-redshift

- embulk-output-postgres-json

- embulk-output-elasticsearch

- embulk-output-jdbc

- embulk-output-parquet

Page 28: 20150219 初めての「embulk」

Embulkの outputpluginを作ってみる

Page 29: 20150219 初めての「embulk」

お詫び

2/17 現在 0.4.1が Releaseされ、プラグインの仕様等

が変更となりました。 準備していたものが、 0.3系なので、今回はそちらで。

。。。

Page 30: 20150219 初めての「embulk」

OutputPlugin

モジュールは Embulk- クラスは任意の名前だが、 OutputPluginを継承する

Page 31: 20150219 初めての「embulk」

実装メソッド

以下の3種類を実装する- self.transaction

- Initialize

- add

31

Page 32: 20150219 初めての「embulk」

self.transaction

Taskに config.ymlで記載した内容など実行する際に必

要な情報を詰め、後続に渡します

なお config.paramの default属性を付与しない場合は必

須項目となり、設定しない例外が発生します

32

Page 33: 20150219 初めての「embulk」

initialize

33

run実行前の処理を行います。

Page 34: 20150219 初めての「embulk」

add

データを追加先の登録方法を記載します

34

Page 35: 20150219 初めての「embulk」

Embulkの pluginを使ってみる

Page 36: 20150219 初めての「embulk」

Plugin

embulk-input-mysql- MySQLからデータをダンプするプラグイン

- embulk-output-mysql- MySQLにデータを投入するプラグイン

36

Page 37: 20150219 初めての「embulk」

インストール

$ java -jar embulk.jar gem install embulk-input-mysql

embulk-output-mysql

37

Page 38: 20150219 初めての「embulk」

config.yml

in:

type: mysql

user: embulk

password: embulk

database: embulk

table: test

host: localhost

select: "*"

where: "editor != 'emacs'"

out:

type: mysql

host: localhost

user: embulk

password: embulk

database: embulk

table: output

mode: insert 38

Page 39: 20150219 初めての「embulk」

実行結果

$ java -jar embulk.jar preview config_mysql.yml

39

Page 40: 20150219 初めての「embulk」

実行結果

$ java -jar embulk.jar run config_mysql.yml

40

Page 41: 20150219 初めての「embulk」

使ってみた感想

プラグインがあれば、簡単な設定ファイルを書くだけで

、動くので楽だった。 Previewや guess機能があるので、色々実験するのは楽

にできた …ログが全然でないので、どこで失敗したか不明

41

Page 42: 20150219 初めての「embulk」

ロードマップ

Add missing JRuby Plugin APIs- ParserPlugin, FormatterPlugin

- DecoderPlugin, EncoderPlugin

Add Executor plugin SPI

Add ssh distributed executor- embulk run —command ssh %host embulk run %task

Add MapReduce executor

42

Javaでは対応済み

Javaでは対応済み

Page 43: 20150219 初めての「embulk」

まとめ

Embulkの使い方 プラグインの書き方 プラグインの使い方

43

Page 44: 20150219 初めての「embulk」

参考資料

Embulk repository- https://github.com/embulk/embulk

Blog by Sadayuki Furuhashi- http://frsyuki.hatenablog.com/entry/2015/01/19/100631

Qiita- http://qiita.com/tadOne/items/10ff992a3aaead142edb

44

Page 45: 20150219 初めての「embulk」

Copyright © 2006-2015

Preferred Infrastructure All Right Reserved.