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 小时内完成。但是,在新集群中花费的时间太长了。
我们尝试了以下方法来解决这个问题,但没有任何结果:-
- 删除了减速器的上限。删除集 hive.exec.reducers.max=200;
- 设置mapreduce.job.running.reduce.limit=100;
- 在源合并文件以确保我们不读取小文件。源 table 中的文件大小已增加到每个 1G。
- 减少编号。源中的行数 table 以减少数据映射器正在读取。
- 将最大拆分大小减小到 64MB 以增加编号。映射器。
- 插入一个新的 table。
- 插入一个未排序或分桶的新 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=假;
我们有一个作业从一个配置单元 table 中读取大约 30 亿行并插入到一个已排序的桶中 table。
源和目标 table 中的文件都具有镶木地板格式。
这项工作完成时间太长。我们不得不在 3 天后停止工作。
我们最近迁移到了一个新集群。较旧的集群是 5.12,最新的集群是 6.3.1。 这项工作过去 运行 在 5.12 集群中可以在 6 小时内完成。但是,在新集群中花费的时间太长了。
我们尝试了以下方法来解决这个问题,但没有任何结果:-
- 删除了减速器的上限。删除集 hive.exec.reducers.max=200;
- 设置mapreduce.job.running.reduce.limit=100;
- 在源合并文件以确保我们不读取小文件。源 table 中的文件大小已增加到每个 1G。
- 减少编号。源中的行数 table 以减少数据映射器正在读取。
- 将最大拆分大小减小到 64MB 以增加编号。映射器。
- 插入一个新的 table。
- 插入一个未排序或分桶的新 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=假;