bashでhadoopコマンドのタブ補完をする

Bash使いの皆さん。HDFSにアクセスの際、HDFS上のファイルをタブ補完したい!と思ったことはないでしょうか?ついついタブをクリックしてしまう、そんなbash遣い方には朗報かもしれません!?
hadoopコマンドのbash用のタブ補完スクリプト、本家に含まれていました。HADOOP-10998です。
CDH5.3のソースコードには含まれているので、興味がある方は以下のように試してみてください。※あまり期待しすぎないように、、、

ソースの入手

http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.5.0-cdh5.3.0-src.tar.gz
からソースをダウンロードしましょう。ダウンロードしたら展開します。以下のように、hadoop.sh スクリプトがありますね。
[shell]
$ tar xf hadoop-2.5.0-cdh5.3.0-src.tar.gz
$ cd hadoop-2.5.0-cdh5.3.0/hadoop-common-project//hadoop-common/src/contrib/bash-tab-completion/
$ ls
hadoop.sh README
[/shell]

読み込む

このスクリプトを読み込むことで補完ができそうです。やってみましょう。
[shell]
$ source hadoop.sh
[/shell]

使ってみる

では使ってみましょう。
[shell]
$ hadoop fs - <–ハイフンに続いてタブを押す
-appendToFile -createSnapshot -ls -setfattr
-cat -deleteSnapshot -mkdir -setrep
-checksum -df -moveFromLocal -stat
-chgrp -du -moveToLocal -tail
-chmod -expunge -mv -test
-chown -get -put -text
-copyFromLocal -getfacl -renameSnapshot -touchz
-copyToLocal -getfattr -rm -usage
-count -getmerge -rmdir
-cp -help -setfacl
[/shell]
ハイフンの後に指定できるサブコマンド一覧が表示されました!(でも遅いぞ!?)
続いてHDFS上のファイル/ディレクトリを補完します。
[shell]
$ hadoop fs -ls / <– スラッシュに続いてタブを押す
/hbase /solr /tmp /user /var /xxx
[/shell]
補完されました!(が、遅いぞ、、、)
確かに補完はされるのですが、問い合わせた結果をawkで整形しているようです。補完するたびにNameNodeに問い合わせて、、ということを繰り返すため、JVMの起動コストなどもあり、ローカルファイルのようにサクサク、、とはいきません。現実的に使用するのはちょっと難しそうですね。
 
 
 
 

コメント