HDFS append操作
本篇背景是需要向HDFS写入文件,但写入文件数据是按照小时为单位生成的,那么我们需要将
每小时产出数据,聚类到一个文件,这时就需要用到HDFS append操作
代码
public void append(String body, String fileName, String filePath) {
FSDataOutputStream out = null;
Path f = new Path(filePath);
try {
if (!fileSystem.exists(f)) {
out = fileSystem.create(f);
} else {
out = fileSystem.append(f);
}
out.write(body.getBytes(CharsetNames.UTF_8));
} catch (Exception e) {
log.error("append file to hdfs is error: ", e);
} finally {
IOUtils.closeQuietly(out);
}
}
可能存在问题
上面的代码会存在一个问题,如果我们写入过程是个异步,那么在对HDFS 做append可能会报如下错误:
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.Alrea