オープンソースのバルクデータローダー「Embulk」登場。fluentdのバッチ版、トレジャーデータが支援

2015年1月28日

何ギガバイトもあるCSVをデータベースに読み込ませるようなバルクデータをバッチ処理するためのツール「Embulk」がオープンソースで公開されました。

コミッターとして開発しているのは、ログ収集ツールとして知られるfluentdなどの開発者として知られる古橋貞之氏、西澤無我氏、中村浩士氏らで、3人が所属するTreasure Dataも開発を支援しています。

古橋氏はEmbulkについて「簡単に言うとfluentdのバッチ版です」と説明。1月27日に行われた「データ転送ミドルウェア勉強会」で、Embulkの紹介を行いました。

Embulkはプラグインベースのバルクデータローダー

fig

古橋氏はまず、例えばCSVファイルをPostgreSQLに読み込ませようとすると、CSVの日付のフォーマットがPostgreSQLの想定しているフォーマットと違っていたり、Null値の表現が違っていたりして失敗して、データ変換のためのアドホックなスクリプトを何度も書くことになると、現状のバルクデータのロードが簡単でないことを紹介。

しかもこうした作業はXMLやJSONや各種ログフォーマットなどデータの種類が増えるごとに発生し、またロード先がPostgreSQLからMongoDBやAmazon RedShiftなど増えることでも同様に発生すると指摘。さらにデータの二重ロードやエラーの際のハンドリング、リトライ、大規模なロード時の性能最適化など、バルクロードのデータには数々の課題があることを示しました。

fig

こうした課題を解決するために開発されたのが「Embulk」です。

「Embulkはプラグインベースのバルクデータローダー。プラグインで、あたらしいデータフォーマットやデータソースに対応できるし、これをオープソースにすることで再利用できる」(古橋氏)

fig

Embulkのプラグインは階層構造になっており、インプット側は入力に対応する「FileInputPlugin」、gzipのデコードなどに対応する「DecoderPlugin」、そしてデータをパースする「ParserPlugin」の3層。そして実行部分も「Executor Plugin」になっており、例えばHadoopに対応したプラグインを書くと、MapReduce上で並列処理として実行できる、といった構造になっています。

fig

「プラグインを役割分担することで、それぞれをシンプルで再利用しやすくなる。例えばファイルフォーマットはそのままで入力はAmazon S3に対応するとか」(古橋氏)

古橋氏はEmbulk紹介の冒頭で「これがfluentd以上にはやってくれると嬉しいです」と切り出しています。実際に、fluentdのようにリアルタイムでログを収集する場面よりも、大規模なデータファイルをアプリケーションやデータベースにバッチ処理で読み込ませる場面の方が十分多いと思われます。Embulkのプラグインやエコシステムが充実していけば、fluentdよりも普及する可能性はかなり高いのではないでしょうか。

Embulk, an open-source plugin-based parallel bulk data loader from Sadayuki Furuhashi

あわせて読みたい

機械学習・AI




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本


<!- script for simple analytics events -->