Hadoopのコマンドって使いにくいじゃないですか?特に遅いところがイライラします。
Hadoopは、分散処理のフレームワークでしたが、最近は分散OSになろうとしていると思っています。OSの機能に相当するものが、分散システム上に作られてきています。
OSの機能 | Hadoopの機能 |
---|---|
ファイルシステム | HDFS |
スケジューラー | YARN |
システムコール | 各種のAPI |
マルチユーザーでの認証 | Kerberos認証 |
仮想メモリ | RDD ? |
パイプ | Tez ? |
OSの機能として足りないものもまだまだ多いですが、今後つくられていくでしょう。
さて、OSのカーネルにユーザーがアクセスする場合にはシステムコールを利用しなければなりません。ユーザー(人間)が直にシステムコールを発行することはできないので、シェルと呼ばれるUIを介してカーネルにアクセスします。カーネル(核)を包んでいるからシェル(殻)と呼ばれます。
Hadoopの場合、hadoop
コマンドというのがあって、hadoop fs -ls hdfs://master:54310/
とか打つとHDFS上のルートディレクトリ内のファイルの一覧が見れたりします。この際、JVMの起動->HDFSに接続->システムコール的なものの発行->結果の出力といった動きをします。
これが、非常に遅い。ローカルFSにlsコマンドを打つと10msもかかりません。しかし、hadoopのコマンドは数秒を要します。
Linuxのコマンドを打つ際に、コマンド毎にログインしたりしますか?しないです。作業中はずっとログインしたままにして置くべきだと思います。
また、HDFSの操作をするのにローカルFSのレイヤで作業するというのが違和感があります。作業中に視点を変える心理的コストは高い。
したがって、Hadoop OSを操作する際は、それ用のシェルが必要だと思うのです。HDFS自体を包んで透過的に操作できるような。もともと、HDFSに透過的にアクセスするためのAPIは用意されてるので、手間を除けば作るのは難しくない。
探したけど、まだ見つかっていない。自分で作ろうかな?
追記(2015-05-05)
そういうコンセプトのものはありました。
使いたいとは思えないですが。なぜなら、既存のbashの機能が使えないからです。
一瞬作ろうと思って考えたんですが、結局使い勝手がいいものを作ろうとおもったら、新たにシェルを実装し直す必要があるんですね。そこまでするなら、NFSでマウントした方がよい。
やはりHDFSの最大の欠点は既存資産が流用できないことですね。