如何在HDFS中更新文件

18
我知道HDFS是写一次读多次的。假设我想在HDFS中更新文件,有没有方法可以做到?
提前感谢你!
2个回答

23

选项1:

如果您只想追加到现有文件中

  1. echo "<要追加的文本>" | hdfs dfs -appendToFile - /user/hduser/myfile.txt OR

  2. hdfs dfs -appendToFile - /user/hduser/myfile.txt 然后在终端上输入文本。完成输入后按 'Ctrl+D'

选项2:

从HDFS获取原始文件到本地文件系统,对其进行修改,然后将其放回HDFS。

  1. hdfs dfs -get /user/hduser/myfile.txt

  2. vi myfile.txt #或使用其他工具进行修改

  3. hdfs dfs -put -f myfile.txt /user/hduser/myfile.txt


我知道这已经快一年了,但是对于任何可能正在寻找答案的人——在选项2中,放置已经存在的文件会导致错误。你需要先从HDFS移动/重命名/删除该文件。你可以使用hdfs dfs -mv /home/hduser/myfile.txt /home/hduser/old_myfile.txt来重命名它。 - AgentBawls
8
或者你可以在 put 命令中简单地添加 -f 标志。已更新的答案 ;) - PradeepKumbhar

4

如果您想添加行,必须放置另一个文件并连接文件:

hdfs dfs -appendToFile localfile /user/hadoop/hadoopfile

要修改已经编写的文件的任何部分,您有三个选项:

  1. 从hdfs获取文件并在本地修改其内容

    hdfs dfs -copyToLocal /hdfs/source/path /localfs/destination/path

    或者

    hdfs dfs -cat /hdfs/source/path | 修改...

  2. 使用处理技术更新,如Map ReduceApache Spark,结果将显示为文件目录,您将删除旧文件。这应该是最好的方法。

  3. 安装NFS或Fuse,两者都支持追加操作。

    NFS网关

    Hadoop Fuse:可挂载HDFS,帮助允许HDFS在大多数Unix版本上作为标准文件系统使用mount命令进行挂载。一旦挂载,用户可以使用标准Unix实用程序(如“ls”、“cd”、“cp”、“mkdir”、“find”、“grep”)对hdfs实例进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接