Hive小文件问题

本文讨论了Hive中出现小文件的原因,包括数据源特性、reduce任务过多和动态分区,以及小文件对HDFS内存、数据访问速度和计算资源的影响。提出了解决方案,包括从源头限制小文件生成和对已有的小文件进行处理,通过Hive参数调节、动态分区策略以及定期合并数据来优化。

1、小文件产生的原因

  • 数据源本身有很多小文件
  • reduce数量多导致生成的小文件增多
  • 使用动态分区导致小文件增多

2、小文件危害

  • HDFS内存资源消耗过大,并限制了数据存储规模:在HDFS中,具体的文件保存在datanode节点中,在namenode节点中会有一个内存对象与之对应,用于存储文件的元信息,如位置、大小、分块等,每个对象大约占用150个字节。因此,过多的碎片文件会使得namenode消耗大量的内存资源用于管理文件元数据,性能也会因此受到影响,这样namenode的内存容量严重制约了集群的发展。
  • 数据的访问更加耗时:处理小文件并非Hadoop的设计目标,HDFS的设计目标是流式访问大数据集。在HDFS中,每次读写文件都需要先从namenode获取文件元数据信息,然后与datanode建立连接。而访问大量的小文件会经常会需要大量的定位寻址操作,不断地在datanode间跳跃去检索小文件。这种访问方式严重影响性能。
  • 数据运算的时间成本以及计算资源成本更高:在计算层面,小文件越多,意味着MapReduce执行任务时需要创建的map也会越多,这样,任务的启动与释放将耗费大量时间。同时,每一个map都会开启一个JVM虚拟机用于执行任务,带来的调度以及计算成本也更高了。

3、解决思路

1)从源端限制小文件生成

2)对已产生的小文件进行处理

  • Hive参数调节
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值