当我使用distcp命令时
hadoop distcp /a/b/c/d gs:/gcp-bucket/a/b/c/ , where d is a folder on HDFS containing subfolders.
如果gcp上已经有文件夹c,则它会将d(及其子文件夹)从hdfs复制到c中的gcp,但如果gcp上没有c文件夹,则它会在gcp上创建c文件夹,并将d的子文件夹(但不是d本身)复制到gcp的c文件夹中。
因此,如果e是hdfs上d中的子文件夹,而gcp上存在文件夹c,则输出以下命令:
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
为什么第二命令的输出和第一命令的输出不一样?两个命令相同。
1条答案
按热度按时间nmpmafwu1#
云存储上没有子目录。取而代之的是一个平面名称空间,所有的对象都托管在这个名称空间中。
人们看到的层次视图是由于
gsutil
使命名按用户期望的方式工作的工具。所以当一个人复制一个文件名your-file
到目标gs://[BUCKET]/path/to/target/
云存储服务将其解释为一个名为gs://[BUCKET]/path/to/target/your-file
.如果“folder c”不存在,并且您尝试在“subdirectory”下进行复制,则第一次运行此命令时,将创建以下对象:
如果“文件夹c”存在,则“文件夹d”及其所有内容(包括
d
将在subdirectory c
你的观察:如果gcp上已经有文件夹c,则它会将d(及其子文件夹)从hdfs复制到c中的gcp,但如果gcp上没有c文件夹,则它会在gcp上创建c文件夹,并将d的子文件夹(但不是d本身)复制到gcp的c文件夹中。
是完全正确的,这种行为是意料之中的。
您可以在云存储文档中找到有关应用的规则以及子目录如何工作的更多详细信息