2016-07-15 30 views
0

你如何在dataproc上將getmerge用於轉儲到谷歌存儲桶的部分文件。 如果我試試這個hadoop fs -getmerge gs://my-bucket/temp/part-* gs://my-bucket/temp_merged 我得到一個錯誤 getmerge: /temp_merged (Permission denied)你如何在谷歌存儲數據空間上執行hadoop fs -getmerge

它工作正常的hadoop fs -getmerge gs://my-bucket/temp/part-* temp_merged但當然寫入集羣機器上的合併的文件,而不是在GS。

回答

2

按照fsshell documentation,該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

你可以而是使用管道stdout/stdin來實現它;不幸的是-getmerge/dev/stdout由於權限和.crc文件使用打得很好,但你可以實現使用功能,在hadoop fs -put支持從標準輸入讀取同樣的效果:

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