如何将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中。
根据fsshell文档,该getmerge
命令从根本上将目标路径视为“本地”路径(因此,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
。
您可以改为使用管道标准输出/标准输入来实现它;不幸的-getmerge
是,/dev/stdout
由于.crc
文件的权限和使用情况,它不能很好地发挥作用,但是您可以使用hadoop fs -put
支持从stdin读取的功能来达到相同的效果:
hadoop fs -cat gs://my-bucket/temp/part-* | \
hadoop fs -put - gs://my-bucket/temp_merged
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句