Hive小文件问题:如何产生、造成影响、解放办法

简介: Hive小文件问题:如何产生、造成影响、解放办法

正文


一、小文件是如何产生的


1.动态分区插入数据,产生大量的小文件,从而导致map数量剧增。


2.reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的)。


3.数据源本身就包含大量的小文件。


二、小文件问题的影响


1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。


2.在HDFS中,每个小文件对象约占150byte,如果小文件过多会占用大量内存。这样NameNode内存容量严重制约了集群的扩展。


三、小文件问题的解决方案


从小文件产生的途经就可以从源头上控制小文件数量,方法如下:


1.使用Sequencefile作为表存储格式,不要用textfile,在一定程度上可以减少小文件。


2.减少reduce的数量(可以使用参数进行控制)。


3.少用动态分区,用时记得按distribute by分区。


四、对于已有的小文件,我们可以通过以下几种方案解决:


1.使用hadoop archive命令把小文件进行归档。


2.重建表,建表时减少reduce数量。


3.通过参数进行调节,设置map/reduce端的相关参数,如下:


设置map输入合并小文件的相关参数:

//每个Map最大输入大小(这个值决定了合并后文件的数量)


set mapred.max.split.size=256000000;


//一个节点上split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)


set mapred.min.split.size.per.node=100000000;


//一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并)


set mapred.min.split.size.per.rack=100000000;


//执行Map前进行小文件合并


set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;



设置map输出和reduce输出进行合并的相关参数:


//设置map端输出进行合并,默认为true


set hive.merge.mapfiles = true


//设置reduce端输出进行合并,默认为false


set hive.merge.mapredfiles = true


//设置合并文件的大小


set hive.merge.size.per.task = 256*1000*1000


//当输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行文件merge。


set hive.merge.smallfiles.avgsize=16000000


相关文章
|
SQL 存储 分布式计算
【Hive】(二十三)简单几招教你如何解决 Hive 中小文件过多的问题
【Hive】(二十三)简单几招教你如何解决 Hive 中小文件过多的问题
1672 0
|
SQL 分布式计算 DataWorks
同步Hive表数据报block文件不存在问题 java.io.FileNotFoundException: File does not exist
同步Hive表数据报block文件不存在问题 java.io.FileNotFoundException: File does not exist
|
2月前
|
SQL 存储 算法
【Hive】Hive 小文件过多怎么解决?
【4月更文挑战第16天】【Hive】Hive 小文件过多怎么解决?
|
8月前
|
SQL 存储 Java
Hive教程(09)- 彻底解决小文件的问题
Hive教程(09)- 彻底解决小文件的问题
391 0
|
2月前
|
SQL 存储 分布式计算
Hive【基础知识 02-2】【Hive CLI 命令行工具使用】【详细举例-包含测试脚本文件】
【4月更文挑战第7天】Hive【基础知识 02-2】【Hive CLI 命令行工具使用】【详细举例-包含测试脚本文件】
43 0
|
11月前
|
SQL 存储 分布式计算
Hive学习---6、文件格式和压缩
Hive学习---6、文件格式和压缩
Hive学习---6、文件格式和压缩
|
11月前
|
SQL 存储 关系型数据库
常见的BUG---2、Hive中文注释乱码解决办法
常见的BUG---2、Hive中文注释乱码解决办法
|
12月前
|
SQL 存储 分布式计算
hive 小文件问题及解决方法【重要】
hive 小文件问题及解决方法【重要】
371 0
|
存储 SQL JSON
hive文件与压缩
hive文件与压缩
hive文件与压缩
|
SQL 分布式计算 监控
使用Flume监控文件并导入到HIVE表中
使用Flume监控文件并导入到HIVE表中