使用DistCp向GCP Bucket复制文件时单文件目录异常问题求助
解决方案:DistCp单个文件复制到GCS目录异常问题
问题原因
当用*匹配HDFS目录下的单个文件时,DistCp会将目标路径(即使结尾带/)识别为文件名而非目录,导致直接将源文件重命名为目标路径的对象名,而非存入目标目录下。
解决方法
方法1:直接指定源目录(推荐)
去掉源路径的*,直接以目录作为源,无论目录下文件数量多少,DistCp都会自动将目标路径视为目录,保留原文件名完成复制:
hadoop distcp -Dhadoop.security.credential.provider.path=jceks://$JCEKS_FILE hdfs://nameservice1/user/hive/warehouse/mydataase.db/mytable/ gs://bkt-tv-mytest-lnd/mydataase.db/mytable/load_dt=20250902/
方法2:添加-update或-overwrite参数强制识别目标为目录
如果必须用*匹配特定文件,添加-update(仅复制新增/修改文件)或-overwrite(覆盖已有文件)参数,让DistCp明确将目标路径当作目录处理:
hadoop distcp -update -Dhadoop.security.credential.provider.path=jceks://$JCEKS_FILE hdfs://nameservice1/user/hive/warehouse/mydataase.db/mytable/* gs://bkt-tv-mytest-lnd/mydataase.db/mytable/load_dt=20250902/
方法3:明确指定目标文件名(适合已知单个文件的场景)
如果提前知晓文件名,可以直接在目标路径后指定文件名,确保文件存入预期位置:
hadoop distcp -Dhadoop.security.credential.provider.path=jceks://$JCEKS_FILE hdfs://nameservice1/user/hive/warehouse/mydataase.db/mytable/myfile.parque gs://bkt-tv-mytest-lnd/mydataase.db/mytable/load_dt=20250902/myfile.parque
内容的提问来源于stack exchange,提问作者Jhon
相关产品推荐
相关产品推荐

