【问题标题】:how do you perform hadoop fs -getmerge on dataproc from google storage你如何在谷歌存储的 dataproc 上执行 hadoop fs -getmerge
【发布时间】:2016-07-16 00:48:17
【问题描述】:

对于转储到谷歌存储桶的部分文件,您如何在 dataproc 上使用 getmerge。 如果我试试这个hadoop fs -getmerge gs://my-bucket/temp/part-* gs://my-bucket/temp_merged 我收到一个错误 getmerge: /temp_merged (Permission denied)

它适用于hadoop fs -getmerge gs://my-bucket/temp/part-* temp_merged,但它当然会将合并后的文件写入集群机器而不是 GS。

【问题讨论】:

    标签: hadoop google-cloud-storage google-cloud-dataproc


    【解决方案1】:

    根据fsshell documentationgetmerge 命令从根本上将目标路径视为“本地”路径(因此在gs://my-bucket/temp_merged 中,它忽略了“方案”和“权限”组件,试图直接写入您的本地文件系统路径/temp_meged;这不是特定于 GCS 连接器;如果您尝试hadoop fs -getmerge gs://my-bucket/temp/part-* hdfs:///temp_merged,您会看到同样的事情,更糟糕的是,如果您尝试类似hadoop fs -getmerge gs://my-bucket/temp/part-* hdfs:///tmp/temp_merged,您可能会认为它在事实上,该文件没有出现在hdfs:///tmp/temp_merged 中,而是出现在您的本地文件系统file:///tmp/temp_merged 下。

    您可以改为使用管道标准输出/标准输入来实现它;不幸的是,由于.crc 文件的权限和使用,-getmerge 不能很好地与/dev/stdout 配合使用,但是您可以使用支持从标准输入读取的hadoop fs -put 中的功能实现相同的效果:

    hadoop fs -cat  gs://my-bucket/temp/part-* | \
        hadoop fs -put - gs://my-bucket/temp_merged
    

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 2023-03-12
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2018-06-21
      相关资源
      最近更新 更多