ScalaのREPLでHadoop(HDFS)を操作するツールを、Asakusa Framework 0.4に対応させた。
というのは、AsakusaFWが0.2系から0.4にバージョンアップするのに伴って、コアライブラリーのjarファイルのファイル名が変わった為。
(asakusa-runtime.jar → asakusa-runtime-all.jar)
(当ツールには関係ないが、クリーニングツールとかも拡張モジュール(extension module)になったので、jarファイル名に「ext」が入ったりしている)
当ツールでは環境変数ASAKUSA_HOMEが設定されていたら、コアライブラリーのjarファイルをクラスパスに含めるようにしている。(AsakusaFWのデータモデルクラスのデータを読み書きするのに使う為)
今まではasakusa-runtime.jarというファイル名を直接指定していたので、「asakusa-runtime*.jar」に変更した。
ついでに、ASAKUSA_HOME/ext/libの下のjarファイルもクラスパスに含めるよう修正した。
AsakusaFWでSqoopのSequenceFileを扱う(SequenceFileFormatを使う)場合、ext/libにSqoopのjarファイルを入れることがあるので、クラスパスに含めた方が便利だから(笑)
さらについでに、scalaを起動する際のオプションに「-Yrepl-sync」を追加した。
今まで、「-i」オプションを使って起動スクリプトを読み込みたかったのだが、Scala2.9.1~2.9.2ではバグ(SI-4945)があって使えなかった。正式FIXはScala2.10になると思われるが、それまでの暫定処置として、「-Yrepl-sync」を付けると実行できるようだ。
(理屈はよく分からないけど^^;)
(理屈はよく分からないけど^^;)
ScalaのREPLは並列処理を行なっている
↓
しかし、-iオプションをつけた場合のみ並列処理によってデッドロックが発生するバグ!
↓
-Yrepl-syncとは、並列処理をやめてシングルスレッドで処理をするように指定するオプションである
↓
(ちょっと起動遅くなるなどデメリットはあるが)とりあえず暫定的に解決
という理屈だと思います