読者です 読者をやめる 読者になる 読者になる

Hadoop用シェルが欲しい

計算機

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)

そういうコンセプトのものはありました。

github.com

使いたいとは思えないですが。なぜなら、既存のbashの機能が使えないからです。

一瞬作ろうと思って考えたんですが、結局使い勝手がいいものを作ろうとおもったら、新たにシェルを実装し直す必要があるんですね。そこまでするなら、NFSでマウントした方がよい。

やはりHDFSの最大の欠点は既存資産が流用できないことですね。