我知道HDFS是写一次读多次的。假设我想在HDFS中更新文件,有没有方法可以做到?
提前感谢你!
提前感谢你!
选项1:
如果您只想追加到现有文件中
echo "<要追加的文本>" | hdfs dfs -appendToFile - /user/hduser/myfile.txt
OR
hdfs dfs -appendToFile - /user/hduser/myfile.txt
然后在终端上输入文本。完成输入后按 'Ctrl+D'
选项2:
从HDFS获取原始文件到本地文件系统,对其进行修改,然后将其放回HDFS。
hdfs dfs -get /user/hduser/myfile.txt
vi myfile.txt
#或使用其他工具进行修改
hdfs dfs -put -f myfile.txt /user/hduser/myfile.txt
如果您想添加行,必须放置另一个文件并连接文件:
hdfs dfs -appendToFile localfile /user/hadoop/hadoopfile
要修改已经编写的文件的任何部分,您有三个选项:
从hdfs获取文件并在本地修改其内容
hdfs dfs -copyToLocal /hdfs/source/path /localfs/destination/path
或者
hdfs dfs -cat /hdfs/source/path | 修改...
使用处理技术更新,如Map Reduce或Apache Spark,结果将显示为文件目录,您将删除旧文件。这应该是最好的方法。
安装NFS或Fuse,两者都支持追加操作。
Hadoop Fuse:可挂载HDFS,帮助允许HDFS在大多数Unix版本上作为标准文件系统使用mount命令进行挂载。一旦挂载,用户可以使用标准Unix实用程序(如“ls”、“cd”、“cp”、“mkdir”、“find”、“grep”)对hdfs实例进行操作。
hdfs dfs -mv /home/hduser/myfile.txt /home/hduser/old_myfile.txt
来重命名它。 - AgentBawlsput
命令中简单地添加-f
标志。已更新的答案 ;) - PradeepKumbhar