ScalaのREPL上でHadoopのHDFSを操作してみた(笑)
で、それを便利?に扱うライブラリーを作ってみた。
ちなみに、ソースはGitHubで公開してみた。初Git!
まだEclipseからの直接の連携は出来てないけど、ソースを公開するには便利だなー^^
今回作ろうと思ったきっかけは、Pigを使っていて、ファイル名を変数で扱いたいなーと思ったこと。と、ファイルに簡単なデータを直接書き込めればいいのになーと思ったこと。
(Pigはlsとかcdとかgetとかを使ってファイル一覧を見たりするのは便利だけど、プログラミング言語ほどの高機能ではないので。
また、PigもHiveもHueも簡単なデータを入れるような機能は無い)
そこで、我等がScalaの出番(笑)
ScalaはREPLがあるので対話型で使えるし、Hadoopは結局Javaのクラスだから、呼び出せるはず!
という読みがバッチリ当たった。まぁ、意外なところで色々と(バグを踏んだりして)はまったけどね^^;
ただ単にファイルが見られるだけとかだったらPigの二番煎じで大して便利でもないかーと思ってたけど、作ってみたら意外と便利かもしれないと思った。
ちょっとしたテストデータを作ったり見たりするには良さそう。
今はテキストファイルだけしか想定してないけど、シーケンスファイルを読み込むのだって難しい話じゃないもんな。AsakusaFWで作ったファイルを直接見るとかも(クラスパスとインポートだけ追加すれば)出来るかも?
さて、本当は次のステップとしてREPL上で直接Mapper・Reducerを書いてHadoopで実行しちゃうという野望があったんだけど。
Hadoopを実行する際はクラスをjarファイル化する必要があるので、そこがクリアできてない…。
一応、:powerモードを使って、「intp.virtualDirectory」で仮想ファイル一覧が取れて、それを実ファイルシステム上に保存したらclassになるというところまでは発見したんだけど。
これって自分が定義したクラスそのものではない(REPL上での実行用のラッパークラスっぽい)ので、直接は使えなさそうなんだよねー。
なんか良い方法ないかなー。
※コメント投稿者のブログIDはブログ作成者のみに通知されます