打开HDFS中存储的文件以在VI中进行编辑



我想使用VI直接在HDFS中编辑文本文件,而不必将其复制到本地,编辑它,然后从本地复制回来。这可能吗?

编辑:这在Cloudera的Hue UI中曾经是可能的,但现在已经不是这样了。

您可以尝试几个选项,这些选项允许您将HDFS安装到本地机器上,然后您可以使用本地系统命令,如cp、rm、cat、mv、mkdir、rmdir等。但它们都不支持随机写入操作,而是支持追加操作。

  • NFS网关
  • Hadoop Fuse

NFS网关使用NFS V3并支持附加到文件,但无法执行随机写入操作。

关于你对色调的评论,hue可能正在将文件下载到本地缓冲区,编辑后可能会替换HDFS中的原始文件。

一个简单的方法是从hdfs复制和复制到hdfs,并在本地编辑(请参阅此处)

hvim <filename>

hvim 源代码

hadoop fs -text $1>hvim.txt
vim hvim.txt
hadoop fs -rm -skipTrash $1
hadoop fs -copyFromLocal hvim.txt $1
rm hvim.txt

HDFS中的文件可以使用hadoop fs-put-f中的-f选项替换这将消除删除然后复制的需要。

HDFS中的文件不能直接编辑。甚至你不能替换HDFS中的文件。唯一的方法是删除文件并用新文件更新。

在本地编辑文件,然后在HDFS中再次复制。若你们想保持相同的名称,别忘了删除旧文件。

这里的其他答案是正确的,您不能在HDFS中编辑文件,因为它不是一个符合POSIX的文件系统。只有追加是可能的。

虽然最近我不得不修复hdfs文件中的一个头,这是我想出的最好的办法。。

sc.textFile(orig_file).map(fix_header).coalesce(1).saveAsTextFile(orig_file +'_fixed')

这是一个Spark(PySpark)代码。请注意coalize(1),因此作业不是。。并行但好处是您只得到一个输出文件。所以,只需将文件从"orig_file+'_fixed'"目录中移动/重命名即可覆盖原始文件。

ps。您可以省略.confluence(1)部分,转换将并行运行(假设大文件/多个拆分),速度会更快,但随后您必须将输出hdfs文件合并为一个文件。

pps。管道中的"map"调用通过"fix_header"函数(为清晰起见,此处未显示)修复标头。

最新更新