ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

AsakusaFW+Embulkの組み合わせ

2015-12-02 22:50:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2015およびEmbulk Advent Calendar 2015の3日目です。

2015/11/28のJJUG CCC Fall 2015でのAsakusaFWに関する発表に対し、みうみうさんが感想を書いて下さっています。
その中で “「バッチのため」といえども「世の大半のギョームアプリはRDBMSにデータを貯めている」”と書かれているんですが、いやぁ、するどい。さすが「なんで来たん?(ツッコミ鋭くて怖えぇ、なんで自分の発表なんか見に来たんだ…!)」と怖れられているだけのことはあります><

JJUGの発表時にはRDB連携について何も触れませんでしたが、AsakusaFWの使い方のモデルのひとつとして、RDBのテーブルからHDFS(Hadoopクラスター)へデータを転送し、Asakusaバッチで処理してHDFSへ書き込み、それをRDBに書き戻す、という形が考えられています。
(もうだいぶ古いですが、RDBMSとAsakusaバッチの連携方法を例示した資料も公開されています)
こういう形にすると、例えばHadoopクラスターにAWSのEMRを使って、バッチ処理するときだけHadoopクラスターを立ち上げる(クラウドの有効利用)といった事も出来るわけです。

その為に、AsakusaFWにはWindGateというRDBアクセスのコンポーネントが用意されています。
AsakusaFWが用意しているだけあって、AsakusaFWで使うには一番簡単です。
しかし、どんなRDBMSでも相手に出来るよう、標準的なSQLだけを使ったJDBCアクセスをするポータブルなコンポーネントなので、あまり速くありません(マルチスレッドでもない)。数百件程度の読み書きなら全く問題ありませんが、数十万件だとかなり厳しいです。

したがって、RDBとHDFSとの間のデータ転送は、それに特化したツールを使う方が良いです。
幸い、Hadoopが有名になったおかげで、各RDBMSベンダーはこぞってHadoopコネクターを出していますw
また、Sqoopという、RDBとHDFS間のデータ転送を分散して行うソフトもあります(最近名前を全然聞きませんが^^;)。

しかし最近個人的には、Embulkがお気に入りです(笑)
WindGateでつらかった数十万件のテーブルも、Embulkだと問題なく読み込めました。
Embulkはデータを並列にバルク転送するツールですが、カラム定義をしてレイアウト変換するので、同じくカラム定義が必要なAsakusaFWと親和性が高いように思います。
(追記)あと、Embulkは並列に転送すると、ひとつのディレクトリー内に複数のファイルが作られますが、Hadoop(AsakusaFW)はそういうファイル群を読み込むことが出来るので、そういう意味でも親和性が高いです。(むしろ、Hadoopもそういう形のファイル出力をします。AsakusaFWでは1つのファイルにまとめて出力することも出来ますが)
ちなみに自分の使い方は、Hadoopクラスター(MapR)のNFSマウント機能を用いて、EmbulkのローカルCSVファイル出力でNFSのディレクトリー(実体はHDFS(MapR FS))に出力するという方法です。
EmbulkのCSVファイルの設定でも、AsakusaFWで読み込める形式がちゃんと指定できるので、全く問題ありません。
Embulkなかなか良いですよ!(笑) 



最新の画像もっと見る

コメントを投稿