数据治理系列之小文件治理【面试吹牛草稿】
推荐阅读文章列表
写在前面
在面试中你是否遇到过如下问题:
有没有遇到过小文件问题?
做项目的过程中有没有遇到一些难点?
你认为项目中比较有亮点的地方是什么?
不管面试官如何问,都可以这样去回答:
产生的原因
1)离线计算场景,一个reduce会对应一个小文件,如果reduce设置较大,就会对应大量的小文件
2)实时计算场景,流计算都是基于一个小窗口的数据来进行实时计算,显然会产生大量的小文件
3)数据源本身存在大量的小文件
带来的问题
1)存储问题:存储大量的小文件,会占用namenode大量的内存来存储元数据信息
2)计算问题:每个小文件需要一个maptask进行计算处理,浪费资源
解决方案
存量治理
采用Hadoop Archive归档的方式对小文件进行存储,这样能够将多个小文件打包为一个HAR文件
增量止血
- 设置合适的reduce数量,官网建议:map数量和reduce数量是10比1
set mapred.reduce.tasks = 50;
- 开启参数自动进行小文件合并
set hive.merge.mapredfiles = true;
- 数据采集之前,将小文件进行合并后再进行入库
- 在计算的时候,采用combineinputformat的切片方式,这样就可以将多个小文件放到一个切片中进行计算