目的:
深入认识hive 以mapreduce 为计算引擎时Mapper 和Reducer的设置
背景;
运营团队反映,公司广告业务的日活用户数据量偶尔呈剧烈下降趋势,同时出现用户数低于日活用户数据的问题,后来查看离线解析任务,执行过程正常但是数据的加载却除了问题——部分文件并没有加载到操作型数据库(提供数据展示的库,infobright)

问题分析:
由于load 数据时只加载了000000_0 文件,所以导致数据库中数据不齐全,同时产生的结果文件数量和Reducer 的个数相关。
认识InputFormat 接口
简单说就是用于描述数据的输入格式,
@Public
@Stable
public interface InputFormat<K, V> {
InputSplit[] getSplits(JobConf var1, int var2) throws IOException;
RecordReader<K, V> getRecordReader(InputSplit var1, JobConf var2, Reporter var3) throws IOException;
}
从源码可以看出,该接口下的两个方法的功能分别是将输入的文件分片(splits)和将输入的splits 转化成key-value 数据,
hive> set hive.input.

本文探讨了在Hive使用MapReduce作为计算引擎时,如何设置Mapper和Reducer的数量。针对运营团队反馈的数据加载问题,作者分析了由于部分文件未加载导致的数据不全情况,并详细解释了HiveInputFormat和CombineHiveInputFormat两种不同格式下,Mapper个数的计算方式。同时,文章还介绍了Reducer数量的计算方法,强调合理设置能避免小文件过多和OOM问题,以确保大数据分析任务的高效执行。
最低0.47元/天 解锁文章
303

被折叠的 条评论
为什么被折叠?



