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