分享

hive加载大量小日志文件

师太跟我吧 发表于 2016-9-20 11:08:11 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 13930
本帖最后由 师太跟我吧 于 2016-9-20 11:39 编辑

初涉hive,公司需要加载大量的日志到hive进行数据分析,无奈,产生的日志大小几乎都是几M甚至几十KB,由于来源不同,格式有的也有差别,分成好几类。
目前场景:每10分钟一次日志,从A处获取,a_city1.log,a_city2.log,从B处获取,b_city1.log,b_city2.log。里面的内容根据日志名称中提到的城市名不同,按照地区分类,然后每隔10分钟,加载到不同的hive地区表中。
1. 这个怎么处理?是要一个小文件一个小文件去加载吗?一般公司里对这种情况是怎么解决的?烦请过来人详细指点
2. 有文件合并的方式和这个有关系吗,合并是合并原生的日志文件,还是合并hadoop已经加载上来的?能解决上面提到的这种情况吗?具体怎么解决?谢谢!

已有(4)人评论

跳转到指定楼层
langke93 发表于 2016-9-20 15:13:47
楼主可以先尝试上面配置。小文件可以通过hive合并输入

合并输入文件
set mapred.max.split.size=256000000;  #每个Map最大输入大小
set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小
set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;  #执行Map前进行小文件合并


开启org.apache.hadoop.hive.ql.io.CombineHiveInputFormat后,一个data node节点上多个小文件会进行合并,合并文件数由mapred.max.split.size限制的大小决定
mapred.min.split.size.per.node决定了多个data node上的文件是否需要合并
mapred.min.split.size.per.rack决定了多个交换机上的文件是否需要合并



回复

使用道具 举报

师太跟我吧 发表于 2016-9-20 17:17:10
langke93 发表于 2016-9-20 15:13
楼主可以先尝试上面配置。小文件可以通过hive合并输入

合并输入文件

这个我没看太明白,大神能不能稍微详细点回复下我原文中的问题?谢谢

回复

使用道具 举报

langke93 发表于 2016-9-20 21:03:57
初涉hive,公司需要加载大量的日志到hive进行数据分析,无奈,产生的日志大小几乎都是几M甚至几十KB,由于来源不同,格式有的也有差别,分成好几类。
目前场景:每10分钟一次日志,从A处获取,a_city1.log,a_city2.log,从B处获取,b_city1.log,b_city2.log。里面的内容根据日志名称中提到的城市名不同,按照地区分类,然后每隔10分钟,加载到不同的hive地区表中。
1. 这个怎么处理?是要一个小文件一个小文件去加载吗?
不需要一个个加载,配置了上面参数后,hive会自动处理的

一般公司里对这种情况是怎么解决的?
通过配置文件配置

2. 有文件合并的方式和这个有关系吗,合并是合并原生的日志文件,还是合并hadoop已经加载上来的?能解决上面提到的这种情况吗?具体怎么解决?谢谢!
和这个有关系的,小文件是在执行map前合并的。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条