合并文件解决HiveServer2内存溢出方案

news2024/11/26 12:46:44

一、文件过多导致HiveServer2内存溢出

1.1查看表文件个数

desc formatted yanyu.tmp

文件个数

• 表文件数量为6522102

1.2查看表文件信息

hadoop fs -ls warehouse/yanyu.db/tmp

文件详情

• 分区为string 类型的time字段,分了2001个区。

1.3.查看某个分区下的文件个数为10000个

hadoop fs -ls warehouse/yanyu.db/tmp/time=45

在这里插入图片描述

1.4.执行select count(*) 是否内存溢出

在这里插入图片描述

•可以看到Jvm内存使用明显增大,Hiveserver2内存溢出,进程挂掉了;查看HiveServer2状态标红。

在这里插入图片描述

•详细日志如下

在这里插入图片描述
在这里插入图片描述

二、合并小文件以解决HiveServer2内存溢出

2.1小文件合并

• 将每个分区里的若干个小文件合并成一个文件,最终文件个数为分区数。合并流程如下:

2.1.1 创建表结构一致的临时表

 查看原始表信息
 desc formatted yanyu.tmp

在这里插入图片描述

• 然后创建一个数据结构与原表完全一样的临时表用来存储数据。

  create table yanyu.tmp_bak like yanyu.tmp;
  查看表属性
  show create table yanyu.tmp_bak;

2.1.2 将原始数据导入到临时表

• 配置合并小文件的参数

SET hive.merge.mapfiles = true;
SET hive.merge.mapredfiles = true;
--输出时合并小文件大小为256M
SET hive.merge.size.per.task = 256000000;
--输出文件平均大小小于该值,则开启小文件合并
SET hive.merge.smallfiles.avgsize = 134217728;
SET hive.exec.compress.output = true;
SET parquet.compression = snappy;
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.exec.dynamic.partition = true;

• 查询原表数据并使用insert overwrite 将原表数据插入到临时表中

    insert overwrite table yanyu.tmp_bak  partition(time) select * from yanyu.tmp;
   查看合并小文件后的表文件个数(2000)desc formatted yanyu.tmp_bak;

在这里插入图片描述

2.1.3 查看hdfs文件系统里原始表和合并小文件表后任意分区下面的文件数量

  查看合并后的文件数量:
  hadoop fs -ls warehouse/yanyu.db/tmp_bak/time=0

在这里插入图片描述

  对比查看原始表分区下的文件数量:
  hadoop fs -ls warehouse/yanyu.db/tmp/time=0

在这里插入图片描述

• 说明:小文件合并操作后原始表的分区下的大量小文件合并为一个文件。

2.1.4 压缩小文件进行合并后是否查看数据

• 查看原始文件数据,正常显示
在这里插入图片描述

• 查看合并后的文件内容为乱码。
在这里插入图片描述

• 使用sql检查临时表数据是否和原表数据一致。
在这里插入图片描述

• 查看hdfs文件系统表格路径下文件个数是否与分区数一致。

hadoop fs -ls warehouse/yanyu.db/tmp_bak

在这里插入图片描述

 查看合并小文件后分区最大值为1999即有2000个分区(分区类型为string,以字符串排序)

2.1.5 删除原始表

• 确认表数据一致后,删除原表,使用alert修改临时表名为原表名。

alter table yanyu.tmp_bak rename to yanyu.tmp

三、总结

使用HiveServer2查询数据时,会将元数据都加载到内存中,如果一个表格的分区很大,每个分区中又有很多的小文件,就会导致将元数据加载到内存中时使用的内存比较大。因此,Cloudera公司推荐使用的分区数最好不要超过1000个分区;同时分区中的也不要存储过多的为小文件,要定期对数据进行治理以合并小文件。

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

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

相关文章

Jmter压测试

1、常规性能测试--压测 1、添加线程组 线程数模拟用户数,线程数1表示1个用户,如果模拟10个用户就设置线程数为10 Ramp-Up表示在多长时间内开启多少个线程,如果设置为10,表示10s内开启对应的线程数 循环次数 永远表示如果不惦记…

Hibernate+Lombok进行表与表之间关系时插入数据时栈溢出

报错信息如下: 当使用Hibernate和Lombok处理表与表之间的关系时,在插入数据时可能会遇到栈溢出错误。这篇博客将详细讨论此问题的原因,并提供解决办法。 标题: HibernateLombok进行表与表之间关系时插入数据时栈溢出 问题背景 Hibernate是一…

如何在Windows 10中创建屏幕保护程序设置快捷方式

屏幕保护程序是指你在电脑上未处于活动状态并等待指定时间后,电脑屏幕上显示的动态图片或图案。 屏幕保护程序最初用于保护旧的单色显示器免受损坏,但现在它们主要是通过提供密码保护来个性化你的电脑或增强其安全性的一种方式。 一、右键单击或按住桌面上的空白区域,然后…

linuxOPS基础_linux umask

1、什么是umask umask表示创建文件时的默认权限(即创建文件时不需要设置而天生的权限) 例如: root用户下,touch a ,文件a的默认权限是644 普通用户下,touch b ,文件b的默认权限是664 644和…

AOSP+WSL+adb搭建安卓开发ebpf环境

0.写在前面 首先我们要明白,安卓的AOSP包含了海量的代码,他包含了包括了: 1.不同架构下(音响,手机,电视等等各种基于安卓的设备)的上层应用 2.Java API Framework(大部分安卓开发…

叉积求二维空间两直线交点以及过两点的直线数学原理

叉积求二维空间两直线交点以及过两点的直线数学原理_wang.chen.xue的博客-CSDN博客

ThreeJS教程:屏幕坐标转标准设备坐标

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 屏幕坐标转标准设备坐标 在讲解下节课鼠标点击选中模型之前,先给大家讲解下坐标系的问题。 获取鼠标事件坐标 先来了解一些,普通的web前端相关知识。 鼠…

aop原理

1. 使用 1.1 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>1.2 定义切面类 定义一个切面类&#xff0c;指定增强的方法&#xff0c;方法前两个注解必须…

Axure教程—滚动加载(中继器 )

本文将教大家如何用AXURE中的中继器制作滚动加载效果 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://awjggr.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87867798?spm1001.2014.3001.5503 二、功能介绍 向下滚动鼠…

联想YOGA Pro14s电脑运行时总是蓝屏怎么办?

联想YOGA Pro14s电脑运行时总是蓝屏怎么办&#xff1f;最近有用户在使用电脑的时候&#xff0c;电脑总是会自动变成蓝屏&#xff0c;导致自己的操作中断。那么遇到这个情况要怎么去进行问题的解决呢&#xff1f;接下来我们来看看以下的详细解决方法分享吧。 准备工作&#xff1…

通过python封装关键词搜索1688商品列表数据API、1688商品列表API接口、1688API接口

1688商品详情接口是一种用于访问阿里巴巴旗下的批发市场平台上的商品列表信息的API接口。通过该接口&#xff0c;可以获取商品的详细信息&#xff0c;包括商品名称、规格、价格、描述、图片等。这些信息对于买家和卖家来说都非常重要&#xff0c;可以帮助他们更好地了解商品&am…

MyBatisPlus3-条件查询和映射问题(字段、表名)

1. 条件查询三种方式 条件查询多用第三种&#xff1b; 链式写表示且的关系&#xff0c;中间加上or()表示或的关系&#xff1b; 给出相应示例代码&#xff1a; Test public void testGetList(){//方式一&#xff1a;按条件查询/*QueryWrapper<User> userQueryWrapper new…

基于WebGL的智慧化工三维可视化管理系统

前言 作为全球化学品第一生产大国&#xff0c;我国危险化学品规模总量大、涉及品种多、应用范围广、管理链条长、安全风险高&#xff0c;历来是防范化解重大安全风险的重点领域。 危险化学品领域频繁发生的典型事故&#xff0c;暴露出传统安全风险管控手段问题突出。 建设背景…

【裸机驱动LED】使用汇编代码驱动LED(一)—— 寄存器解析篇

为了后续使用C语言驱动LED&#xff0c;事先学习汇编代码驱动LED&#xff0c;有如下好处&#xff1a; 熟悉一些基本的汇编语法了解驱动LED的基本流程了解驱动LED需要用到哪些寄存器作为一个初学者&#xff0c;可以锻炼自己阅读开发文档的能力 本文的主要目的是了解驱动LED的基…

【手撕Spring源码】SpringBoot启动过程中发生了什么?

文章目录 SpringBoot启动过程启动详解启动演示启动过程总结 SpringBoot启动过程 启动详解 SpringBoot的启动分为两个部分&#xff1a; 构造SpringApplication执行run方法 接下来我们先来看看构造方法里面都做了什么事情。 第一步&#xff1a;记录 BeanDefinition 源 大家知…

Jenkins配置邮件通知+钉钉通知,任务构建状态随时掌握

1.前言 Hello&#xff0c;各位小伙伴&#xff0c;大家好&#xff01;&#xff01;&#xff01; 在前面的文章中&#xff0c;我们实现了用Maven项目任务和Pipeline流水线任务来完成对项目的自动化部署。 DockerJenkinsGitee自动化部署maven项目 DockerJenkinsGiteePipeline部…

0001欧几里得算法

首先我们先了解欧几里得这个人。俗话说&#xff1a;不了解一个人&#xff0c;很难走进他的思想。欧几里得是约公元前330年~公元前275年的古希腊数学家&#xff0c;被称为“几何之父”。《几何原本》就是他的著作。而欧几里得算法是《几何原本》中的一个用于求两个数的最大公约数…

以AI为灯,照亮医疗放射防护监管盲区

相信绝大部分人都有在医院拍X光片的经历&#xff0c;它能够让医生更方便快速地找出潜在问题&#xff0c;判断病人健康状况&#xff0c;是医疗诊断过程中的常见检查方式。但同时X射线也是一把双刃剑&#xff0c;它的照射量可在体内累积&#xff0c;对人体血液白细胞有杀伤力&…

mysql加索引,数据库卡死

公司的一个内部项目&#xff0c;由于突然导入了几十万的数据&#xff0c;数据量翻了一倍&#xff0c;导致了某个页面打开很慢。通过sql日志看到主要是由于慢查询引起的&#xff0c;通过explain这个sql&#xff0c;发现主要是由于这个SQL没有命中索引&#xff0c;进行了全表扫描…

原型模式的用法

文章目录 一、原型模式的用法1.1 介绍1.2 结构1.3 原型模式类图1.4 实现1.4.1 克隆的分类1.4.2 代码 1.5 "三好学生"奖状案例1.5.1 "三好学生"奖状类图1.5.2 代码 1.6 深、浅克隆的区分1.6.1 浅克隆1.6.2 深克隆 一、原型模式的用法 1.1 介绍 用一个已经…