2

我正在尝试将分区 Hive 表的数据从一个集群复制到另一个集群。我正在使用 distcp 复制数据,但底层数据的数据是分区配置单元表的。我使用了以下命令。

hadoop distcp -i {src} {tgt}

但是随着表被分区,目录结构是根据分区表创建的。所以它显示错误创建重复和中止作业。

org.apache.hadoop.toolsCopyListing$DulicateFileException: 文件会导致重复。中止

我也用过-skipcrccheck -update -overwrite,但没有奏效。

如何将表的数据从分区文件路径复制到目标?

4

4 回答 4

0

hadoop distcp -Dmapreduce.map.memory.mb=20480 -Dmapreduce.map.java.opts=-Xmx15360m -Dipc.client.fallback-to-simple-auth-allowed=true -Ddfs.checksum.type=CRC32C -m 500 \ -pb -update -delete {src} {目标}

于 2019-03-20T06:20:48.853 回答
0

检查以下设置以查看它们是否为假。将它们设置为真。

hive> set hive.mapred.supports.subdirectories;
hive.mapred.supports.subdirectories=false
hive> set mapreduce.input.fileinputformat.input.dir.recursive;
mapreduce.input.fileinputformat.input.dir.recursive=false
于 2018-04-09T18:45:44.687 回答
0

尝试使用此选项-strategy dynamic 默认情况下,distcp 使用的是 uniformsize。

于 2018-04-09T18:28:59.307 回答
0

理想情况下不能有相同的文件名。因此,您的情况是您尝试将分区表从一个集群复制到另一个集群。并且,2 个不同的命名分区具有相同的文件名。

您的解决方案是更正{src}命令中的源路径,以便您提供路径 uptil 分区子目录而不是文件。

例如 - 请参阅以下内容:

/a/partcol=1/file1.txt
/a/partcol=2/file1.txt

如果你使用{src}as"/a/*/*"那么你会得到错误"File would cause duplicates."

但是,如果你使用{src}as"/a"那么你在复制时不会出错。

于 2022-01-07T00:50:22.690 回答