你如何从谷歌存储中对dataproc执行hadoop fs -getmerge

时间:2016-07-15 04:08:14

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

如何在dataproc上使用getmerge来转储转储到Google存储分区的部分文件。 如果我试试这个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。

1 个答案:

答案 0 :(得分:3)

根据fsshell documentationgetmerge命令从根本上将目标路径视为" local"路径(所以gs://my-bucket/temp_merged忽略了"方案"和#34;权限"组件,试图直接写入本地文件系统路径/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之类的东西,你可能认为它实际上是成功的该文件 not 显示在hdfs:///tmp/temp_merged内,但显示在您的本地文件系统file:///tmp/temp_merged下。

你可以使用管道stdout / stdin来实现它;遗憾的是-getmerge由于/dev/stdout文件的权限和使用情况而无法与.crc良好匹配,但您可以使用支持hadoop fs -put的功能获得相同的效果从stdin读到:

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