Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 附加到HDFS中的文件(CDH 5.4.5)_Hadoop_Hdfs_Cloudera Cdh - Fatal编程技术网

Hadoop 附加到HDFS中的文件(CDH 5.4.5)

Hadoop 附加到HDFS中的文件(CDH 5.4.5),hadoop,hdfs,cloudera-cdh,Hadoop,Hdfs,Cloudera Cdh,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") output

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");
}

如何做到这一点?是否有办法将默认文件系统更改为支持追加的其他实现?

追加方法必须在outputstream上调用,而不是在文件系统上调用。get()仅用于连接到HDFS。首先在hdfs-site.xml中将dfs.support.append设置为true

<property>
       <name>dfs.support.append</name>
       <value>true</value>
</property> 

事实证明,我需要实际运行一个真正的hadoop namenode和datanode。我是hadoop新手,没有意识到这一点。如果没有这个,它将使用本地文件系统,它是一个ChecksumFileSystem,不支持append。因此,我跟随博客文章,在我的系统上安装并运行它,现在我可以添加

String fileuri = "hdfs/file/path"
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(fileuri),conf);
FSDataOutputStream out = fs.append(new Path(fileuri));
PrintWriter writer = new PrintWriter(out);
writer.append("I am appending this to my file");
writer.close();
fs.close();