我无法将数据附加到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);
第一个参数是文件的名称,第二个参数是消息,另外两个参数不重要.
所以任何人都知道我错过了什么或做错了什么?
实际上,您可以附加到HDFS文件:
从Client的角度来看,append操作首先调用DistributedFileSystem的append,这个操作会返回一个流对象FSDataOutputStream out.如果客户端需要将数据附加到此文件,它可以调用out.write来编写,并调用out.close来关闭.
我检查了HDFS源,有DistributedFileSystem#append
方法:
FSDataOutputStream append(Path f, final int bufferSize, final Progressable progress) throws IOException
有关详细信息,请参阅文稿.
您还可以通过命令行追加:
hdfs dfs -appendToFile...
直接从stdin添加行:
echo "Line-to-add" | hdfs dfs -appendToFile -