你如何从 google 存储中对 dataproc 执行 hadoop fs -getmerge
how do you perform hadoop fs -getmerge on dataproc from google storage
如何在 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 documentation,getmerge
命令从根本上将目标路径视为 "local" 路径(因此在 gs://my-bucket/temp_merged
中它忽略了 "scheme"和 "authority" 组件,尝试直接写入您的本地文件系统路径 /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 来实现它;不幸的是,由于 .crc
文件的权限和使用,-getmerge
不能很好地与 /dev/stdout
一起使用,但是您可以使用 hadoop fs -put
中支持读取的功能来实现相同的效果标准输入:
hadoop fs -cat gs://my-bucket/temp/part-* | \
hadoop fs -put - gs://my-bucket/temp_merged
如何在 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 documentation,getmerge
命令从根本上将目标路径视为 "local" 路径(因此在 gs://my-bucket/temp_merged
中它忽略了 "scheme"和 "authority" 组件,尝试直接写入您的本地文件系统路径 /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 来实现它;不幸的是,由于 .crc
文件的权限和使用,-getmerge
不能很好地与 /dev/stdout
一起使用,但是您可以使用 hadoop fs -put
中支持读取的功能来实现相同的效果标准输入:
hadoop fs -cat gs://my-bucket/temp/part-* | \
hadoop fs -put - gs://my-bucket/temp_merged