hadoop—如何将数据附加到存储在hdfs中的文件中

a2mppw5e  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(279)

我想存储当前正在运行的查询的详细信息,比如执行查询的文件名和时间。为此,我在hdfs中创建了一个文件,尝试编写信息。但问题是如何将数据附加到现有文件中。请帮帮我。提前谢谢

3gtaxfhh

3gtaxfhh1#

从命令行执行此操作的最简单方法是:

echo -e 'Hello\nWorld' | hadoop dfs -put - /1.txt

它将创建一个文件 1.txt 在小路上 /HDFS 将存储两行 Hello\nWorld 在里面。

2hh7jdfx

2hh7jdfx2#

您可以从命令行执行此操作:

$ hadoop fs -appendToFile <local_file> <hdfs_file>

如果您使用的是java,请看这个问题:用java在hdfs中编写一个文件

gzszwxb4

gzszwxb43#

使用命令:hdfs dfs-put file\u locationhdfs\u location

航向

注意:hdfs\u位置是启用的

mpgws1up

mpgws1up4#

首先,停止所有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公司

5t7ly7z5

5t7ly7z55#

解决了的。。!!
hdfs支持append。
您只需执行一些配置和简单代码,如下所示:
步骤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();
        }
    }
}

请告诉我任何其他帮助。
干杯。!!

相关问题