2017-02-04 13 views
3

hadoopバージョン2.7のFileUtilには、複数のファイルを新しい1にマージするcopyMerge関数があります.3.0バージョンのAPIごとにcopyMerge関数はサポートされなくなりました。Hadoop Hadoop 3.0でCopyMergeを行う方法

ディレクトリ内のすべてのファイルをhadoop 3.0バージョンの新しい単一ファイルにマージする方法はありますか?

答えて

2

FileUtil#copyMergeメソッドが削除されました。大きな変化の詳細を参照してください。

https://issues.apache.org/jira/browse/HADOOP-12967

https://issues.apache.org/jira/browse/HADOOP-11392

あなたは

getmerge使用法を使用することができます:HadoopのFS -getmerge [-nl]

は、ソースディレクトリと宛先を取りファイルを入力として受け取り、src内のファイルを宛先ローカルファイルに連結します。オプションで、-nlを設定して、各ファイルの末尾に改行文字(LF)を追加することができます。 -skip-empty-fileは、空のファイルの場合に望ましくない改行文字を避けるために使用できます。

例:

hadoop fs -getmerge -nl /src /opt/output.txt 
hadoop fs -getmerge -nl /src/file1.txt /src/file2.txt /output.txt 

終了コード:エラーの成功と非ゼロの 0を返します。

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#getmerge

+0

上で参照pySparkでの実装です。これはファイルを自分のローカルディレクトリにマージします。ローカルディレクトリには最初に遅延があり、次にローカルマシンからファイルを再度コピーしてファイルをHDFSサーバに戻す必要があります。マージを行い、HDFSサーバー上に新しいファイルを生成する方法はありませんか? – Jeremy

+0

LFSからHDFSに新しいファイルをコピーすることなく、複数のファイルを1つのファイルにマージする直接的な方法はありません。このStackOverflowの質問を参照してください:http://stackoverflow.com/questions/10607716/how-can-i-concatenate-two-files-in-hadoop-into-one-using-hadoop-fs-shell – ravi

+2

それは私の恐れでした。なぜ私はcopyMergeが最新バージョンで削除されたのだろうか。 – Jeremy

2

私は、同じ質問があったとする再実装copyMerge 持っていた(ただしPySparkではなく、オリジナルのcopyMergeと同じAPI呼び出しを使用して)。

なぜHadoop 3に相当する機能がないのかわかりません。 HDFSディレクトリからHDFSファイルへのファイルを非常に頻繁にマージする必要があります。

ここで私はこれが効果的なマナーで動作しなく https://github.com/Tagar/stuff/blob/master/copyMerge.py

関連する問題