1

次の簡単なコードを使用して、ファイルをhdfsにアップロードしています。

FileSystem hdfs = FileSystem.get(config);
hdfs.copyFromLocalFile(src, dst);

ファイルはWebサーバーのJavaコンポーネントによって生成され、.gz形式のログバックによってローテーションおよびクローズされます。.gzファイルが破損している場合があることに気づきました。

 > gunzip logfile.log_2013_02_20_07.close.gz 
 gzip: logfile.log_2013_02_20_07.close.gz: unexpected end of file 

しかし、次のコマンドはファイルの内容を表示します

> hadoop fs -text /input/2013/02/20/logfile.log_2013_02_20_07.close.gz

このようなファイルがあることの影響は非常に悲惨です。1日の集計が失敗し、そのような場合、いくつかのスレーブノードがブラックリストに登録されているためです。

そのような場合、私は何ができますか?hadoop copyFromLocalFile()ユーティリティでファイルが破損する可能性はありますか?誰かが同様の問題に遭遇しましたか?

4

1 に答える 1

1

すべきではありません-このエラーは通常、最初にローカルディスクに書き込まれたときに閉じられていないか、書き込みが完了する前にHDFSにコピーされているGZipファイルに関連しています。

元のファイルとHDFSでmd5sumを実行することで確認できるはずです。一致する場合は、元のファイルが破損しています。

hadoop fs -cat /input/2013/02/20/logfile.log_2013_02_20_07.close.gz | md5sum
md5sum /path/to/local/logfile.log_2013_02_20_07.close.gz

一致しない場合は、2つのファイルのタイムスタンプを確認します。HDFSのタイムスタンプは、ローカルファイルシステムのタイムスタンプの後に変更する必要があります。

于 2013-02-21T12:04:32.403 に答える