Hive 作业读取数据和插入分区排序桶中的时间太长 table

Hive job taking too long to read data and insert in partitioned sorted bucketed table

我们有一个作业从一个配置单元 table 中读取大约 30 亿行并插入到一个已排序的桶中 table。

源和目标 table 中的文件都具有镶木地板格式。

这项工作完成时间太长。我们不得不在 3 天后停止工作。

我们最近迁移到了一个新集群。较旧的集群是 5.12,最新的集群是 6.3.1。 这项工作过去 运行 在 5.12 集群中可以在 6 小时内完成。但是,在新集群中花费的时间太长了。

我们尝试了以下方法来解决这个问题,但没有任何结果:-

  1. 删除了减速器的上限。删除集 hive.exec.reducers.max=200;
  2. 设置mapreduce.job.running.reduce.limit=100;
  3. 在源合并文件以确保我们不读取小文件。源 table 中的文件大小已增加到每个 1G。
  4. 减少编号。源中的行数 table 以减少数据映射器正在读取。
  5. 将最大拆分大小减小到 64MB 以增加编号。映射器。
  6. 插入一个新的 table。
  7. 插入一个未排序或分桶的新 table。

我们正在尝试的查询 运行 :-

set hive.exec.dynamic.partition=true;
set hive.exec.max.dynamic.partitions=100000;
set hive.exec.max.dynamic.partitions.pernode=100000;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.created.files=900000;

set mapreduce.input.fileinputformat.split.maxsize=64000000;
set mapreduce.job.running.reduce.limit=100;

set hive.enforce.bucketing=true;
set hive.enforce.sorting=true;

INSERT OVERWRITE TABLE dbname.features_archive_new PARTITION (feature, ingestmonth)
Select mpn,mfr,partnum,source,ingestdate,max(value) as value,feature,ingestmonth
from dbname.features_archive_tmp
where feature = 'price'
and ingestmonth like '20%'
group by mpn,mfr,partnum,source,ingestdate,feature,ingestmonth;

我们发现 Cloudera 6.3 中的 Hive 版本 2.x 使用矢量化,而旧 Cloudera 5.12 中的 Hive 1.x 没有使用它。

所以下面的设置 属性 为我们解决了这个问题。我对此没有任何解释。向量化应该加快查询速度而不是使其变慢。

hive.vectorized.execution.enabled=假;