如何强制配置单元始终创建一个像0000000这样的一致文件名?

h5qlskok  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(480)

我正在通过配置单元外部表对awss3执行插入覆盖操作。配置单元在s3上创建一个输出文件0000000。但是,有时我注意到它会创建其他名称的文件,如0000003\u 0等。我总是需要覆盖现有的文件,但与不一致的文件名我不能这样做。如何强制配置单元始终创建像0000000这样的一致文件名?下面是一个例子,我的代码看起来像,在哪里 tab_content 是一个配置单元外部表。

INSERT OVERWRITE TABLE tab_content
PARTITION(datekey)
select * from source
7cwmlq89

7cwmlq891#

最好不要这样做,修改您的程序以接受目录中任意数量的文件。每个reducer(或者mapper,如果它只在map上运行)创建自己的文件。这些异径管彼此一无所知,它们是在创造时命名的。文件标记为000001\u0000002\u 0。但如果第0次尝试失败,第1次尝试成功,也可以是000001_1。如果表已分区并且没有 distribute by partition key 最后,每个reducer将在每个分区中创建自己的文件。
您可以强制它在单个最终减速器上工作(例如,如果您添加 order by 子句或设置 set mapred.reduce.tasks = 1; ). 但请记住,此解决方案是不可伸缩的,因为太多的数据将导致单个减速器的性能问题。如果尝试0失败,重新启动,尝试1成功,会发生什么情况?它将创建000001\u 1而不是000001\u 0。

相关问题