hive 小文件问题及解决方法【重要】

简介: hive 小文件问题及解决方法【重要】

一、小文件形成的原因:

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

(2)reduce 数量越多,小文件也越多,reduce 的个数和输出文件个数一致;

(3)数据源本身就是大量小文件;

二、小文件的危害:

(1)在 HDFS 中,每个文件均按块存储,每个文件在 NameNode 中存储大约占 150 个字节,与块大小无关,如果小文件过多,则会耗尽 NameNode 中的大多数内存。

(2)从 Hive 角度看,小文件过多也会影响 MR 的执行任务的数量,一个小文件会开启一个 MapTask,同时一个 map 会开一个 JVM 去执行 任务过多则会导致频繁的开启关闭,浪费大量的资源,严重影响性能。

三、解决小文件问题常见方法:

解决小文件问题的本质就是将小文件进行合并,可以通过以下几种方式解决小文件问题:

1. 使用 hive 自带的 concatenate 命令,自动合并小文件

2. 调整参数减少 Map 数量、Reduce 数量

(1)减少 map 数量:执行 Map 前可以对小 文件进行合并,使用 CombineHiveInputFormat,它底层是 haddoop 的 CombineFileInputFormat 方法,此方法可以在 mapper 中将多个文件合成一个 split 作为输入

(2)减少 Reduce 数量:Reduce 的个数决定输出的文件的个数,所以可以调整 Reduce 的个数来控制 hive 表的文件数量。hive 中的分区函数 distribute by 正好是控制 MR 中 partition 分区的,所以通过设置 reduce 数量,再结合分区函数让数据均衡的进入每个 reduce 即可。

3. 使用 Hadoop Archive(HAR)将小文件进行归档:使用 Hadoop 自带的 HAR 将小文件进行归档,将多个小文件打包成一个 HAR 文件,这样 NameNode 中的元数据也就存储一份。在减少 namenode 内存使用的同时,仍然可以对文件进行透明的访问。

参考:数仓面试高频考点 -- 解决 hive 小文件过多问题 (qq.com)

相关文章
|
SQL 分布式计算 DataWorks
同步Hive表数据报block文件不存在问题 java.io.FileNotFoundException: File does not exist
同步Hive表数据报block文件不存在问题 java.io.FileNotFoundException: File does not exist
|
12月前
|
SQL 存储 Java
Hive教程(09)- 彻底解决小文件的问题
Hive教程(09)- 彻底解决小文件的问题
577 0
|
6月前
|
SQL 存储 算法
【Hive】Hive 小文件过多怎么解决?
【4月更文挑战第16天】【Hive】Hive 小文件过多怎么解决?
|
SQL 存储 分布式计算
Hive学习---6、文件格式和压缩
Hive学习---6、文件格式和压缩
Hive学习---6、文件格式和压缩
|
6月前
|
SQL 存储 分布式计算
Hive【基础知识 02-2】【Hive CLI 命令行工具使用】【详细举例-包含测试脚本文件】
【4月更文挑战第7天】Hive【基础知识 02-2】【Hive CLI 命令行工具使用】【详细举例-包含测试脚本文件】
90 0
|
SQL 文件存储 数据库
Hive分区表的新增字段数据为null的问题解决方法
Hive分区表的新增字段数据为null的问题解决方法
341 0
|
存储 SQL JSON
hive文件与压缩
hive文件与压缩
hive文件与压缩
|
SQL 分布式计算 监控
使用Flume监控文件并导入到HIVE表中
使用Flume监控文件并导入到HIVE表中
|
6月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
189 1
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
34 0

热门文章

最新文章