我想存储当前运行查询的详细信息,例如执行查询的文件名和时间。为此,我在HDFS中创建了一个文件,试图写入信息。但问题是如何将数据附加到现有文件。请帮我。在此先感谢
答案 0 :(得分:1)
首先停止所有Hadoop守护进程并在 hdfs-site.xml 中添加以下属性:
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
现在,重启守护进程并尝试以下代码:
public class HDFSAppend {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
conf.addResource(new Path("/path/to/your/hadoop/directory/conf/core-site.xml"));
conf.addResource(new Path("/path/to/your/hadoop/directory/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
FSDataOutputStream out = fs.append(new Path("/demo.txt"));
out.writeUTF("Append demo...");
fs.close();
}
}
HTH
答案 1 :(得分:0)
您可以从命令行执行此操作:
$ hadoop fs -appendToFile <local_file> <hdfs_file>
如果您使用的是java,请看这个问题: Write a file in hdfs with Java
答案 2 :(得分:0)
从命令行执行此操作的最简单方法是:
echo -e 'Hello\nWorld' | hadoop dfs -put - /1.txt
这将在1.txt
的路径/
中创建文件HDFS
,并在其中存储两行Hello\nWorld
。
答案 3 :(得分:0)
使用命令: hdfs dfs -put file_location hdfs_location
注意:hdfs_location已启用
答案 4 :(得分:0)
解决.. !!
HDFS支持追加。
您只需执行一些配置和简单代码,如下所示:
步骤1:在hdfs-site.xml中将dfs.support.append设置为true:
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
使用stop-all.sh停止所有守护程序服务,并使用start-all.sh重新启动它
步骤2(可选):仅当您拥有单节点群集时,必须将复制因子设置为1,如下所示:
通过命令行:
./hdfs dfs -setrep -R 1 filepath/directory
或者你可以在运行时通过java代码执行相同的操作:
fShell.setrepr((short) 1, filePath);
第3步:创建/将数据附加到文件中的代码:
public void createAppendHDFS() throws IOException {
Configuration hadoopConfig = new Configuration();
hadoopConfig.set("fs.defaultFS", hdfsuri);
FileSystem fileSystem = FileSystem.get(hadoopConfig);
String filePath = "/test/doc.txt";
Path hdfsPath = new Path(filePath);
fShell.setrepr((short) 1, filePath);
FSDataOutputStream fileOutputStream = null;
try {
if (fileSystem.exists(hdfsPath)) {
fileOutputStream = fileSystem.append(hdfsPath);
fileOutputStream.writeBytes("appending into file. \n");
} else {
fileOutputStream = fileSystem.create(hdfsPath);
fileOutputStream.writeBytes("creating and writing into file\n");
}
} finally {
if (fileSystem != null) {
fileSystem.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
}
请让我知道任何其他帮助。
干杯!!