如何在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。
答案 0 :(得分:3)
根据fsshell documentation,getmerge
命令从根本上将目标路径视为" 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