2

我正在尝试附加到版本 0.23.5 上的 hdfs 文件。我在 hdfs-site.xml 中将属性 dfs.support.append 设置为 true。调用 hdfsWrite() 说不支持追加时出现以下错误。

Exception in thread "main" java.io.IOException: Not supported at org.apache.hadoop.fs.ChecksumFileSystem.append(ChecksumFileSystem.java:345) at org.apache.hadoop.fs.FileSystem.append(FileSystem.java:1046) Call to org.apache.hadoop.conf.FileSystem::append((Lorg/apache/hadoop/fs/Path;)Lorg/apache/hadoop/fs/FSDataOutputStream;) failed!

我检查了过去关于在 hdfs 中追加的文献。看起来 append 应该在 0.23.5 中工作。

我能够插入和阅读。问题是当我尝试打开 O_APPEND 并写入文件时。这是示例代码 -

int append(char *filepath, char *data, int size)
{
   hdfsFS fs = hdfsConnect("default", 0);
   int openFlags = O_WRONLY | O_APPEND;
   hdfsFile fdData = hdfsOpenFile(fs, filepath, openFlags, 0, 0, 0);
   if (!fdData) 
     return -1;
   if (hdfsWrite(fs, fdData, data, size) == -1)
     return -1;
   hdfsCloseFile(fs, fdData);

   return 0;
}

我错过了什么吗?

谢谢。

4

1 回答 1

0

FSDataOutputStream 不支持 append 方法。以下是相关来源:

  public FSDataOutputStream append(Path f, int bufferSize, Progressable progress) throws IOException {
    throw new IOException("Not supported");
  }

您会注意到它的超类 FileSystem 指出 append 是一个可选方法。

于 2014-10-22T21:21:59.327 回答