都2024年了!是谁还不会优化 Hive 的小文件啊!!!速看!

news2025/9/19 17:21:21

文章目录

    • 小文件产生的原因
      • 1.查询建表或者插入
      • 2.装载数据
      • 3.动态分区
    • 小文件影响
    • 解决方法
      • 针对已经存在的小文件进行优化
        • 1.小文件归档
        • 2.getmerge
        • 3.concatenate
        • 4.重写
      • 针对写入数据时的优化
        • 1.调参优化
        • 2.动态分区优化
        • 3.使用 Spark 算子控制小文件数量

查看 HDFS 上的文件时,无意间点进了 Hive 表的存储目录下,打开发现其中有许多的小文件,如下所示:

在这里插入图片描述

每个文件都是几个 KB,都占用了一个块,这种就是典型的小文件。那么通过这篇博客,一起来学习如何解决 Hive 中出现的小文件问题。

注意,博主使用的 Hive 版本为 3.1.3,不同版本之间可能存在微差,但整体影响不大。

小文件产生的原因

产生小文件绝大多数都是和 Reduce 相关的,因为它决定了我们最终的输出文件数量,主要有以下几个场景:

1.查询建表或者插入

当我们通过查询建表或者通过查询的方式将数据插入的时候,就有可能会产生小文件,如下所示:

create table test_a select * from tmp;

insert into test_a select * from tmp;

2.装载数据

使用 load 语句装载或者 insert 语句直接将数据装载到表中,也可能会产生小文件。

当使用 load 时,导入多少个文件,在 Hive 表中就会生成多少个文件:

load data local inpath 'xxx' overwrite into table test_a;

当使用 insert 直接插入数据时,它会启动 MR 任务,有多少个 Reduce,就会输出多少个文件:

insert into test_a values (1,'a'),(2,'b'),(3,'c');

3.动态分区

在 Hive 中使用动态分区时,容易产生大量的小文件。

这主要是由于动态分区插入数据的方式导致的,在每次插入数据时,Hive 可能会为每个分区创建一个新的文件。如果插入的数据量较小或者插入操作频繁,就会导致产生大量的小文件。

小文件过多会对Hive和底层存储HDFS产生负面影响。此外,小文件过多也会使得NameNode的元数据变得庞大,占用过多内存,1。

小文件影响

我们都知道在 HDFS 中,所有文件的元数据信息都存储在 NameNode,也就是命名空间中,它运行在有限的内存里。

HDFS 上每个文件的元数据信息占用 150B 左右的空间,一旦小文件过多,就会影响 HDFS 的性能,还可能撑爆 NameNode 的内存,造成集群宕机,无法提供服务,这就是为什么要处理小文件的根本原因。

同时,对于 Hive 来说,每个小文件在查询时都会被当作一个块,并启动一个 Map 任务来完成,但这种情况下 Map 任务的启动和初始化时间通常远大于逻辑处理时间,这样就会导致大量的资源浪费,降低程序性能。

解决方法

针对已经存在的小文件进行优化

1.小文件归档

在 Hadoop 中,提供了一种小文件归档技术,它可以将一个目录下的所有小文件都打包成一个 HAR 文件,也就是说,它只对分区表有效

-- 是否开启归档操作,默认 false
set hive.archive.enabled=true;
-- 是否允许Hive在创建归档时可以设置父目录(该参数有些Hive版本中已经弃用,无需设置)
set hive.archive.har.parentdir.settable=true;
-- 控制需要归档文件的大小
set har.partfile.size=1099511627776;

-- 使用语法
ALTER TABLE table_name ARCHIVE PARTITION (partition

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1694339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1791.找出星形图的中心节点

刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

蓝桥杯备赛——DP【python】

一、小明的背包1 试题链接:https://www.lanqiao.cn/problems/1174/learning/ 问题描述 输入实例 5 20 1 6 2 5 3 8 5 15 3 3 输出示例 37 问题分析 这里我们要创建一个DP表,DP(i,j)表示处理到第i个物品时消耗j体…

# 【基于随机森林算法的数据回归预测】附详细Matlab代码

文章目录 1. 引言2. 随机森林算法原理2.1 决策树基础2.2 随机森林的构建 3. 随机森林回归的实现3.1 数据准备3.2 模型训练3.3 模型预测 4. 模型评估5. 参数调优6. 结论7. 参考文献 在数据科学的世界里,预测模型是解决未来未知问题的关键工具。随机森林算法&#xff…

[国产大模型简单使用介绍] 开源与免费API

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 随着大模型技术蓬勃发展和开源社区越来越活跃,国内的大模型也如雨后春笋一般.这时,一些就会问了,有了llama3,Mistral还有Gemma等等,国外大厂接连发力,一些开源社区也会有一些不错的模型,国内怎么比?对一个人使用,oll…

Golang单元测试

文章目录 传统测试方法基本介绍主要缺点 单元测试基本介绍测试函数基准测试示例函数 传统测试方法 基本介绍 基本介绍 代码测试是软件开发中的一项重要实践,用于验证代码的正确性、可靠性和预期行为。通过代码测试,开发者可以发现和修复潜在的错误、确保…

小猪APP分发:一站式托管服务,轻松玩转应用市场

在当今移动应用爆炸式增长的时代,开发者们面临的挑战不再仅限于创意的火花和代码的实现,更在于如何让精心打造的应用快速触达广大用户。这正是小猪APP分发www.appzhu.net应运而生的背景——作为一个全面、高效的APP托管服务分发平台,它为开发…

相关服务器介绍

服务器是一种高性能的计算机,它被设计用来为其他计算机或终端设备提供服务,如数据处理、文件存储、网络通信等。服务器通常具有强大的计算能力、大容量的存储空间和高效的网络连接能力。 常见的服务器种类及其特点 文件服务器 文件服务器主要负责中央存储…

什么是JDK21虚拟线程

JDK21虚拟线程 1. 来一段小故事2. 什么是虚拟线程3. 虚拟线程的几个关键特点4.细说关键特点1.为什么轻量级的1.传统线程运行时间2.虚拟线程运行时间3.对垃圾回收的影响 2.非绑定OS线程的魅力所在3.和传统相比为何易于使用4.阻塞优化有什么好处1.什么是阻塞优化2.JDK 21虚拟线程…

基于SSH的母婴用品销售管理系统带万字文档

文章目录 母婴商城系统一、项目演示二、项目介绍三、系统部分功能截图四、万字论文参考五、部分代码展示六、底部获取项目源码和万字论文参考(9.9¥带走) 母婴商城系统 一、项目演示 母婴商城系统 二、项目介绍 基于SSH的母婴商城系统 系统…

海外仓储管理系统:提升效率,标准化海外仓管理,科技赋能业务

海外仓作为跨境物流的关键一环,完全可以说海外仓的效率直接决定了后续物流的整体运作效率。 对于海外仓而言,一套高效,易用的海外仓储系统,无疑将成为提升企业竞争力的重要工具,帮助海外仓实现从野蛮生长到标准化管理…

边用边充电影响寿命吗?看看计算机指令组成与操作类型

计算机指令集体系结构之指令 指令由操作码和地址码字段组成。 操作码指明了指令要完成的操作。 长度可以固定:比如RISC(reduced instruction set computer)精简指令集计算机 与之对应的RISC(复杂指令集计算机)&…

【C++进阶】AVL树

0.前言 前面我们已经学习过二叉搜索树了,但如果我们是用二叉搜索树来封装map和set等关联式容器是有缺陷的,很可能会退化为单分支的情况,那样效率就极低了,那么有没有方法来弥补二叉搜索树的缺陷呢? 那么AVL树就出现了&…

【C++】类与对象——多态详解

目录 一、多态的定义 二、重载、覆盖(重写)、隐藏(重定义)的对比 三、析构函数重写 四、C11 override 和 final 1. final 2. override 五、抽象类 六、多态的原理 一、多态的定义 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为…

【机器学习】机器学习与大型预训练模型的前沿探索:跨模态理解与生成的新纪元

🔒文章目录: 💥1.引言 ☔2.跨模态理解与生成技术概述 🚲3.大型预训练模型在跨模态理解与生成中的应用 🛴4.前沿探索与挑战并存 👊5.未来趋势与展望 💥1.引言 近年来,机器学习领…

使用C/C++ API接口操作 Zookeeper 数据

ZooKeeper 支持 Java 和 C 的API接口。本文将介绍使用 C/C 语言客户端库的编译安装和使用入门。 一、编译安装 PS:就在上一篇文章还觉得安装和配置 jdk 、maven 麻烦,所以当时选择 apache-zookeeper-[version]-bin.tar.gz 的版本。然而,本文…

【C++要哮着学】类和对象

文章目录 前言面向过程和面相对象初步认识类的定义类的访问限定符及封装访问限定符封装 类的作用域类的实例化类对象模型如何计算类的大小结构体内存对齐规则类对象的存储方式1.对象中包含类的各个成员2.代码只保存一份,在对象中保存存放代码的地址3.只保存成员变量…

权限维持--linux

隐藏文件/夹&-开头文件 如何创建: 在文件名之前加.即可 touch .1.s 如何清除、查找: ls -al rm -fr -文件 已-开头的文件直接读取是不行的需要带目录 隐藏时间戳 ①用其他文件的时间 touch -r zww.php testq.txt 如何清除、查看: stat test…

KDE-Ambari-Metrics-Collector问题排查解决手册

文档说明 本文档是为了解决KDE平台的Ambari-Metrics-Collector服务在运行时遇到的问题而提供的问题排查和解决方法的参考文档 说明: 当前的Ambari-Metrics-Collector服务包括了ams-collector和ams-hbase两个程序,在Ambari-Metrics-Collector安装的节点执行ps -elf|grep am…

【算法】前缀和——二维前缀和模板题

本节博客是通过——二位前缀和模板题来介绍前缀和二维算法,有需要借鉴即可。 目录 1.题目2.暴力求解3.二维前缀和算法3.代码示例4.总结 1.题目 题目链接:LINK 2.暴力求解 这里我们首先想到的就是一个暴力求解的方式,挨个需要的进行遍历就…

基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法,对比两个算法的仿真时间,收敛曲线,以及路径规划的结果&#xff0…