web-dev-qa-db-ja.com

HDFSの既存のファイルにデータを追加Java

HDFSの既存のファイルにデータを追加するのに問題があります。ファイルが存在する場合は行を追加し、存在しない場合は指定された名前で新しいファイルを作成する必要があります。

HDFSに書き込む方法は次のとおりです。

if (!file.exists(path)){
   file.createNewFile(path);
}

FSDataOutputStream fileOutputStream = file.append(path); 
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
br.append("Content: " + content + "\n");
br.close();

実際、このメソッドはHDFSに書き込み、ファイルを作成しますが、先ほど述べたように、追加はしません。

これは私の方法をテストする方法です:

RunTimeCalculationHdfsWrite.hdfsWriteFile("RunTimeParserLoaderMapperTest2", "Error message test 2.2", context, null);

最初のパラメーターはファイルの名前、2番目はメッセージ、その他の2つのパラメーターは重要ではありません。

だから誰かが私が見逃していることや間違っていることを知っていますか?

19
kennechu

HDFSはappend操作を許可しません。追加と同じ機能を実装する1つの方法は次のとおりです。

  • ファイルが存在するかどうかを確認してください。
  • ファイルが存在しない場合は、新しいファイルを作成して新しいファイルに書き込みます
  • ファイルが存在する場合、一時ファイルを作成します。
  • 元のファイルから行を読み取り、同じ行を一時ファイルに書き込みます(改行を忘れないでください)
  • 一時ファイルに追加する行を書きます。
  • 最後に、元のファイルを削除し、一時ファイルを元のファイルに移動(名前変更)します。
3
Chaos