全新的hdfs在这里。
我将这一小部分代码附加到一个文件中进行测试:
val path: Path = new Path("/tmp", "myFile")
val config = new Configuration()
val fileSystem: FileSystem = FileSystem.get(config)
val outputStream = fileSystem.append(path)
outputStream.writeChars("what's up")
outputStream.close()
它将失败,并显示以下消息:
Not supported
java.io.IOException: Not supported
at org.apache.hadoop.fs.ChecksumFileSystem.append(ChecksumFileSystem.java:352)
at org.apache.hadoop.fs.FileSystem.append(FileSystem.java:1163)
我查看了checksumfilesystem.java的源代码,它似乎是硬编码的,不支持附加:
@Override
public FSDataOutputStream append(Path f, int bufferSize,
Progressable progress) throws IOException {
throw new IOException("Not supported");
}
如何做到这一点?是否有某种方法可以将默认文件系统更改为支持append的其他实现?
2条答案
按热度按时间8yoxcaq71#
append方法必须在outputstream上调用,而不是在文件系统上调用。filesystem.get()仅用于连接到hdfs。首先在hdfs-site.xml中将dfs.support.append设置为true
使用stop-all.sh停止所有demon服务,然后使用start-all.sh重新启动它。把这个放在你的主要方法里。
ubof19bj2#
结果我需要运行一个真正的hadoop namenode和datanode。我是hadoop的新手,没有意识到这一点。否则,它将使用您的本地文件系统,它是一个checksumfilesystem,不支持append。因此,我跟随这里的博客文章,让它在我的系统上运行,现在我可以附加。