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输入合并小文件的相关参数:

[java] view plain copy

  1. //每个Map最大输入大小(这个值决定了合并后文件的数量)
  2. set mapred.max.split.size=256000000;
  3. //一个节点上split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)
  4. set mapred.min.split.size.per.node=100000000;
  5. //一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并)
  6. set mapred.min.split.size.per.rack=100000000;
  7. //执行Map前进行小文件合并
  8. set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;


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

[java] view plain copy

    1. //设置map端输出进行合并,默认为true
    2. set hive.merge.mapfiles = true
    3. //设置reduce端输出进行合并,默认为false
    4. set hive.merge.mapredfiles = true
    5. //设置合并文件的大小
    6. set hive.merge.size.per.task = 256*1000*1000
    7. //当输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行文件merge。
    8. set hive.merge.smallfiles.avgsize=16000000
时间: 2024-11-02 19:34:48

Hive优化之小文件问题及其解决方案的相关文章

Hive之小文件问题及其解决方案

小文件如何产生 1.动态分区插入数据,产生大量小文件,导致map数剧增 2.Reduce数越多,小文件越多 3.数据直接导入小文件 小文件的影响 从hive的角度看,小文件会开很多map,一个map开一个jvm去执行,所以这些任务的初始化,启动,执行浪费大量资源,严重影响集群性能 在HDFS中,每个小文件对象越占150byte,如果小文件过多会占用大量内存.这样namenode内存容量严重制约了集群的扩展. 解决思路 使用sequence file作为表的存储格式,不要用TextFile 减少R

Hive merge(小文件合并)

当Hive的输入由很多个小文件组成时,如果不涉及文件合并的话,那么每个小文件都会启动一个map task. 如果文件过小,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费,甚至发生OutOfMemoryError错误. 因此,当我们启动一个任务时,如果发现输入数据量小但任务数量多时,需要注意在Map前端进行输入小文件合并操作. 同理,向一个表写数据时,注意观察reduce数量,注意输出文件大小. 1. Map输入小文件合并 #每个Map处理的最大输入文件大小(256MB) s

[Hadoop]大量小文件问题及解决方案

1. HDFS上的小文件问题 小文件是指文件大小明显小于HDFS上块(block)大小(默认64MB)的文件.如果存储小文件,必定会有大量这样的小文件,否则你也不会使用Hadoop(If you're storing small files, then you probably have lots of them (otherwise you wouldn't turn to Hadoop)),这样的文件给hadoop的扩展性和性能带来严重问题.当一个文件的大小小于HDFS的块大小(默认64MB

hive压缩之小文件合并

Hive压缩之二 小文件合并 调研背景 当Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件过小,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费,甚至OOM.为此,当我们启动一个任务,发现输入数据量小但任务数量多时,需要注意在Map前端进行输入合并.当然,在我们向一个表写数据时,也需要注意输出文件大小. 输入合并 合并输入小文件,减少map数? 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小. 举例: a)

Hadoop小文件问题及解决方案

1.概述 小文件是指文件size小于HDFS上block大小的文件.这样的文件会给hadoop的扩展性和性能带来严重问题.首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1千万个小文件,每个文件占用一个block,则NameNode大约需要2G空间.如果存储一亿个文件,则NameNode需要20G空间.这样NameNode内存容量严重制约了集群的扩展.其次,访问大量小文件速度远远小于访问几个大文件.HDFS最初是为流式访问大文件开发的

CEPH RGW 设置 user default_placement为ssd-placement,优化100KB-200KB小文件性能,使用户创建的bucket对象放置到 SSD设备上。

sudo radosgw-admin metadata get user:tuanzi > user.md.json vi user.md.json #to add ssd-placement { "key": "user:tuanzi", "ver": { "tag": "__gHSAD0K7rEZcQ2m3qT_RWk", "ver": 1 }, "mtime&quo

LOSF 海量小文件问题综述

1.LOSF问题概述 在互联网(尤其是移动互联网).物联网.云计算.大数据等高速发展的大背景下,数据呈现爆炸式地增长.根据IDC的预测,到2020年产生的数据量 将达到40ZB,而之前2011年6月的预测是35ZB.然而,社会化网络.移动通信.网络视频音频.电子商务.传感器网络.科学实验等各种应用产生的数 据,不仅存储容量巨大,而且还具有数据类型繁多.数据大小变化大.流动快等显著特点,往往能够产生千万级.亿级甚至十亿.百亿级的海量小文件,而且更多地 是海量大小文件混合存储.由于在元数据管理.访问

大数据技术之_05_Hadoop学习_04_MapReduce_Hadoop企业优化(重中之重)+HDFS小文件优化方法+MapReduce扩展案例+倒排索引案例(多job串联)+TopN案例+找博客共同粉丝案例+常见错误及解决方案

第6章 Hadoop企业优化(重中之重)6.1 MapReduce 跑的慢的原因6.2 MapReduce优化方法6.2.1 数据输入6.2.2 Map阶段6.2.3 Reduce阶段6.2.4 I/O传输6.2.5 数据倾斜问题6.2.6 常用的调优参数6.3 HDFS小文件优化方法6.3.1 HDFS小文件弊端6.3.2 HDFS小文件解决方案第7章 MapReduce扩展案例7.1 倒排索引案例(多job串联)7.2 TopN案例7.3 找博客共同粉丝案例第8章 常见错误及解决方案 第6章

收集hive优化解决方案

hive的优化问题1.启动一次JOB尽可能多做事,尽量减少job的数量.能重用就重用,要设计好的模型.2.合理设置reduce个数,reduce个数过多,会造成大量小文件问题.3.使用hive.exec.parallel参数控制在同一个sql中的不同的job是否可以同时运行,提高作业的并发4.注意join的使用,表小用map join,否则用普通reduce join,hive会将前面的表数据装入内存,因此可将数据少的表放在数据多的表之前,减少内存资源消耗.5.注意小文件的问题    在hive