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

这篇具有很好参考价值的文章主要介绍了合并文件解决HiveServer2内存溢出方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1.1查看表文件个数

desc formatted yanyu.tmp

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

• 表文件数量为6522102

1.2查看表文件信息

hadoop fs -ls warehouse/yanyu.db/tmp

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

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

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

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

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

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

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

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

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

•详细日志如下

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

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

2.1小文件合并

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

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

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

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

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

  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;

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

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

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

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

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

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

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

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

• 查看原始文件数据,正常显示
合并文件解决HiveServer2内存溢出方案

• 查看合并后的文件内容为乱码。
合并文件解决HiveServer2内存溢出方案

• 使用sql检查临时表数据是否和原表数据一致。
合并文件解决HiveServer2内存溢出方案

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

hadoop fs -ls warehouse/yanyu.db/tmp_bak

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

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

2.1.5 删除原始表

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

alter table yanyu.tmp_bak rename to yanyu.tmp

三、总结

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

到了这里,关于合并文件解决HiveServer2内存溢出方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hive-无法启动hiveserver2

    启动hiveserver2没有反应,客户端也无法连接( beeline -u jdbc:hive2://node01:10000 -n root) 查看hive的Log日志,发现如下报错 在hive的hive_site.xml中添加如下代码

    2024年02月12日
    浏览(25)
  • HiveServer2 常见异常和处理方法

    可能原因: HiveServer 连接数达到上限。因为每个 jdbc,HiveServer 需要一个线程。 HiveServer OOM 不能及时处理客户请求 Hive Metastore 没有响应或者后台数据库卡住。 HiveServer2 Server socket 的 backlog 默认是 0,在centos 系统中查看 HiveServer2 的 backlog 是50。当Socket accept 的速度变慢,操作系

    2024年02月03日
    浏览(33)
  • hive 入门 配置hiveserver2 (三)

    Hive的hiveserver2服务的作用是提供jdbc/odbc接口,为用户 提供远程访问Hive数据的功能 ,例如用户期望在个人电脑中访问远程服务中的Hive数据,就需要用到Hiveserver2。 在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。由于Hadoop集群中的数据具备访问

    2024年02月11日
    浏览(25)
  • Error: Could not open client transport with JDBC Uri: jdbc:hive2://解决连接beenline连接HiveServer2报错

    目录 一、错误现象 二、 解决方案 三、其他解决方式 背景:ranger 整合cdh后登陆HiveServer2测试 后台日志 Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop105:10000: Failed to open new session: java.lang.IllegalArgumentException: Cannot modify hive.query.redaction.rules at runtime. It  is not in list of

    2024年02月12日
    浏览(34)
  • hue实现对hiveserver2 的负载均衡

    如果你使用的是CDH集群那就很是方便的 在Cloudera Manager中,进入HDFS Service 进入Instances标签页面,点击Add Role Instances按钮,如下图所示 点击Continue按钮,如下图所示 返回Instances页面,选择HttpFS角色,并点击Start启动服务,如下图所示 HttpFS服务启动后,点击进入Hue Service Configur

    2024年02月08日
    浏览(26)
  • hive 配置metastore hiveserver2服务开启

    hive-site.xml: hive-site.xml: hive-site.xml: 重启MetaStore服务: 启动hive服务: 启动后需要等待一段时间,jdbc才能连接上hive服务 使用beeline客户端验证是否可以连接:

    2024年02月03日
    浏览(28)
  • spark的jdbc接口,类似于hiveserver2

    https://spark.apache.org/docs/2.4.0/sql-distributed-sql-engine.html#running-the-thrift-jdbcodbc-server Spark SQL可以作为一个分布式查询引擎,通过其JDBC/ODBC或命令行接口进行操作。通过JDBC/ODBC接口,用户可以使用常见的数据库工具或BI工具来连接和查询Spark SQL,这使得Spark SQL可以与现有的数据分析工

    2024年01月20日
    浏览(28)
  • 【大数据之Hive】五、Hiveserver2服务部署

      hiveserver2提供JDBC/ODBC接口,使得用户可以远程访问Hive数据,即作为客户端的代理与Hadoop集群进行交互。   hiveserver2部署时需要部署到一个能访问集群的节点上,保证能够直接往Hadoop上提交数据。   用户在客户端提交SQL语句时,由hiveserver请求HDFS或者提交计算任务到

    2024年02月13日
    浏览(26)
  • 【解决方案】Java 互联网项目如何防止集合堆内存溢出(一)

    目录 前言 一、代码优化 1.1Stream 流自分页 1.2数据库分页 1.3其它思考 二、硬件配置 2.1云服务器配置 三、文章小结 OOM 几乎是笔者工作中遇到的线上 bug 中最常见的,一旦平时正常的页面在线上出现页面崩溃或者服务无法调用,查看服务器日志后你很可能会看到“ Caused by: ja

    2024年02月20日
    浏览(33)
  • (十七)大数据实战——Hive的hiveserver2服务安装部署

    HiveServer2 是 Apache Hive 的一个服务器端组件,用于支持客户端与 Hive 进行交互和执行查询。HiveServer2服务的作用是提供jdbc/odbc接口,为用户提供远程访问Hive数据的功能。HiveServer2 允许多个客户端同时连接并与 Hive 交互。这些客户端可以通过 JDBC、ODBC 或 Thrift API 连接到 HiveServe

    2024年01月17日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包