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

时间:2014-11-07 19:53:06

标签: ubuntu hadoop hdfs vi

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

编辑:以前在Cloudera的Hue用户界面中可以使用,但不再是这种情况。

5 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:2)

一种简单的方法是从hdfs复制到hdfs,然后在本地编辑(See here

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

HDFS中的文件无法直接编辑。即使您无法替换HDFS中的文件。唯一的方法是删除文件并用新文件更新。

在本地编辑文件,然后在HDFS中再次复制。如果您想保留相同的名称,请不要忘记删除旧文件。

答案 4 :(得分:0)

此处的其他答案是正确的,您无法编辑HDFS中的文件,因为它不是符合POSIX标准的文件系统。只能追加。

虽然最近我不得不在hdfs文件中修改标题,但我想出了最好的...

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

这是Spark(PySpark)代码。注意合并(1)所以作业不是..并行但有益的是你只得到一个输出文件。那么只需从&#34; orig_file +&#39; _fixed&#39;&#34;移动/重命名文件目录覆盖原始文件。

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

PPS。 &#34;映射&#34;在管道中调用通过&#34; fix_header&#34;修复标题。功能(为清楚起见,此处未显示)。