20150219 初めての「embulk」
TRANSCRIPT
![Page 1: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/1.jpg)
初めての「 Embulk」
株式会社プリファードインフラストラクチャー
![Page 2: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/2.jpg)
自己紹介
舛岡英人(Masuoka Hideto)- Twitterアカウント hidetomasuoka
2012年 - PFIに Join- 製品事業部
趣味- フットサル- 旅行
2
![Page 3: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/3.jpg)
最近の業務
…契約、営業、導入支援、サポート等々 .
導入支援のときソフトウェアにデータを登録するのは結
…構大変 .
3
![Page 4: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/4.jpg)
アジェンダ
Embulkとは Embulkの使い方 Embulkプラグインとは
4
![Page 5: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/5.jpg)
Embulkとは
![Page 6: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/6.jpg)
Embulkとは
Fluentdのバッチ処理版のようなツール CSVデータやアクセスログなどの構造化データを高い
信頼性で転送することができる Fluentdのコミッターである古橋さん等が開発している
![Page 7: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/7.jpg)
Embulkを開発した理由
Fluentdでは解決出来ない問題が発生- ダウンロードしてきた『 CSVファイル』を 1回ロードして解析
してみたい- fluentdを導入したけど大量に残った過去データもロードして解
析したい- 日次のバッチ処理の一部にデータの転送処理がある- 異なるストレージにデータを同期したい
7
![Page 8: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/8.jpg)
Fluentdとの違い
Fluentdと違いバルク処理に特化トランザクション制御- 冪等性- 高速性- スキーマを使った validation
8
![Page 9: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/9.jpg)
Embulkの特徴
プラグインアーキテクチャ 高速な並列・分散処理 guess機構 リトライとリジューム
9
![Page 10: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/10.jpg)
プラグインアーキテクチャ
入力、出力、フィルタ(データ加工)などのプラグイン
を書くことが可能- 足りない機能を補完し、現場で使えるツールに拡張可能
ありとあらゆるデータ処理に対応可能- 壊れた値(例外データ)の扱い- エラー処理やリカバリ- 日付フォーマットの変換、 NULL値の扱い- …リトライ、二重ロードを防ぐ冪等性の制御 などなど、
10
![Page 11: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/11.jpg)
Embulkのイメージ
※
11
![Page 12: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/12.jpg)
高速な並列・分散処理
1回の処理を複数のタスクに分割し、並列に実行する仕
組みを備えている- これらのタスクを実行する Executorプラグインを追加すること
で、 Hadoopや YARN、あるいは Sun GridやMPIなどの分散
処理環境を使い、大規模データを高速にバルク処理することが
可能になり予定
Embulkのコア部分は Javaで書かれているため、単一ス
レッドの性能が高い。プラグインは、 Jrubyだけでなく
、 Javaで書くことも可能( v0.4〜)
12
![Page 13: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/13.jpg)
guess機構
Guess ( v0.1〜。 v0.5〜強化予定)- 1度少しだけデータを読み込み、自動的に設定ファイルを生成
する。- 設定を、必要なら少し手直ししてから使うことで、ゼロから設
定を書くよりもずっと素早くデータ処理をはじめることが可能
13
![Page 14: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/14.jpg)
リトライとリジューム
Embulkでは失敗したタスクだけを後からやり直すリジ
ューム機能を備えている( v0.3〜)
14
![Page 15: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/15.jpg)
Embulkを使ってみる
![Page 16: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/16.jpg)
インストール (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」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/17.jpg)
コマンド一覧
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」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/18.jpg)
コマンド一覧
Preview- データロードのみドライランを実行する- $ java -jar embulk.jar preview config.yml
Run- Bulkでのデータ登録を実行する- $ java -jar embulk.jar run config.yml
18
![Page 19: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/19.jpg)
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」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/20.jpg)
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」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/21.jpg)
preview
$ ./embulk preview config.yml
21
![Page 22: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/22.jpg)
run
./embulk run config.yml -o config.yml
22
![Page 23: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/23.jpg)
Embulkの pluginを作ってみる
![Page 24: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/24.jpg)
Embulkのプラグイン
InputPlugin- データを Embulkに inputする際に使用する plug-in
OutputPlugin データから outputする際に使用する plug-in
Filterplugin- データを加工する際に使用する plug-in
![Page 25: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/25.jpg)
Embulkのアーキテクチャー
25
Input Plugin Output Plugin
Embulk( Fillter Plugin)
![Page 26: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/26.jpg)
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」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/27.jpg)
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」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/28.jpg)
Embulkの outputpluginを作ってみる
![Page 29: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/29.jpg)
お詫び
2/17 現在 0.4.1が Releaseされ、プラグインの仕様等
が変更となりました。 準備していたものが、 0.3系なので、今回はそちらで。
。。。
![Page 30: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/30.jpg)
OutputPlugin
モジュールは Embulk- クラスは任意の名前だが、 OutputPluginを継承する
![Page 31: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/31.jpg)
実装メソッド
以下の3種類を実装する- self.transaction
- Initialize
- add
31
![Page 32: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/32.jpg)
self.transaction
Taskに config.ymlで記載した内容など実行する際に必
要な情報を詰め、後続に渡します
なお config.paramの default属性を付与しない場合は必
須項目となり、設定しない例外が発生します
32
![Page 33: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/33.jpg)
initialize
33
run実行前の処理を行います。
![Page 34: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/34.jpg)
add
データを追加先の登録方法を記載します
34
![Page 35: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/35.jpg)
Embulkの pluginを使ってみる
![Page 36: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/36.jpg)
Plugin
embulk-input-mysql- MySQLからデータをダンプするプラグイン
- embulk-output-mysql- MySQLにデータを投入するプラグイン
36
![Page 37: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/37.jpg)
インストール
$ java -jar embulk.jar gem install embulk-input-mysql
embulk-output-mysql
37
![Page 38: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/38.jpg)
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」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/39.jpg)
実行結果
$ java -jar embulk.jar preview config_mysql.yml
39
![Page 40: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/40.jpg)
実行結果
$ java -jar embulk.jar run config_mysql.yml
40
![Page 41: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/41.jpg)
使ってみた感想
プラグインがあれば、簡単な設定ファイルを書くだけで
、動くので楽だった。 Previewや guess機能があるので、色々実験するのは楽
にできた …ログが全然でないので、どこで失敗したか不明
41
![Page 42: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/42.jpg)
ロードマップ
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」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/43.jpg)
まとめ
Embulkの使い方 プラグインの書き方 プラグインの使い方
43
![Page 44: 20150219 初めての「embulk」](https://reader030.vdocuments.mx/reader030/viewer/2022020101/55a5cc671a28ab5c4e8b4894/html5/thumbnails/44.jpg)
参考資料
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