16

シェルの「getmerge」コマンドでこの作業を実行できることは知っています。

しかし、Java用のHDFS APIによるジョブの後にこれらの出力をマージしたい場合は、どうすればよいですか?

私が実際に欲しいのは、HDFS上の単一のマージされたファイルです。

私が考えることができる唯一のことは、その後、追加の仕事を始めることです。

ありがとう!

4

2 に答える 2

10

しかし、これらの出力を HDFS API for Java でジョブの後にマージしたい場合はどうすればよいですか?

私はこれを自分で試したことがないので推測していますが、探しているメソッドはFileUtil.copyMerge-getmergeであると思います。これは、コマンド を実行したときに FsShell が呼び出すメソッドです。FileUtil.copyMerge2 つの FileSystem オブジェクトを引数として取ります。FsShell は FileSystem.getLocal を使用して宛先 FileSystem を取得しますが、代わりに宛先で Path.getFileSystem を使用して OutputStream を取得できない理由は見当たりません。

とは言っても、それがあなたに大きな利益をもたらすとは思いません。マージはまだローカル JVM で行われています。そのため、実際にはあまり節約-getmergeされていません-put

于 2012-10-16T19:40:56.697 に答える
4

コードで単一の Reducer を設定することにより、単一の出力ファイルを取得します。

Job.setNumberOfReducer(1);

あなたの要件に対応しますが、費用がかかります


また


Static method to execute a shell command. 
Covers most of the simple cases without requiring the user to implement the Shell interface.

Parameters:
env the map of environment key=value
cmd shell command to execute.
Returns:
the output of the executed command.

org.apache.hadoop.util.Shell.execCommand(String[])
于 2012-10-16T09:53:39.353 に答える