如何使用 google 云将文件从 Dataproc 中的 GCS 存储桶复制到 HDFS?

How to copy a file from a GCS bucket in Dataproc to HDFS using google cloud?

我已将数据文件上传到我在 Dataproc 中的项目的 GCS 存储桶。现在我想将该文件复制到 HDFS。我该怎么做?

单个 "small" 文件

您可以使用 hdfs 复制命令将单个文件从 Google 云存储 (GCS) 复制到 HDFS。请注意,您需要 运行 从集群中的一个节点执行此操作:

hdfs dfs -cp gs://<bucket>/<object> <hdfs path>

这是可行的,因为 hdfs://<master node> 是默认文件系统。如果需要,您可以显式指定方案和 NameNode:

hdfs dfs -cp gs://<bucket>/<object> hdfs://<master node>/<hdfs path>

请注意,GCS 对象使用 gs: 方案。路径应与使用 gsutil.

时的路径相同

对于 "large" 文件或大文件目录

当您使用 hdfs dfs 时,数据通过您的本地计算机传输。如果要复制大型数据集,您可能希望使用 DistCp 在集群上并行执行此操作:

hadoop distcp  gs://<bucket>/<directory> <HDFS target directory>

有关详细信息,请参阅 DistCp documentation

考虑在 GCS 上保留数据

最后,考虑将您的数据留在 GCS 上。因为 GCS 连接器实现了 Hadoop 的分布式文件系统接口,所以它可以在 大多数 情况下用作 HDFS 的直接替代品。值得注意的例外是当您依赖(大多数)原子 file/directory 操作或想要使用延迟敏感的应用程序时 HBase. The Dataproc HDFS migration guide 可以很好地概述数据迁移。