Return to site

Mapper and Reducer Setting in Hive

Hive技术提升

· Hive,bigdata

至繁归于至简。

Hive中执行若以默认的引擎方式,会将提交的query拆解为MR(MapReduce)任务执行。 那么在这个过程中, 会用到多少个mapper\reducer ? 作为任务提交者, 可以通过调整哪些参数来控制它们呢?

我们先来看看mapper端。

mapper

mapper不能通过set具体某个参数进行直接的设置, 而是间接实现的。 影响的因素有:

  • INPUT信息: 文件大小、文件个数
  • SPLIT操作:  inputsplit size
  • 集群Block信息:  单个block size (可在Hive用 set dfs.block.size查看)

0: jdbc:hive2://192.168.79.238:10000/> set dfs.block.size;
 

dfs.block.size=134217728

假设要处理一个大小为1GB的文件 - input, 那么Hadoop默认会将该文件分割成8个块(1GB=8 block size), 从而产生8个mapper. 不过, 如果是处理多个“小文件”(小于block size)的场景, 就要稍稍复杂一些。

Hadoop提供了InputFormat接口, 用于描述数据格式, 其中关键方法是 getSplits 用于输入数据的分片。Hive又对此进行封装: HiveInputFormat<K, V>。

具体的实现又由 hive.input.format 决定, 主要使用两个类型: HiveInputFormat & CombineHiveInputFormat. (参考代码移步到 gist

0: jdbc:hive2://192.168.79.238:10000/> set hive.input.format ;
-- 默认格式, 截至2019 我还没有做过修改。
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

计算公式:

mapper_number = min (split_num, max(default_num, goal_num) )

其中, split_num = total_size / split_size

split_size = max(mapred.min.split.size, block.size)

default_num = total_size / block_size

goal_num = mapred.map.tasks;

思考题目(以后有机会作为面试题目)

假设输入的是一个目录,

./a 10MB

./b 50MB

./c 200MB

此时会用到几个mapper?

mapper的数量建议是多少?

通常来说, 过多的mapper和过少都不适宜。 参考比较多的文章, 发现一般给出的建议:让单个mapper处理的时长在2-4分钟是比较合理的。 小集群也要重点注意500个以上mapper的任务。 mapper个数主要影响的是集群间io的性能。

reducer

set header

最后, 这里给出的控制经典参数如下:

-- 以下参数如无特别指定, 给出的值都是我公司2019年主集群的设置, 具体修改还要因时制宜。

set mapred.max.split.size=256000000; -- 决定每个map处理的最大的文件大小,单位为B ~245MB
set mapred.min.split.size.per.node=1; -- 节点中可以处理的最小的文件大小
set mapred.min.split.size.per.rack=1; -- 机架中可以处理的最小的文件大小

 

set mapred.map.tasks =2; -- 期望map的任务数 , 但一般来说不起作用, 原因是比较参数之一

-- reducer控制方法 直接控制 默认值是 -1
set mapred.reduce.tasks=10; -- 设置reduce的数量
-- reducer间接方法 ( 67108864=64MB)
set hive.exec.reducers.bytes.per.reducer=1073741824 -- 每个reduce处理的数据量,默认1GB

-- 不常用参数

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

All Posts
×

Almost done…

We just sent you an email. Please click the link in the email to confirm your subscription!

OKSubscriptions powered by Strikingly