Hive表的几种存储格式及在性能调优应用

2023-11-15

一、理论知识学习:底层决定上层建筑

此部分内容引用了:Hive表的几种存储格式 - 海贼王一样的男人 - 博客园

Hive的文件存储格式:

  • textFile

    textFile为默认格式

    存储方式:行存储    

    缺点:磁盘开销大;数据解析开销大;压缩的text文件,hive无法进行合并和拆分

  • sequencefile

    二进制文件,以<key,value>的形式序列化到文件中

    存储方式:行存储

    优点:可分割、压缩,一般选择block压缩,与hadoop api中的mapfile是互相兼容的。

  • Rcfile

    存储方式:数据按行分块 每块按照列存储

    压缩快 快速列存取

    读记录尽量涉及到的block最少

    读取需要的列只需要读取每个row group 的头部定义。

    读取全量数据的操作 性能可能比sequencefile没有明显的优势

  • ORC

    存储方式:数据按行分块 每块按照列存储

    压缩快 快速列存取

    效率比rcfile高,是rcfile的改良版本

    官网介绍:

1

The Optimized Row Columnar (ORC) file format provides a highly efficient way to store Hive data. It was designed to overcome limitations of the other Hive file formats. Using ORC files improves performance when Hive is reading, writing, and processing data.

    ORC实际上是在RC文件存储格式做了一些优化,它的主要优点有:
      (1)、每个task只输出单个文件,这样可以减少NameNode的负载;
      (2)、支持各种复杂的数据类型,比如: datetime, decimal, 以及一些复杂类型(struct, list, map, and union);
      (3)、在文件中存储了一些轻量级的索引数据;
      (4)、基于数据类型的块模式压缩:a、integer类型的列用行程长度编码(run-length encoding);b、String类型的列用字典编码(dictionary encoding);
      (5)、用多个互相独立的RecordReaders并行读相同的文件;
      (6)、无需扫描markers就可以分割文件;
      (7)、绑定读写所需要的内存;
      (8)、metadata的存储是用 Protocol Buffers的,所以它支持添加和删除一些列。

  • 自定义格式

    用户可以通过实现inoutformat和outputformat来定义输入输出格式。

二、性能调优中应用

调优前性能情况:流程包括下面两部分

第一部分, 将源头hive表数据加工成hive外部临时表,存储格式:txtfile,记录数2.6亿,此过程耗时:20多分钟。

第二部分,通过公司研发的抽取工具,hive外部临时表数据抽取到hbase表中。耗时近11个小时27分钟。

尝试优化方法:
   1 hive表分区并发读取。 id不好拆分,拆分对原来流程调整比较大--不采用。
   2 对目标hbase表进行预先分区。 前面尝试过,hbase预分区后,提升效果不大,--不采用
   3 从hive的底层存储格式下手,选择推荐读写效率、压缩效果较好的orc格式。--采用

尝试优化:

 1 调整建表语句

-- 修改前建表语句
| CREATE EXTERNAL TABLE `fk_bp_apidetail_proc`(      |
|   `id` string,                                     |
。。。。。 
|   `partitioncode` string)                          |
| ROW FORMAT SERDE                                   |
|   'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'  |
| STORED AS INPUTFORMAT                              |
|   'org.apache.hadoop.mapred.TextInputFormat'       |
| OUTPUTFORMAT                                       |
|   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' |

-- 修改后建表语句

| CREATE TABLE `fk_bp_apidetail_proc`(               |
|   `id` string,                                     |
。。。。。。
|   `partitioncode` string)                          |
| ROW FORMAT SERDE                                   |
|   'org.apache.hadoop.hive.ql.io.orc.OrcSerde'      |
| STORED AS INPUTFORMAT                              |
|   'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'  |
| OUTPUTFORMAT                                       |
|   'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' |

2 调整数据处理脚本为spark sql(由于原hive sql脚本处理耗时就少,所以此处起的性能优化可以忽略,就不在此啰嗦)

3 调整前效果, 耗时减少到1小时44分钟,减少了近10个小时,太让人意外和惊喜!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive表的几种存储格式及在性能调优应用 的相关文章

随机推荐

  • 制作自己的数据集

    目录 自制数据集 解决本领域应用 编辑 编辑 数据增强 扩充数据集 断点续训 存取模型 编辑参数提取 把参数存入文本 acc loss可视化 查看训练效果 编写一个应用程序 神经网络接口 给图识物 当你有了本领域的数据集 又有了标签 你怎么
  • cron计划任务每隔30秒执行一次

  • 【Inno Setup】判别系统版本

    Code function IsXP32 Boolean var Version TWindowsVersion S String begin GetWindowsVersionEx Version S 主版本号 IntToStr Vers
  • python文本进度条练习之不同速度进度条

    这属于一个小小的课后练习 但我在网上没有找到对应代码 我主要是在textprobarv3 py上做修改 我选择的是power设计 f x pow x 1 x 0 03 2 主要增加了一行 fx int pow i 1 i 0 03 2 修改
  • 线程池 vs 信号量的优缺点比较

    通常我们都采用基于线程池的实现方式 这也是最容易理解的方案 Hystrix还提供了另一种底层实现 那就是信号量隔离 小时候我们就知道 红灯停 绿灯行 跟着交通信号的指示过马路 信号量也是这么一种放行 禁行的开关作用 它和线程池技术一样 控制
  • 目标检测识别中,mAP,AP,P值的定义与计算

    mAP是衡量模型在所有类别上的准确率 是衡量模型的好坏的评价指标 mAP 所有类别的AP之和 类别数 AP是某一个类别的准确率 AP 每张图片的P之和 图片数量 P 一张图片上某一类别识别的正确数量 一张图片上某一类别的总数量 比如现在有三
  • drwxr-x-w-. 4 507 509 4.0K 9月 4 2018 wukong linux中 507和509 是什么回事?

    第一个数字507出现原因 表示该目录的所有者 不存在了 第二个数字509出现原因 表示该目录的所有者所在的组 不存在了
  • 【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列)

    背景需求 工会老师求助 如何在word里面插入4 8的框 我怎么也拉不到4 8大小 她用的是我WORD 文本框 我一听 这又是要手动反复黏贴 文本框 照片 文字 的节奏哦 我问 你要做几个人 超过20个 我写个程序批量插图 写代码测试要费时
  • 5.2lua setfenv

    local FuncEnv setmetatable FuncEnv index G local func loadfile a lua local func loadfile a lua nil FuncEnv local ENV Fun
  • 二分查找法

    二分查找法 1 基础二分查找 2 改进二分查找 3 平衡版二分查找法 4 查找目标值最左索引 5 查找目标值最右索引 6 查找大于等于目标值的最左索引 7 查找小于等于目标的最右索引值 1 基础二分查找 二分查找法 基础 public st
  • mysql系统错误216_MySQL异常 - Skqing - OSCHINA - 中文开源技术交流社区

    jdbc mysql localhost 3306 ry useUnicode true characterEncoding utf8 zeroDateTimeBehavior convertToNull useSSL true Druid
  • 【扫盲】机器学习图像处理中的深层/浅层、局部/全局特征

    浅层网络与深层网络浅层网络更注重于细节信息 深层网络更注重于语义信息 浅层网络 一般感受野较小 能够利用更多的细粒度特征信息 而且此时特征图每个像素点对应的感受野重叠区域还很小 这就保证了网络能够捕获更多细节 深层网络 随着下采样或卷积次数
  • 常见黑客渗透测试工具

    因为上面要转了一篇 里面好多我都觉得过时了 不过确实好多我也还在用 哈哈 留个备份吧 免得上面又要找我要 一 Nessus 是扫描UNIX漏洞的主力工具 随后栖身Windows 主要功能包括本地和远程安全审查 支持client server
  • 10亿个数字,内存限制100M,进行排序

    解题思路 分治法 拆分小文件 先对每个小文件进行排序 然后使用小顶堆或大顶堆合并文件 代码 python3 import threading from queue import Queue import time import random
  • 小程序页面收录sitemap.json的作用与使用方法

    desc 关于本文件的更多信息 请参考文档 https developers weixin qq com miniprogram dev framework sitemap html rules action allow page 微信现已
  • 毕业设计-基于GUI的模拟电路故障诊断仿真平台研究- Matlab

    目录 前言 课题背景和意义 实现技术思路 一 联合仿真平台设计与实现 二 系统测试 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要
  • MySQL运行原理与基础架构

    1 MySQL基础 MySQL是一个开放源代码的关系数据库管理系统 原开发者为瑞典的MySQL AB公司 最早是在2001年MySQL3 23进入到管理员的视野并在之后获得广泛的应用 2008年MySQL公司被Sun公司收购并发布了首个收购
  • APP违法违规收集使用个人信息行为认定方法

    没有公开收集使用规则的情形 在App中没有隐私政策 或者隐私政策中没有收集使用个人信息规则 解读 APP内无法找到隐私政策或隐私政策内没有包含该APP收集使用个人信息的规则 在App首次运行时未通过弹窗等明显方式提示用户阅读隐私政策等收集使
  • 【Python】删除USB网络共享在win系统中递增的网络x

    删除之后还是挺干净的 软件环境 windows python3 winreg模块 自带 如果是python2请修改为 winreg 前置知识 所有已保存的网络存储HKEY LOCAL MACHINE SOFTWARE Microsoft W
  • Hive表的几种存储格式及在性能调优应用

    一 理论知识学习 底层决定上层建筑 此部分内容引用了 Hive表的几种存储格式 海贼王一样的男人 博客园 Hive的文件存储格式 textFile textFile为默认格式 存储方式 行存储 缺点 磁盘开销大 数据解析开销大 压缩的tex