在hadoop的同一分区中合并多个文件的最佳选择?

问题描述 投票:0回答:2

我有一个在event_date上分区的表,由于某种原因,当我将数据插入到外部表中时,有些日期只有一个或两个文件,而有些则超过200个。

在启动Hive查询以插入数据时,我总是使用此代码段,因此,我不确定某些日期(而不是其他日期)在何处/如何出现错误。我以为'merge.tezfiles'行专门是在插入时处理文件合并的内容。

SET mapred.job.queue.name=my_directory;
use this_directory;
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.max.dynamic.partitions=2000;
SET hive.exec.max.dynamic.partitions.pernode=2000;
SET hive.merge.tezfiles=true;

我在网上找到的所有内容都提到必须在本地复制文件并再次上传。

是否有一种干净整洁的方式在每个日期分区中合并多个文件的方法?

我已经尝试了以下几个日期,分别具有4个和15个文件。 Hive运行后的输出确认多余的文件已被删除,但是当我回头查看Hadoop时,它的数量与启动时一样多。幸运的是,当我检查数据时,数据仍然准确,因此我不确定首先删除的内容是什么?这根本不是要使用的正确命令吗?

alter table table_being_edited PARTITION(event_dt='2017-01-01') CONCATENATE;  

这里是这样的一行,它确认已删除了多余的文件:

Moved: 'my_hdfs_filepath/event_dt=2019-10-24/000052_0' to trash at: my_trash_directory/.Trash/Current

确定花费时间:75.321秒

对于有15个文件的日期,它给了我类似的输出15倍。

我希望将许多文件的日期尽可能缩小到一两个,因为我们用完了命名空间。我对所有这些都是新手,所以在单个日期分区内是否有任何准系统简单的文件合并方法?

hadoop hive hdfs hiveql hadoop-partitioning
2个回答
0
投票

您可以尝试设置以下属性


0
投票

通过在我的其他SET配置单元参数之外添加此行,我能够将零件文件插入到新表中,从而能够将零件文件始终合并到5 GB或更小的单个文件中:

© www.soinside.com 2019 - 2024. All rights reserved.