Hadoop distcp 从本地复制到 gcp 奇怪的行为
Hadoop distcp copy from on prem to gcp strange behavior
当我使用 distcp 命令时
hadoop distcp /a/b/c/d gs:/gcp-bucket/a/b/c/ , where d is a folder on HDFS containing subfolders.
如果文件夹 c 已经存在于 gcp 上,则它会将 d(及其子文件夹)从 HDFS 复制到 c 内的 gcp,但如果 gcp 上不存在 c 文件夹,则它会在 gcp 上创建 c 文件夹并复制 d 的子文件夹(但不是自己 ) 在 gcp 的 c 文件夹中。
因此,如果 e 是 HDFS 上 d 中的子文件夹并且文件夹 c 存在于 gcp 上,则以下命令的输出:
hadoop distcp /a/b/c/d gs:/gcp-bucket/a/b/c/
将
gs://a/b/c/d
如果e是HDFS上d中的子文件夹,gcp上不存在c文件夹,那么下面命令的输出
hadoop distcp /a/b/c/d gs:/gcp-bucket/a/b/c/
将会
gs://a/b/c/e
为什么第二个命令的输出与第一个命令的输出不一样?两个命令相同。
云存储上没有子目录。相反,有一个平面命名空间,其中托管所有对象。
人们看到的分层视图是由于 gsutil
工具使命名以用户期望的方式工作。因此,当将文件名 your-file
复制到目标 gs://[BUCKET]/path/to/target/
时,云存储服务会将其解释为名为 gs://[BUCKET]/path/to/target/your-file
.
的文件
在您的情况下,当“文件夹 c”不存在并且您尝试复制到该“子目录”下时,您第一次执行 运行 此命令时,将创建以下对象:
gs://a/b/c/e
如果“文件夹c”存在,则“文件夹d”及其所有内容(包括d
本身)将被复制到subdirectory c
下
您的观察:
If folder c is already there on gcp then it copies d ( and its
subfolders) from HDFS to gcp inside c but if c folder is not there on
gcp then it creates c folder on gcp and copies subfolders of d (but
not d it self ) inside of c folder of gcp.
完全正确,这种行为是意料之中的。
中找到有关所应用的规则以及子目录如何工作的更多详细信息
当我使用 distcp 命令时
hadoop distcp /a/b/c/d gs:/gcp-bucket/a/b/c/ , where d is a folder on HDFS containing subfolders.
如果文件夹 c 已经存在于 gcp 上,则它会将 d(及其子文件夹)从 HDFS 复制到 c 内的 gcp,但如果 gcp 上不存在 c 文件夹,则它会在 gcp 上创建 c 文件夹并复制 d 的子文件夹(但不是自己 ) 在 gcp 的 c 文件夹中。
因此,如果 e 是 HDFS 上 d 中的子文件夹并且文件夹 c 存在于 gcp 上,则以下命令的输出:
hadoop distcp /a/b/c/d gs:/gcp-bucket/a/b/c/
将
gs://a/b/c/d
如果e是HDFS上d中的子文件夹,gcp上不存在c文件夹,那么下面命令的输出
hadoop distcp /a/b/c/d gs:/gcp-bucket/a/b/c/
将会
gs://a/b/c/e
为什么第二个命令的输出与第一个命令的输出不一样?两个命令相同。
云存储上没有子目录。相反,有一个平面命名空间,其中托管所有对象。
人们看到的分层视图是由于 gsutil
工具使命名以用户期望的方式工作。因此,当将文件名 your-file
复制到目标 gs://[BUCKET]/path/to/target/
时,云存储服务会将其解释为名为 gs://[BUCKET]/path/to/target/your-file
.
在您的情况下,当“文件夹 c”不存在并且您尝试复制到该“子目录”下时,您第一次执行 运行 此命令时,将创建以下对象:
gs://a/b/c/e
如果“文件夹c”存在,则“文件夹d”及其所有内容(包括d
本身)将被复制到subdirectory c
您的观察:
If folder c is already there on gcp then it copies d ( and its subfolders) from HDFS to gcp inside c but if c folder is not there on gcp then it creates c folder on gcp and copies subfolders of d (but not d it self ) inside of c folder of gcp.
完全正确,这种行为是意料之中的。
中找到有关所应用的规则以及子目录如何工作的更多详细信息