项目场景:
Hive 合并小文件
目前集群hive表存储大量小文件,对hadoop namenode 压力过大,需进行小文件合并新建表
问题描述
合并小文件可在map 端进行参数设置。
set hive.input.format 查看输入格式
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat (默认格式)
set mapred.max.split.size=256000000; #每个Map最大输入大小
set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小为100M
set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小为100M
执行报错
set mapred.min.split.size.per.node=100000000;
Error: Error while processing statement: Cannot modify mapred.min.split.size.per.node at runtime. It is not in list of params that are allowed to be modified at runtime (state=42000,code=1)
解决方案:
在hive-site.xml 添加参数:
因使用ambari 搭建的,则需在Custom hiveserver2-site中新增加如下配置:
hive.security.authorization.sqlstd.confwhitelist=mapred.*|hive.*|mapreduce.*|spark.*
hive.security.authorization.sqlstd.confwhitelist.append=mapred.*|hive.*|mapreduce.*|spark.*
Ambari 设置
- 参考文档
https://blog.csdn.net/lzhcoder/article/details/124463968