前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL on Hadoop性能对比-Hive、Spark SQL、Impala

SQL on Hadoop性能对比-Hive、Spark SQL、Impala

作者头像
Spark学习技巧
发布于 2021-03-05 03:39:08
发布于 2021-03-05 03:39:08
1.7K0
举报
文章被收录于专栏:Spark学习技巧Spark学习技巧

1 三种语言、三套工具、三个架构

不了解SQL on Hadoop三驾马车-HiveSpark SQL、Impala吗?听小编慢慢道来

1

Hive

Apache Hive数据仓库软件提供对存储在分布式中的大型数据集的查询和管理,它本身是建立在Apache Hadoop之上。Hive SQL代表的是以传统基于Mapreduce为核心的SQL语言。

2

Spark SQL

Spark SQL则是基于内存计算Spark框架。Spark SQL抛弃原有Shark的代码,汲取了Shark的一些优点,如内存列存储(In-Memory Columnar Storage)、Hive兼容性等,重新开发了Spark SQL代码。由于摆脱了对Hive的依赖性,SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便。

3

Impala

Impala则是Cloudera公司主导开发的查询系统,最近刚刚完全开源。主要参考的是Google的Dremel,实现了多层查询树,使得任务可以分布在所有节点上并行执行和聚合结果。

2 对本文中测试的说明

本文将从压缩对查询速度的影响、文件格式对CPU资源消耗的影响、文件格式对内存消耗的影响三个部分进行性能的比较。

测试数据:

本次测试采用的是某省2014年6月某天的网络流量话单数据,数据量为772.57G。

测试环境: 共有15台机器,物理内存为16G。HiveSQL与Spark SQL都是基于YARN资源分配。

内存资源设置:

yarn.nodemanager.resource.memory-mb为8G,yarn.scheduler.minimum-allocation-mb为512MB,yarn.scheduler.maximum-allocation-mb为8G.

CPU资源设置:

yarn.nodemanager.resource.cpu-vcores为16个,yarn.scheduler.minimum-allocation-vcores为1个,yarn.scheduler.maximum-allocation-vcores为16个

特别注意:

本次测试会将结果保存到本地,查询时间是包括了IO传输到本地的时间。

本文档中涉及的查询语句: 查询一:select * from table where phnum = '139******** '

查询二:select phnum, ByteUp, ByteDn from table where phnum = '139********'

查询三:select phnum, ByteUp, ByteDn from table where phnum like '139*****%'

查询四:select GGSN, count(*) from table group by GGSN

查询五:select count(*) from table

查询六:selectGGSN,count(*), sum(cast(ByteUp as float) + cast(ByteDn as float)), sum(cast(PktUp as float) + cast(PktDn as float)) from table group by GGSN

查询七:select m.T_2G_3G, count() group by m.T_2G_3G from (selectT_2G_3G,phnum,count() from table group by T_2G_3G, phnum) as m

3 不同文件格式和压缩方式条件下的查询时间对比

1

文件格式

测试所用的文件格式有如下几种:SequenceFile(Hadoop生态圈常用文件格式)、RCFile(结合了行式和列式存储格式的优点)、Parquet(列式存储格式)

2

测试结果

3

结果说明

- 从压缩的角度来讲,三种文件格式均有下述结论:压缩可以减少输入数据量,从而减少查询时间。原因在于这些查询当中IO的耗时占据查询时间的大部分时间。并且压缩后的数据量和查询时间成正比,压缩后的查询平均耗时是压缩前的一半左右。

- 从文件格式的角度来讲:Hive适配最好的是RCfile文件格式,spark SQL是Parquet,Impala适配最好的是Parquet。在纵向上来看,Impala在采用Parquet文件格式的时候,查询速度最快,而且相比于RCFile而言,查询速度可提升3.5倍左右,相比于Spark SQL在相同条件下可以提升2倍。对于加载个别列并进行查询操作的话,Impala采用Parquet格式是最优选择。

- 综合结论:当需要加载所有列的时候,无论哪种查询方式,RCFile都是最好的选择。因为采用RCFile这种格式保证了同一行的数据位于同一个节点上,因此元组的重构的开销成本就会很低。然后对每行进行垂直划分,以便于单独进行列式存储。

4 不同文件格式和压缩方式条件下的CPU资源消耗对比

1

测试说明

- CPU累积时间一方面反映的是查询时间,即查询时间越长,CPU的累积时间就会越多。另一方面反映的是查询中重组数据的难度,重组数据的难度越大,CPU的累积时间就会越多。因为Spark SQL无法监测到具体的CPU使用情况,故没有比较。

- 这里(Hive/Impala)各种文件格式消耗CPU值,是指在整个查询过程中CPU累积时间。

2

测试结果

3

测试结果说明

- RCFile采用Snappy与Parquet压缩方式的对比:从Hive来看两者消耗的CPU时间相当,而且两者的数据量大小是差不多的(Hive的RCFile经过Snappy压缩后为286G,Parquet数据量大小为265G),对于Hive来讲数据量的多少直接影响了CPU累积时间。但是要注意的是,在查询一,因为查询一要求加载所有的列,对于以列式存储为特征的Parquet而言,数据重组的难度会极具增大,消耗了很多的CPU资源,所以在Hive的查询一中,Parquet消耗的CPU累计时间是最大的,同时查询时间也是最大的。所以综合来看,对于Hive而言采用RCFile文件格式经过Snappy压缩后的方式是最合适的。

- Impala的说明:对于Impala而言,情况则有些不同。在查询一中因为加载所有列,造成了内存不足,导致无法查询。

5 不同文件格式和压缩方式条件下的内存消耗对比

1

测试说明

- 因为无法检测具体每种查询所消耗的内存资源,所以本次执行Spark SQL和Hive基本可以假定是在充分使用了8G内存资源下测试的。

- 对于三种类型的查询方式在内存上的使用情况在纵向比较是存在困难的,一是没有监测到具体查询中Hive和SparkSQL的内存使用情况,二是三者并非都是以内存计算为特点,纵向比较意义不大。但是可以通过设置yarn.nodemanager.resource.memory-mb的大小横向对Hive和SparkSQL在不同内存条件下进行比较。

2

测试结果

3

结果分析

- 在查询一中,因为对于未压缩的Sequence消耗内存很大,单节点峰值超过了7.8G。Parquet消耗内存更大,单节点峰值超过了12.6G,并且因为无法再申请内存而报错。所以在加载全部列的时候,仍然是不推荐使用Parquet格式。

- 比较除查询一之外的其余查询所消耗的平均内存,可以比较所有文件的平均消耗内存排名为:Sequence未压缩(1650MB)> Sequence 压缩(798MB)> Parquet(652MB)> RCFile未压缩(560MB)> RCFile压缩(500MB)> 文本(478MB)。Parquet格式所消耗的内存与RCFile、文本相比,内存消耗相差不大。所以选择Parquet格式对于Impala而言,仍然是不错的选择。

- 由于快速检索这种交互式查询需要支持多用户并发操作,因此每一个查询使用的资源越少越好。从上述内存使用状况来看,使用文本格式占用的资源是最稳定的,保持在较低水平,使用Parquet格式占用的内存有时高于1GB(查询1、2、3、7),不太稳定,当有20个并发查询时当前集群的节点的物理内存是不够的(16GB,实际可用12.6GB)。因此,除非物理内存充足,不然使用Parquet格式可能无法支持15个以上的并发查询。

6 不同查询工具生成Parquet格式对Impala查询的影响

1

测试说明

- 从前面三个部分可以看出Impala与Parquet适配性最好,而且Impala在使用Parquet格式进行查询时的查询速度最快。但是我们从上面的测试也可以看出三种查询工具生成的Parquet格式文件是不一样的。这会影响到Impala查询的各个方面。下面测试的就是不同查询工具生成的Parquet格式对Impala查询的影响。

2

查询时间的测试结果

从上图可以看出以下几点:

1. 对于查询三至查询六,所有Parquet格式的查询时间相当;对于查询一与查询二,Spark-Parquet的查询时间接近Hive-Parquet的1/2;对于查询七,Hive-Parquet和Spark-Parquet查询时间相当,均少于Impala-parquet。

2. 结论:单从查询速度上考虑,Spark-parquet是适配于Impala的最佳Parquet格式。

3

CPU时间的测试结果

其中,对于Impala生成的Parquet文件来说查询一因内存占用过大而无法执行,图中的CPU时间标记为-1。

从上图可以看出以下几点:

1. 对于查询二至六,所有Parquet格式CPU时间相当;对于查询一与七,Spark-Parquet的CPU时间最少。

2. 结论:单从CPU时间上考虑,Spark-parquet占用的CPU资源最少。

4

内存占用的测试结果

其中,对于Impala生成的Parquet文件来说查询一因内存占用过大而无法执行,图中的内存占用标记为-1。

从上图可以看出以下几点:

1. 对于所有查询,Impala-Parquet格式占用的内存最多;对于查询二至查询七,Hive-Parquet和Spark-Parquet占用的内存相当;对于查询一,Spark-Parquet占用内存约为Hive-Parquet的1.5倍。

2. 结论:单从内存占用上考虑,Hive-Parquet占用的内存资源最少,其次是Spark-Parquet。

5

读取数据量测试结果

其中,对于Impala生成的Parquet文件来说查询一因内存占用过大而无法执行,图中的读取数据量标记为-1。

从上图可以看出以下几点:

1. 对于查询二至查询七,读取数据量大小的排序大致为 Impala-Parquet > Hive-Parquet > Spark-Parquet;对于查询一至查询三,Spark-Parquet读取的数据量接近Hive-Parquet的一半。

2. 结论:单从读取数据量大小上考虑,Spark-Parquet读取的数据量最少,在以IO时间为主要时间开销的查询(如查询一)中,读取数据量与查询时间成正比,即Spark-Parquet的查询时间最少。

6

综合结论

- 综合上述几点,可以得出的结论是:在执行除查询一(扫描所有列)以外的查询时,使用Spark-Parquet的查询速度最快,占用CPU与内存资源最少。

7 结论

• 纵向上来比较,在节点可用物理内存充足的情况下,Impala采用SparkSQL生成的Parquet格式的查询速度是最快的,并且在CPU和内存上同时具有优势。如果需要构建大数据情况下交互式查询,本条结论具有重要的参考价值。

• 输入数据量的大小是影响查询速度、CPU消耗与内存消耗的关键。

• 尽管在文本格式下进行格式转换会消耗时间,但是这种时间的消耗是值得的,因为可以极大提升查询速度,尤其是适合一次写入,多次查询的情况。

• Sequence File是Hadoop生态系统中普遍支持的文件格式,所以适用性是很普遍的,相比之下,RCFile和Parquet文件格式的适用性要比Sequence File低。但是其在查询速度、资源消耗上是不占有任何优势的。

• 对指定格式进行Snappy压缩也是合适的,因为可以减少近一半的数据量,可以减少IO压力,将IO的压力分担给CPU。

• 对于Hive而言,采用RCFile格式并对其进行Snappy压缩是最合适的。

• 对于SparkSQL而言,采用Parquet格式是最合适的。

• 对于加载全部列的查询方式,采用RCFile格式是最合适的。

• 对于加载部分列,优先选择Impala进行查询。而且对于文件格式来说,推荐使用Spark SQL进行压缩生成的Parquet格式。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浪尖聊大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Impala介绍
Impala 是一个高性能分析数据库,可针对存储在 Apache Hadoop 集群中的 PB 级数据进行闪电般快速的分布式 SQL 查询。Impala 还是一个现代化,大规模分布式,大规模并行的 C ++ 查询引擎,可以分析,转换和合并来自各种数据源的数据。Impala采用与Hive相同的元数据、SQL语法、ODBC 驱动程序和用户接口(Hue Beeswax),这样在使用CDH产品时,批处理和实时查询的平台是统一的。
加米谷大数据
2018/07/25
1.9K0
Impala介绍
两种列式存储格式:Parquet和ORC
随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive、Spark SQL、Impala、Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile、ORC、Parquet等,本文主要从实现的角度上对比分析ORC和Parquet两种典型的列存格式,并对它们做了相应的对比测试。
不吃西红柿
2022/07/29
7.1K0
两种列式存储格式:Parquet和ORC
Hive重点难点:Hive原理&优化&面试(下)
Map在读取数据时,先将数据拆分成若干数据,并读取到Map方法中被处理。数据在输出的时候,被分成若干分区并写入内存缓存(buffer)中,内存缓存被数据填充到一定程度会溢出到磁盘并排序,当Map执行完后会将一个机器上输出的临时文件进行归并存入到HDFS中。
大数据真好玩
2021/10/25
1.6K0
Hive重点难点:Hive原理&优化&面试(下)
Hadoop面试题[通俗易懂]
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题
全栈程序员站长
2022/09/07
5320
打工人必备:Hive小文件合并与数据压缩
Hive仓库表数据最终是存储在HDFS上,由于Hadoop的特性,对大文件的处理非常高效。而且大文件可以减少文件元数据信息,减轻NameNode的存储压力。但是在数据仓库中,越是上层的表汇总程度就越高,数据量也就越小,而且这些表通常会有日期分区,随着时间的推移,HDFS的文件数目就会逐步增加。
王知无-import_bigdata
2020/12/18
2.5K0
打工人必备:Hive小文件合并与数据压缩
SQL on Hadoop技术分析(一)
背景 Hadoop的诞生是划时代的数据变革,但关系型数据库时代的存留也为Hadoop真正占领数据库领域埋下了许多的障碍。对SQL(尤其是PL/SQL)的支持一直是Hadoop大数据平台在替代旧数据时代亟待解决的问题。Hadoop对SQL数据库的支持度一直是企业用户最关心的诉求点之一,也是他们选择的Hadoop平台的重要标准。 自打Hive出现之后,SQL onHadoop相关系统已经百花齐放,速度越来越快,功能也越来越齐全。目前比较主流的有Impala,Spark SQL,HAWQ,Tez,Drill,
大数据和云计算技术
2018/03/08
1.1K0
spark sql 非业务调优
这个是扯不断,理还乱。建议能加内存就加内存,没事调啥JVM,你都不了解JVM和你的任务数据。默认的参数已经很好了,对于GC算法,spark sql可以尝试一些 G1。
Spark学习技巧
2019/07/30
1.3K0
Impala Schema 设计原则
使用本主题中的原则可以构建优化且可伸缩的Schema,并与现有的数据管理流程很好集成。
大数据杂货铺
2020/12/08
6950
HAWQ取代传统数仓实践(一)——为什么选择HAWQ
本文介绍了大数据处理框架Apache HAWQ的源起、设计目标、主要特性、系统架构、性能、适用场景以及与其他大数据处理框架的对比。HAWQ适用于需要高性能、低延迟、类似SQL的查询语言来处理大规模数据集的场景。HAWQ基于Apache Hadoop构建,并提供了类似于Hive的SQL查询语言。与Hive、SparkSQL、Impala等大数据处理框架相比,HAWQ在查询性能、运行时延迟、支持的数据类型、内置函数等方面都有显著的优势。
用户1148526
2018/01/03
2.1K0
HAWQ取代传统数仓实践(一)——为什么选择HAWQ
Spark性能优化和故障处理
Spark 官方推荐,Task 数量应该设置为 Spark 作业总 CPU core 数量的 2~3 倍。
大数据老哥
2021/11/15
8030
Spark性能优化和故障处理
Impala基本原理
Impala是Cloudera开源的实时查询项目,目标是基于统一的SQL快速查询各种存储系统,如HDFS、Kudu、HBase等。Impala原意为 高角羚 ,该项目的特点就是 快速 。Impala舍弃MapReduce,基于C++实现针对硬件做了很多的优化,支持数据本地性。
洁儿
2023/11/21
5130
Spark SQL的Parquet那些事儿
Parquet是一种列式存储格式,很多种处理引擎都支持这种存储格式,也是sparksql的默认存储格式。Spark SQL支持灵活的读和写Parquet文件,并且对parquet文件的schema可以自动解析。当Spark SQL需要写成Parquet文件时,处于兼容的原因所有的列都被自动转化为了nullable。
Spark学习技巧
2019/05/28
2.2K0
【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
  周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =。这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark SQL相关的知识,如果对Spark不熟的同学可以先看看之前总结的两篇文章: 【原】Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性 #####我是
Charlotte77
2018/01/09
1.9K0
【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
原 荐 SparkSQL简介及入门
SparkSQL简介及入门 一、概述     Spark为结构化数据处理引入了一个称为Spark SQL的编程模块。它提供了一个称为DataFrame(数据框)的编程抽象,DF的底层仍然是RDD,并且可以充当分布式SQL查询引擎。 1、SparkSQL的由来     SparkSQL的前身是Shark。在Hadoop发展过程中,为了给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,Hive应运而生,是当时唯一运行在hadoop上的SQL-on-Hadoop工具。但是,MapReduc
云飞扬
2018/05/17
2.6K0
盘点:SQL on Hadoop中用到的主要技术
自打Hive出现之后,经过几年的发展,SQL on Hadoop相关的系统已经百花齐放,速度越来越快,功能也越来越齐全。本文并不是要去比较所谓“交互式查询哪家强”,而是试图梳理出一个统一的视角,来看看各家系统有哪些技术上相通之处。
王知无-import_bigdata
2020/06/11
1.4K0
基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(二)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/52249187
用户1148526
2019/05/25
1.2K0
Spark工程开发前台技术实现与后台函数调用
Spark是一个通用的大规模数据快速处理引擎。可以简单理解为Spark就是一个大数据分布式处理框架。基于内存计算的Spark的计算速度要比Hadoop的MapReduce快上50倍以上,基于磁盘的计算速度也快于10倍以上。Spark运行在Hadoop第二代的yarn集群管理之上,可以轻松读取Hadoop的任何数据。能够读取HBase、HDFS等Hadoop的数据源。
用户3003813
2018/09/06
1.2K0
Spark的性能调优
下面这些关于Spark的性能调优项,有的是来自官方的,有的是来自别的的工程师,有的则是我自己总结的。
加米谷大数据
2018/07/25
2.2K0
Spark的性能调优
Spark SQL在雪球的实践
因为业务需要,雪球数据团队基于HDP 3.1.5(Hadoop 3.1.1+Hive 3.1.0+Tez 0.9.1)搭建了一个新的集群,HDP 3.1.5默认使用Hive3 on Tez作为ETL计算引擎,但是在使用Hive3 on Tez中,我们遇到很多问题:
kenvie
2022/05/03
3.2K0
客快物流大数据项目(七十):Impala入门介绍
impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具,
Lansonli
2022/12/18
1.1K0
客快物流大数据项目(七十):Impala入门介绍
相关推荐
Impala介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档