【问题标题】:Opening a file stored in HDFS to edit in VI打开存储在 HDFS 中的文件以在 VI 中进行编辑
【发布时间】:2015-01-04 16:56:18
【问题描述】:

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

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

【问题讨论】:

  • 这将有助于解释为什么这是不可能的。 quora.com/…
  • 但是我可以使用 Cloudera 的 Hue UI 编辑文件和创建文件。这怎么可能?

标签: ubuntu hadoop hdfs vi


【解决方案1】:

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

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

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

【讨论】:

  • 是的。 Hue 在 HDFS 中替换了它。因为 HDFS 是一次写入多次读取。文件不能直接在 HDFS 中编辑。
【解决方案2】:

一个简单的方法是从和复制到 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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      HDFS 中的文件无法直接编辑。即使您无法替换 HDFS 中的文件。只有这样才能删除文件并用新文件更新。

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

      【讨论】:

        【解决方案5】:

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

        虽然最近我不得不修复 hdfs 文件中的标题,但这是我想出的最好的方法..

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

        这是一个 Spark (PySpark) 代码。注意 coalesce(1) 所以这项工作不是 .. 并行的,但好处是你只得到一个输出文件。因此,只需从“orig_file +'_fixed'”目录移动/重命名文件即可覆盖原始文件。

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

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

        【讨论】:

          猜你喜欢
          • 2011-06-19
          • 2014-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-15
          相关资源
          最近更新 更多