目录

1、项目介绍

2、测试方法

3、性能优化

3.1 Hive原理

3.2 优化过程


1、项目介绍

这是我在华为做的最后一个项目,当时在华为海思部门。部门主要是给一些国产芯片做服务器的软件性能测试,包括大数据生态软件Hadoop、Hbase、Hive等。本人负责的是Hive软件的性能测试和性能优化,最终对比Hive在x86和arm服务器上的性能。

2、测试方法

使用业界sql性能测试工具tpc-ds,选择个别SQL做性能分析优化。

TPC-DS是与真实场景非常接近的一个测试集,它包含7张事实表,17张纬度表,平均每张表含有18列。用这个数据集能够很好的模拟企业数据查询、报表生成以及数据挖掘等复杂应用。

下面是测试的数据集部分表的关系图:

测试用例举例:

-- 1.符合某条件的每各客户单次消费额总额大于900的客户表
-- 条件:
-- 在1999-2001年期间,
-- 每月的1-3或25-28日的,
-- 来自williamson county的客户。with sales_record(ss_ticket_number,ss_customer_sk,sales)as
(selectss_ticket_number,ss_customer_sk,sum(ss_sales_price)as salesfromstore_sales ss,date_dim dd,store s,household_demographics hdwheress.ss_sold_date_sk=dd.d_date_skand ss.ss_store_sk=s.s_store_skand ss.ss_hdemo_sk=hd.hd_demo_skand(dd.d_dom between 1 and 3 or dd.d_dom between 25 and 28)and dd.d_year in (1999,2000,2001)and s.s_county in('williamson county')group byss_ticket_number,ss_cutomer_sk
)
selectc_last_name,c_first_name,c_salutation,c_preferred_cust_flag,sales,count(*) as cnt
fromsales_record,customer
wheress_customer_sk=c_customer_skand sales>900
group byc_last_name,c_first_name,c_salutation,c_preferred_cust_flag,sales
order byc_last_name,c_first_name,c_salutation,c_preferred_cust_flag desc;

3、性能优化

3.1 Hive原理

Hive是hadoop生态中的数据仓库,数据存储于hdfs上。最开始Hadoop生态使用MapReduce做数据计算,由于MapReduce程序难以开发、比较复杂,所以出现了Hive,对于hdfs上的数据进行结构化,映射到Hive里面的表,并提供HQL查询入口,内部将HQL解析成MapReduce任务执行。Hive解析HQL的过程:
1、接受一个sql字符串,解析成AST;
2、再经过语法分析器解析成查询单元QB,经过逻辑计划生成器,生成操作树;
3、操作数进一步被优化,变成优化后的一个有向无环图,优化手段包括谓词下推,关联排序,分区裁剪等;
4、再经过物理计划生成器,以一定的规则生成可执行的任务;
5、物理计划可以再经过物理优化器进一步优化;

3.2 优化过程

1、并行化执行

每个查询会被Hive转化为多个任务执行,这些任务有些没有关联性,则可以并行化运行,减少执行时间;

set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=8;

2、 job合并输入小文件 
因为hive其实底层执行的是mapreduce程序,所以减少输入小文件可以提升性能。
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

3、 job合并输出小文件 
有点像map阶段完成后,向reduce阶段输入时使用combine,从而合并小文件向reduce输入
set hive.merge.smallfiles.avgsize=256000000;当输出文件平均大小小于该值,启动新job合并文件
set hive.merge.size.per.task=64000000;合并之后的文件大小

4、修改map数量

通过设置参数mapred.max.split.size调整map数量为接近cpu核数;

5、设置reduce数量

通过设置mapred.reduce.tasks调整reduce数量;

6、中间数据启用压缩

设置参数hive.intermediate.compression.codec为true,并设置压缩算法hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

数据压缩减少了数据传输量,提高传输效率,但是以增加压缩和解压缩开销为代价,而Arm服务器有多核优势,这样正好利用了多核资源。

7、倾斜连接优化

在两表join的时候会将相同键值的行发到同一个reduce,数量多的个别键值就会造成数据倾斜,配置倾斜连接的相关属性可以优化倾斜连接。优化参数hive.optimize.skewjoin为true时,会将计算计划分为两个MR任务,第一个任务随机分发key到不同的reduce,聚合计算后再经过第二个MR任务分发相同的key数据到同一个reduce任务进行聚合。

8、启用基于成本的优化器

Hive提供了基于的成本优化器(CBO),其特性是可以根据查询成本指定执行计划。

例如:确定表连接的顺序、以何种方式执行连接、使用的并行度等。开启方式:hive.cbo.enable配置为true。

9、启用向量化

启用向量化方式后,fetch数据以批量的方式提升效率,启用方式:hive.vectorized.execution.enabled和hive.vectorized.execution.reduce.enabled配置为true。

10、存储格式优化

使用orc的存储格式

表2.2-1 存储格式对比
存储格式 存储方式 特点
TextFile 行存储

存储空间消耗比较大,并且压缩的text 无法分割和合并。

查询的效率最低,可以直接存储,加载数据的速度最高。

SequenceFile 行存储

存储空间消耗最大,压缩的文件可以分割和合并。

查询效率高,需要通过text文件转化来加载。

RCFile

数据按行分块,

每块按照列存储

存储空间最小,

查询的效率最高 ,

需要通过text文件转化来加载,

加载的速度最低。

压缩快 快速列存取。

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

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

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

ORCFile

数据按行分块,

每块按照列存储

压缩快,快速列存取 ,效率比rcfile高,是rcfile的改良版本。
Parquet 列存储

相对于PRC,Parquet压缩比较低,查询效率较低,

不支持update、insert和ACID.但是Parquet支持Impala查询引擎。

11、源码的优化

分别从软件配置、操作系统配置、源码优化等方面做性能的优化。

软件配置包括map、reduce数量的调整,数据压缩,压缩小文件等;操作系统配置包括修改磁盘调度算法等;源码方面主要分析了MapReduce的执行过程,通过numa绑核的方式将yarnchild线程绑定到特定的numa核上。

大数据组件Hive性能测试和性能优化相关推荐

  1. DevExpress ChartControl大数据加载时有哪些性能优化方法

    DevExpress ChartControl加载大数据量数据时的性能优化方法有哪些? 关于图表优化,可从以下几个方面解决: 1.关闭不需要的可视化的元素(如LineMarkers, Labels等) ...

  2. EasyExcel3.0.5 加快大数据查询速度,查询性能优化

    文章目录 前言 源码 技术栈和代码结构 关键的导出监听器 Service 实现 测试 前言 语雀社区写的 easyExcel 确实是目前市面excel 导入导出性能最好的框架,使用简便.社区指导清晰, ...

  3. hive 取消打印日志信息_Hive及其相关大数据组件

    HDFS架构 Hadoop 分布式文件系统(HDFS)是 Hive 存储数据的地方,简单了解HDFS的基本机制和读写工作机制,对于排查HiveSQL 程序是否由于数据存储引发的性能问题有较大的帮助. ...

  4. B06 - 999、大数据组件学习③ - Hive

    初学耗时:999h 注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端. 『   因为要去见那个不一般的人,所以我就不能是一般人.』  B99.要学就学大数据 - B系列总纲   ...

  5. 一篇文章带你了解大数据生态圈---大数据组件图谱

    小编一篇文章带你了解大数据生态圈-大数据组件图谱 转载地址:http://blog.csdn.net/u010039929/article/details/70157376 文章目录 小编一篇文章带你 ...

  6. 大数据平台常用组件_这款大数据智能服务平台火了!全自动化配置30+款开源大数据组件...

    在互联网市场的头部效应下,企业所面临的竞争压力越来越大,如何有效解决获客成本高.用户黏性低.变现能力弱等问题,正是越来越多的企业开始构建大数据平台的初衷.但由于大数据解决方案所涉及的组件错综复杂.技术 ...

  7. Kvm虚拟化性能测试与性能优化实践

    1.环境介绍 1.1测试简介 本次测试是针对KVM虚拟化在CPU.内存.磁盘.网络4大方面的全面性能测试与性能优化实践,目的在于通过对比测试,找出最适合我们所使用的硬件与软件架构的最佳优化配置,为Op ...

  8. 大数据领域的性能测试Benchmark介绍

    前言:大数据领域的性能测试Benchmark介绍,需要的可以看看! 一.Benchmark简介 Benchmark是一个评价方式,在整个计算机领域有着长期的应用.正如维基百科上的解释"As ...

  9. HIVE调优(性能优化)

    HIVE调优(性能优化) HIVE调优涉及到压缩和存储调优,参数调优,sql调优,数据倾斜调优,小文件问题调优等 -1- 数据压缩和存储格式 数据压缩编码 为了支持多种压缩/解压缩算法,Hadoop引 ...

最新文章

  1. uboot引导kernel - 3 -uboot给内核传参详解
  2. CTF---Web入门第十三题 拐弯抹角
  3. 从JDK源码角度看Long
  4. [转]JQuery ui 实现类似于confirm的功能
  5. 标记化结构初始化语法(C语言)
  6. c 普通的文本变成注释文本的快捷键_IntelliJ Idea 常用快捷键列表 (2019年总结)
  7. mfc让图片与按钮一起_对许多张图片进行批量裁剪,看看我是如何快速做到的
  8. html5 摄像头 直播,详解HTML5 使用video标签实现选择摄像头功能
  9. 云和恩墨张皖川:产品能力提升是推动国产替代进程的关键因素
  10. XP搭建winwebmail具体步骤
  11. Q130:PBRT-V3,非均匀介质的采样(11.3.3章节、15.2.2章节)
  12. php fmod小数位数_PHP取余函数介绍MOD(x,y)与x%y
  13. vasp和ms_武汉理工大学赵焱课题组开发脚本 MS建模一键获取VASP输入文件POSCAR
  14. nuxt.js项目打包上传服务器pm2启动各种问题
  15. NTFS文件系统详解 之 文件定位
  16. oracle误删了表怎么恢复数据,oracle误删除表或者表数据的恢复方法总结
  17. 中通快递关键业务和复杂架构挑战下的 Kubernetes 集群服务暴露实践
  18. android 读取手机存储数据恢复,Android手机数据恢复
  19. 阅文java面试_面试官:说说Redis的Hash底层 我:......(来自阅文的面试题)
  20. iphone个人热点无法开启_iPhone为什么打不开热点 iPhone打开热点方法【教程】

热门文章

  1. BQ PD2710QC显示器体验
  2. ORACLE回滚段管理(上)
  3. 如何查看端口是否被占用?
  4. SQLServer2008服务无法启动
  5. 慕课网七月python破解_无需破解,Python这个神器帮你免费获取资源!
  6. 软件缘-网友个人精心打造的精品软件收集_我是亲民_新浪博客
  7. 用PS做个加载GIF图片
  8. Docker Host创建swarm overlay网络
  9. 在电脑上录制语音的最佳方法(麦克风)
  10. 支付宝支付 错误码4000