我想使用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"函数(为清晰起见,此处未显示)修复标头。