如何通过Hadoop CLI在两套本地部署S3对象存储间拷贝数据
Hadoop CLI 跨两套独立S3存储拷贝数据方案
Hadoop S3A 客户端支持按存储桶粒度独立配置连接参数,无需修改全局配置、无需编写Java代码,单条命令即可完成两套本地部署S3之间的数据拷贝。
配置规则
针对指定S3桶的自定义配置,统一使用参数前缀 fs.s3a.bucket.<桶名>.,后缀和普通S3A配置项一致,该配置优先级高于全局S3A配置,仅对对应桶的访问生效。
常用的可按桶独立配置的参数包括:
endpoint:S3服务访问地址access.key:访问密钥AKsecret.key:访问密钥SKpath.style.access:是否使用路径风格访问(本地部署S3大多需要开启该配置,值为true)connection.ssl.enabled:是否启用SSL连接
操作示例
假设两套S3的信息如下:
- 源端S3:endpoint为
http://192.168.1.10:9000,AK为src_ak_123,SK为src_sk_456,存储桶名为src-data - 目标端S3:endpoint为
http://192.168.2.20:9000,AK为dst_ak_789,SK为dst_sk_0ab,存储桶名为dst-backup
小批量数据拷贝(hdfs dfs -cp)
直接在命令中传入两个桶的独立配置即可:
hdfs dfs \ -Dfs.s3a.bucket.src-data.endpoint=http://192.168.1.10:9000 \ -Dfs.s3a.bucket.src-data.access.key=src_ak_123 \ -Dfs.s3a.bucket.src-data.secret.key=src_sk_456 \ -Dfs.s3a.bucket.src-data.path.style.access=true \ -Dfs.s3a.bucket.dst-backup.endpoint=http://192.168.2.20:9000 \ -Dfs.s3a.bucket.dst-backup.access.key=dst_ak_789 \ -Dfs.s3a.bucket.dst-backup.secret.key=dst_sk_0ab \ -Dfs.s3a.bucket.dst-backup.path.style.access=true \ -cp s3a://src-data/2024/log/ s3a://dst-backup/2024/log_backup/
大批量数据拷贝(distcp,推荐)
TB级及以上数据量优先使用distcp做分布式拷贝,支持并发、失败重试,参数传递规则和上述一致:
hadoop distcp \ -Dfs.s3a.bucket.src-data.endpoint=http://192.168.1.10:9000 \ -Dfs.s3a.bucket.src-data.access.key=src_ak_123 \ -Dfs.s3a.bucket.src-data.secret.key=src_sk_456 \ -Dfs.s3a.bucket.src-data.path.style.access=true \ -Dfs.s3a.bucket.dst-backup.endpoint=http://192.168.2.20:9000 \ -Dfs.s3a.bucket.dst-backup.access.key=dst_ak_789 \ -Dfs.s3a.bucket.dst-backup.secret.key=dst_sk_0ab \ -Dfs.s3a.bucket.dst-backup.path.style.access=true \ s3a://src-data/2024/log/ s3a://dst-backup/2024/log_backup/
注意事项
- 配置项中的桶名必须和
s3a://路径中的桶名完全一致,大小写敏感 - 执行拷贝前可先将命令中的
-cp/distcp替换为-ls,分别验证源、目标路径的访问权限和配置正确性 - 命令中不要额外传入全局的
fs.s3a.endpoint、fs.s3a.access.key、fs.s3a.secret.key配置,避免覆盖桶级独立配置 - 如果S3服务使用自签名SSL证书,可额外给对应桶配置
fs.s3a.bucket.<桶名>.ssl.experimental.no.cert.check=true跳过证书校验(仅测试环境使用)
内容的提问来源于stack exchange,提问作者Pravin rathore
相关产品推荐
相关产品推荐

