赞
踩
文件数目过多,会给HDFS带来压力,并且会影响处理效率,可以通过合并Map和Reduce的结果文件来消除这样的影响:
- set hive.merge.mapfiles = true; ##在 map only 的任务结束时合并小文件
- set hive.merge.mapredfiles = false; ## true 时在 MapReduce 的任务结束时合并小文件
-
- set hive.merge.size.per.task = 256*1000*1000; ##合并文件的大小
- set mapred.max.split.size=256000000; ##每个 Map 最大分割大小
- set mapred.min.split.size.per.node=1; ##一个节点上 split 的最少值
-
- set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; ##执行 Map 前进行小文件合并
但凡事都有两面性,在执行的过程中多一步合并操作,实际上也会增加性能消耗;只是说这样做有利于以后使用时性能的提升。另外,这些参数在选用SPARK引擎时,并不生效;由于SPARK执行所产生的小文件问题,要另想办法解决。
1.先在hive-site.xml中设置小文件的标准
- <property>
- <name>hive.merge.smallfiles.avgsize</name>
- <value>536870912</value>
- <description>When the average output file size of a job is less than this number, Hive will start an additional map-reduce job to merge the output files into bigger files. This is only done for map-only jobs if hive.merge.mapfiles is true, and for map-reduce jobs if hive.merge.mapredfiles is true.</description>
- </property>
2.为只有map的mapreduce的输出并合并小文件
- <property>
- <name>hive.merge.mapfiles</name>
- <value>true</value>
- <description>Merge small files at the end of a map-only job</description>
- </property>
3.为含有reduce的mapreduce的输出并合并小文件
- <property>
- <name>hive.merge.mapredfiles</name>
- <value>true</value>
- <description>Merge small files at the end of a map-reduce job</description>
- </property>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。