FsShellクラス活用

FsShellとは

hadoop fs [-options]

このコマンド実行時に、呼ばれるクラス。

プログラム上から、このクラスを呼ぶ事ができれば、引数のオプションで、実行できる事が、そのまま実行できる。

呼び方

上のコマンドを呼ぶ際に、呼ばれるmainメソッドは、下記の様な実装になっている。

  public static void main(String argv[]) throws Exception {
    FsShell shell = new FsShell();
    int res;
    try {
      res = ToolRunner.run(shell, argv);
    } finally {
      shell.close();
    }
    System.exit(res);
  }

main()メソッドをそのまま読んでも良いとは思うが、失敗するとexitしてしまう為、プログラム中から呼ぶのには抵抗がある。
なので、この中身を借りパクして

public static int execFsShell(String[] args) throws Exception {
	FsShell shell = new FsShell();
	int res;
	try {
		res = ToolRunner.run(shell, args);
	} finally {
		shell.close();
	}
	return res;
}

こんな感じにすればいいんじゃね?

使用例

FS上のワーキングディレクトリ内のinputフォルダの中身を標準出力に表示。

public static void main(String[] args) throws Exception {
	List<String> list = new ArrayList<String>();
	list.add("-ls");
	list.add("input");
	execFsShell(list.toArray(new String[]{}));
}

fsのオプション

MapReduceの結果をマージして取得する-getmergeとかは、FileSystemクラスのメソッドに同等の機能を持つ物が無いので、結構重宝する。

Usage: java FsShell
           [-ls <path>]
           [-lsr <path>]
           [-df [<path>]]
           [-du <path>]
           [-dus <path>]
           [-count[-q] <path>]
           [-mv <src> <dst>]
           [-cp <src> <dst>]
           [-rm [-skipTrash] <path>]
           [-rmr [-skipTrash] <path>]
           [-expunge]
           [-put <localsrc> ... <dst>]
           [-copyFromLocal <localsrc> ... <dst>]
           [-moveFromLocal <localsrc> ... <dst>]
           [-get [-ignoreCrc] [-crc] <src> <localdst>]
           [-getmerge <src> <localdst> [addnl]]
           [-cat <src>]
           [-text <src>]
           [-copyToLocal [-ignoreCrc] [-crc] <src> <localdst>]
           [-moveToLocal [-crc] <src> <localdst>]
           [-mkdir <path>]
           [-setrep [-R] [-w] <rep> <path/file>]
           [-touchz <path>]
           [-test -[ezd] <path>]
           [-stat [format] <path>]
           [-tail [-f] <file>]
           [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
           [-chown [-R] [OWNER][:[GROUP]] PATH...]
           [-chgrp [-R] GROUP PATH...]
           [-help [cmd]]