Hive 作业产生的map数越多越好还是越少越好?

简介: Hive 作业map数设置原则

前言

通常情况下,作业会通过input目录产生一个或多个任务。

主要决定因素:

  • input的文件总个数
  • input的文件大小
  • 集群设置的文件块大小

1. 是不是越多越好呢?

答案:不是!

原因:假如一个任务有很多小文件,并且文件大小远远小于块大小128M(默认值),则每个小文件也会被当作一个块,用一个map任务来完成,一个map任务启动和初始化的时间远大于逻辑处理时间,就会造成很大的资源浪费,

注意:同时可执行的map数量是有限制的。

解决方法:合并小文件

在map执行前合并小文件,减少map数。

HiveInputFormat:没有对小文件合并的功能。

CombineHiveInputFormat:具有合并小文件的功能(系统默认开启),如果不是这种格式,可以对hive.input.format选项进行设置:

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

2. 是不是越少越好呢?

答案:不一定!

原因:假如保证每个map处理的文件大小都接近128M,但是这个文件只有一个或者两个比较少的字段,却有上千万的记录,正常会用一个map去完成,但是如果处理的逻辑比较复杂,只用一个map任务的话,肯定会比较耗时。

解决方法:增加map数

当input文件很大且任务处理逻辑比较复杂,map执行非常慢的时候,可以增加map数来减少map处理的数据量,提高执行效率。

增加map的方法如下:

根据公式 computeSplitSize(Math.max(minSize,Math.min(maxSize,blockSize))),blockSize默认值128M,我们可以调整maxSize的值,使 maxSize < blockSize就可以增加map个数。

总结

在Hive中,map个数并不是越多越好,也不是越少越少越好,而是根据不同的使用场景来调整map个数,从而来提高整个作业的执行效率。

相关文章
|
SQL 分布式计算 资源调度
线上 hive on spark 作业执行超时问题排查案例分享
线上 hive on spark 作业执行超时问题排查案例分享
|
SQL 分布式计算 资源调度
阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录
阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录
1230 0
|
6月前
|
SQL 存储 Java
Hive 特殊的数据类型 Array、Map、Struct
在Hive中,`Array`、`Map`和`Struct`是三种特殊的数据类型。`Array`用于存储相同类型的列表,如`select array(1, &quot;1&quot;, 2, 3, 4, 5)`会产生一个整数数组。`Map`是键值对集合,键值类型需一致,如`select map(1, 2, 3, &quot;4&quot;)`会产生一个整数到整数的映射。`Struct`表示结构体,有固定数量和类型的字段,如`select struct(1, 2, 3, 4)`创建一个无名结构体。这些类型支持嵌套使用,允许更复杂的结构数据存储。例如,可以创建一个包含用户结构体的数组来存储多用户信息
477 0
|
存储 SQL HIVE
数据仓库的Hive的数据类型的复杂数据类型的map
在数据仓库领域,Hive是一个常用的工具。它提供了一种简单的方式来查询和分析大量数据。
154 0
|
SQL 资源调度 大数据
大数据平台 CDP 中如何配置 hive 作业的 YARN 队列以确保SLA?
大数据平台 CDP 中如何配置 hive 作业的 YARN 队列以确保SLA?
|
SQL 分布式计算 资源调度
大数据问题排查系列-大数据集群开启 kerberos 认证后 HIVE 作业执行失败
大数据问题排查系列-大数据集群开启 kerberos 认证后 HIVE 作业执行失败
|
SQL 分布式计算 大数据
大数据问题排查系列 - TDH大数据平台中 HIVE作业长时间无法执行结束
大数据问题排查系列 - TDH大数据平台中 HIVE作业长时间无法执行结束
|
SQL 分布式计算 Hadoop
Hive 作业中Reduce个数设置多少合适呢?
Hive 作业Reduce个数设置原则
663 0
|
SQL 分布式计算 HIVE