トレジャーデータ(Treasure Data)ブログ

トレジャーデータ(Treasure Data)ブログです。

本サイトは移転しました。新サイトにリダイレクトします。

新しいオープンソースEmbulkを発表1

本記事は移転しました。新サイトにリダイレクトします。

はじめに

トレジャーデータはクラウドでデータマネージメントサービスを提供しています。

 

f:id:treasure-data:20150202124336p:plain

 2015年1月,Fluentd のコミッター(弊社エンジニア)が中心となった「Embulk」というOSSが公開されました。このツールは大規模なデータセットのバルクインポートを行えるデータ収集ツールの1つに大別されるものです。

f:id:treasure-data:20150202124926p:plain

↑ メインコミッターである当社エンジニア:古橋は Fluentd や MessagePack といったOSSを生み出してきました。そして,トレジャーデータのプラットフォームの根幹を作り上げたのも彼なのです。

Embulk とは何か?

Embulkとはどのようなものなのでしょうか? バルクインポートを行うためのツールは,はるか以前からたくさん存在しますが,その中においてEmbulk の位置付けはどこにあるのでしょうか? 少しずつ紐といていきましょう。

「簡単に言うとFluentdのバッチ版」

 1. Fluentd

f:id:treasure-data:20150202125314p:plain

Fluentd の登場は,かつて不可能だった,数秒の頻度で定常的にデータを収集し続けるストリーミング収集を可能にしました。Fluentd は以下の特徴をもちます:

  • データの中継途中にサーバーがダウンしていてもバッファリングによって再送可能
  • インプットとアウトプットを「プラグイン」という簡潔な設定ファイルで指定
    ↑(これによってあらゆるデータソース,エクスポート先に対応可能)

Fluentd はデータ収集のキーポイントである「堅牢性」「柔軟性」と兼ね備えていました。

2. Embulk 

f:id:treasure-data:20150202125643p:plain

Fluentd がすべてのデータに対して機能するかというと,そうではありません。新しく発生するデータを収集し続けるものを想定しているので,Fluentd は既存の大規模なデータセットに対してはうまく機能できません。

そこで「Embulk」の登場です。Embulk は大規模なデータセットに対してバルクインポートを行うためのツールです。さらに Fluentd と同様に「プラグイン」という概念での柔軟性と,確実なインポートを担保する「堅牢性」を兼ね備えています。特定のデータソース,エクスポート先に対するバルクインポートツールは多々あると言いましたが,それをプラグインによって柔軟に切り替えることをOSSとして提供できているのは Embulk が初めてかもしれません。

さらに,Embulk には次のような独自性があります。

  • 分散処理が可能な設計になっている点。巨大なデータも扱える。
  • OSSのスタイルでプラグインを改善していくコミュニティがある点。

これによって,社内,それもごく一部で使い捨てられていたスクリプトでさえもパッケージにまとめ,継続的に改善できます。プロプライエタリな製品では,そういった非常に用途の狭いプラグインはおそらくパッケージ化されにくいので,Embulk のようなプラグインによる拡張は難しいものがありました。

Embulk を動かす

1. Install

f:id:treasure-data:20150202130505p:plain

Embulk はwget コマンドによって簡単にインストール可能です。

2. Guess

f:id:treasure-data:20150202130612p:plain

データソースに関する情報をプラグイン(YAML形式)で記述します。始めに必要な設定項目は,

  • type:データのタイプ(file, tdbms, s3, etc., …)を指定
  • paths:データソースの場所を指定

のみです。その他のデータの項目や型といった情報は,この「guess」コマンドによって自動推測されます。

また,このプラグイン記述でtypeやcolumnsを書き換えることで,他のフォーマットや他の項目をもつあらゆるデータソースに対応が可能です。

3. Preview

f:id:treasure-data:20150202130912p:plain

次に,guess によって推測された内容の修正を,バルクロードを少しだけ行った結果と照らし合わせて確認するのが「preview」コマンドです。

4. Run

f:id:treasure-data:20150202131011p:plain

チェックが完了したら実行します。

5. Output

データの書き出し先も設定ファイルで事前に指定します。"out"項目は,最初に設定ファイルを用意する段階で指定しておく流れになります。guessの前か,preview後に、出力先に合わせて追加する流れとなります。

Embulkの機能まとめ

f:id:treasure-data:20150202131214p:plain

Embulk の美点は,Input と Output をプラグインの差し替えだけで完結し,Embulk自身に触ることがないところにあります。

今後の展開

OSSとしてたくさんのプラグインが登場

さてさて,Embulk をOSSとして公開したのには,Fluentd と同じ理由があります。

Embulkを使いたい有志のみなさまが個々のデータソース・エクスポート先に適したプラグインを開発し,公開し,シェアされ,さらに精錬される……,といった「コミュニティ」として成長することを望んでいるからです。公開直後の時点で存在するプラグインは,「input:file」「input:s3」「output:file」の3つしかありません。また,トレジャーデータの製品としてもEmbulkは活用され,「output:treasure-data」をもっています。

すでに有志が先んじて「input:redis」「output:redis」を開発してくれました。数か月後,どんなプラグインがどれくらい増えていくのか,トレジャーデータのエンジニアたちはわくわくしています。