Hadoop 1.0.3 を使用しています。
Hadoop シーケンス ファイルのログを HDFS に書き込みます。ログの各束の後に syncFS() を呼び出しますが、ファイルを閉じることはありません (毎日のローリングを実行している場合を除く)。
私が保証したいのは、ファイルがまだ書き込まれている間、ファイルが読者に利用可能であることです。
FSDataInputStream を介してシーケンス ファイルのバイトを読み取ることができますが、SequenceFile.Reader.next(key,val) を使用しようとすると、最初の呼び出しで false が返されます。
FSDataInputStream または cat コマンドを使用してデータを読み取ることができるため、データがファイル内にあることがわかり、syncFS() が呼び出されることは 100% 確実です。
namenode と datanode のログを確認しましたが、エラーや警告はありませんでした。
SequenceFile.Reader が現在書き込まれているファイルを読み取れないのはなぜですか?