上篇进行过Hive/Impala/集算器的分组计算的性能测试,本篇进行关联计算的性能测试及结果说明。
窄表的关联计算测试
数据样本
被关联表p_narrow。
列数:11
行数:5亿
文本状态下所占空间:120.6G。
数据结构: personid int,name string,sex int,cityid int,birthday int,degree int,col1 string,col2 int,col3
int,col4 int,col5 string
维表d_narrow
列数:9
行数:1000万行
文本状态下所占空间:563M。
数据结构:id int, parentid int, col1 int, col2 int, col3 int, col4 int, col5 int, col6 int, col7 int
说明:
1、被关联表:类似于SQL中Join左侧的表,行数较多。比如订单表。
2、维表:类似于SQL中join右侧的表,行数较少。比如客户ID-客户名表。
测试案例
Hive:select sum(p_narrow.col3), count(p_narrow.col5), sum(d_narrow.col7), d_narrow.id%10000 from p_narrow join d_narrow on d_narrow.id=p_narrow.col7 group by d_narrow.id%10000
Impala:select sum(p_narrow.col3), count(p_narrow.col5), sum(d_narrow.col7), d_narrow.id%10000 from p_narrow join d_narrow on d_narrow.id=p_narrow.col7 group by d_narrow.id%10000
集算器: 代码分为三部分,分别是:汇总机程序、节点机主程序、节点机子程序。
测试结果:
宽表的关联计算测试
数据样本
被关联表p
列数:106
行数:6000万行
文本状态下所占空间:127.9G。
数据结构:personid int,name string,sex int,cityid int,birthday int,degree int,col1 int,col2 int,col3 int,col4 int,col5 int,col6 int,col7 int,col8 int,col9 int,col10 int,col11 int,col12 int,col13 int,col14 int,col15 int,col16 int,col17 int,col18 int,col19 int,col20 int,col21 int,col22 int,col23 int,col24 int,col25 int,col26 int,col27 int,col28 int,col29 int,col30 int,col31 int,col32 int,col33 int,col34 int,col35 int,col36 int,col37 int,col38 int,col39 int,col40 int,col41 int,col42 int,col43 int,col44 int,col45 int,col46 int,col47 int,col48 int,col49 int,col50 int,col51 int,col52 int,col53 int,col54 int,col55 int,col56 int,col57 int,col58 int,col59 int,col60 int,col61 int,col62 int,col63 int,col64 int,col65 int,col66 int,col67 int,col68 int,col69 int,col70 int,col71 int,col72 int,col73 int,col74 int,col75 int,col76 int,col77 int,col78 int,col79 int,col80 int,col81 int,col82 int,col83 int,col84 string,col85 string,col86 string,col87 string,col88 string,col89 string,col90 string,col91 string,col92 string,col93 string,col94 string,col95 string,col96 string,col97 string,col98 string,col99 string,col100 string
维表d
列数:102
行数:1000万行
文本状态下所占空间:6.8G
数据结构:id int, parentid int,col1 int,col2 int,col3 int,col4 int,col5 int,col6 int,col7 int,col8 int,col9 int,col10 int,col11 int,col12 int,col13 int,col14 int,col15 int,col16 int,col17 int,col18 int,col19 int,col20 int,col21 int,col22 int,col23 int,col24 int,col25 int,col26 int,col27 int,col28 int,col29 int,col30 int,col31 int,col32 int,col33 int,col34 int,col35 int,col36 int,col37 int,col38 int,col39 int,col40 int,col41 int,col42 int,col43 int,col44 int,col45 int,col46 int,col47 int,col48 int,col49 int,col50 int,col51 int,col52 int,col53 int,col54 int,col55 int,col56 int,col57 int,col58 int,col59 int,col60 int,col61 int,col62 int,col63 int,col64 int,col65 int,col66 int,col67 int,col68 int,col69 int,col70 int,col71 int,col72 int,col73 int,col74 int,col75 int,col76 int,col77 int,col78 int,col79 int,col80 int,col81 int,col82 int,col83 int,col84 int,col85 int,col86 int,col87 int,col88 int,col89 int,col90 int,col91 int,col92 int,col93 int,col94 int,col95 int,col96 int,col97 int,col98 int,col99 int,col100 int
说明:
1、被关联表:类似于SQL中Join左侧的表,行数较多。比如订单表。
2、维表:类似于SQL中join右侧的表,行数较少。比如客户ID-客户名表。
测试案例
Hive:select sum(p.col3), count(p.col5), sum(d.col7), d.id%10000 from p join d on d.id=p.col7 group by
d.id%10000
Impala:select sum(p.col3), count(p.col5), sum(d.col7), d.id%10000 from p join d on d.id=p.col7 group by d.id%10000
集算器: 代码分为三部分,分别是:汇总机程序、节点机主程序、节点机子程序。
测试结果
小结
A、窄表的分组汇总
1、Impala、集算器的性能明显好于Hive,快一倍或更多。
2、Impala与集算器略有差异,但并不明显。
3、分组列数和汇总列数对三种解决方案的性能影响都不大。
B、宽表的分组汇总
1、Impala、集算器的性能明显好于Hive,快一倍或更多。
2、Impala与集算器略有差异,但并不明显。
3、分组列数和汇总列数对三种解决方案的性能影响都不大。
4、与窄表相比,表的列数对性能影响不大,整表体积对性能有直接影响。Impala在宽表时性能略有下降而Hive和集算器则略有上升。
C、窄表的关联计算
1、Impala、集算器性能明显强于Hive,接近3倍。
2、Implala比集算器略强,但差异并不明显。
D、宽表的关联计算
1、Impala、集算器性能明显强于Hive,接近3倍。
2、Implala比集算器快1秒,基本可以认为两者性能一致。
测试结果解读
Hive的性能较差,是由于它的底层是MapReduce,而MapReduce是通过外存文件实现计算节点间的数据交换,这就导致大量的硬盘IO时间。Implala和集算器可以通过内存来直接交换中间计算结果,性能因此更好。
通过文件来交换数据并非没有好处,事实上在不稳定的大集群环境中,文件交换可以保证中间计算结果的安全。Impala只支持直接交换,Hive只支持文件交换,集算器两者皆可,由程序员自由决定。
分组汇总时集算器比Impala的性能略强,这主要是由于集算器除了支持HDFS,还支持直接读写本地硬盘。而Impala必须经过HDFS才能访问硬盘,多了一层控制自然会慢。
但在关联计算中,我们可以看到集算器和Impala的数据反过来了,Impala的性能等于或略强于集算器。这是因为Impala虽然要经过HDFS来访问硬盘,但是它也会生成本地代码来优化计算性能,比集算器使用的JAVA虚拟机性能要高。可以猜想,分组汇总时更强调数据读取,而关联计算时更强调计算,因此产生了关联计算时Impala反超集算器的现象。
分组列数和汇总列数对分组汇总的性能影响都不大,这是由于本案例的算法比较简单,时间大部分消耗在硬盘读写而不是数据计算上。不过Hive和Implala不是集算器这类过程性语言,太复杂的运算也难以支持,这种CPU空耗属于正常现象。
另外我们将计算结果限制为一万条,这是由于Impala对内存的依赖较大太,大的结果集会导致内存溢出。Hive只支持外存计算因此不存在内存限制。集算器修改算法后也可以实现外存计算,不过性能会有所下降。
相关推荐
标题中的"cloudera-hive/impala-odbc"指的是Cloudera提供的Hive和Impala的ODBC(Open Database Connectivity)驱动程序。ODBC是用于在不同数据库系统之间建立连接的标准接口,使得应用程序可以访问多种类型的数据库...
本文通过亿级数据量在Hive和Impala中对比了text、orc和parquet这三种不同的文件格式,以分析它们的性能表现。 首先,让我们深入了解每种文件格式的特点: 1. **Parquet**: - 优点:Parquet采用了高效的压缩和...
通常情况下,ORCFile和ParquetFile在查询性能上优于TextFile,Impala可能比Hive更快速,因为它采用了更接近数据库的架构,实现了MPP(大规模并行处理)。 此外,验证MapReduce是否正常运行的步骤表明了整个测试环境...
在Python 3.6环境下,连接到Hive和Impala数据库需要一系列的依赖包,这些依赖包涵盖了数据处理、网络通信、数据库接口等多个方面。在本文中,我们将深入探讨这些必要的依赖及其作用。 首先,Hive是Apache软件基金会...
Hive提供了一个SQL-like接口来查询存储在Hadoop中的大数据集,而Impala则是一个高性能、实时查询的系统,设计用于处理大规模数据集。当需要从Java应用程序或者Web应用中访问Hive的数据时,可以通过JDBC(Java ...
8. **报告生成**:整理测试结果,生成测试报告,包含每个查询的性能指标、问题分析及改进建议。 **四、关键知识点** 1. **Hive SQL优化**:理解Hive的查询优化器Tez或Spark,如Joins、Sort/Merge、Bucketing等优化...
【Impala与Hive对比】 Impala和Hive都是基于Hadoop生态系统的数据查询工具,但它们在设计和性能上存在显著差异。Impala是由Cloudera受Google的Dremel启发开发的,旨在提供实时交互式的SQL大数据查询功能。与Hive...
impala_jdbc_2.5.41.1061(最新) hive_jdbc_2.5.19.1053(最新) 均包含英文使用说明文档,兼容绝大多数的hive/impala版本 该资源来自cloudera,仅用于分享知识,学习和交流,请勿用于商业用途
- **性能优化**:Hive和Impala都支持批量执行和结果缓存等优化策略,根据具体需求调整这些设置可以提高性能。 - **错误处理**:在实际应用中,应妥善处理可能出现的异常,例如网络问题、权限错误或SQL语法错误。 ...
本文将探讨 Hadoop 生态系统中的四种主要工具——Hive、Impala、Spark 和 Presto,并对比它们与 Oracle 数据库的特点与应用场景,旨在帮助 Oracle DBA 们更好地理解和掌握这些新兴技术。 #### 二、Hadoop 概览 ...
### 大规模数据查询Hive及Impala技术原理及架构 #### 第一部分:Hive数据查询分析技术和实例介绍 **一、Hive简介** Hive 是一个基于 Hadoop 的数据仓库工具,它允许用户轻松地将结构化数据文件映射为表,并利用 ...
在IT行业中,构建一个能够灵活切换数据源的系统是常见的需求,特别是在大数据处理场景下。本文将详细讨论如何使用Spring Boot、MyBatis和Druid来实现MySQL与Hive之间的多数据源切换,以满足不同业务场景的需求。 ...
Hadoop 是一个基于分布式存储和计算的开源框架,Hive 是基于 Hadoop 的一个数据仓库工具,Impala 是一个高性能的分布式SQL查询引擎。在这篇文章中,我们将会了解 Hadoop 文件系统、Hive 和 Impala 的基本操作。 ...
标题中提到的“HDP平台的Hive性能调优——Hive高性能最佳实践”涉及Hadoop发行版平台(HDP)上Apache Hive的性能优化。Apache Hive是一个构建在Hadoop上的数据仓库工具,它允许用户通过类SQL语言HiveQL来对大数据...
这个测试数据集“hive操作相关的测试数据集hive”显然是为了帮助用户理解和实践Hive的各种操作,包括数据导入、查询、分析和数据导出等。 1. **Hive架构**:Hive的核心组件包括元数据存储、驱动器和编译器。元数据...
标题中的“tomcat 7的hive驱动包&impala驱动包”表明了这是一个与Apache Tomcat 7服务器相关的软件包,包含了用于连接Hive和Impala数据库的驱动程序。Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL-like...
大数据hive和impala的客户端界面工具,提可供sql编辑,数据查看,建表等功能
在大数据处理领域,手机号码的清洗是一项至关重要的任务,尤其在使用Hive和Impala这样的大数据分析工具时。本文将详细讲解如何通过自定义函数(UDF)来处理各种格式的手机号码,确保数据的质量和一致性。我们将涵盖...
Missing Hive Execution Jar: /hive/hive1.2.1/lib/hive-exec-*.jar
配置Impala的各个服务,如`/etc/impala/conf/impala.ini`,确保所有节点的配置一致,包括Impalad、StateStore和Catalog Server的地址。 3. **初始化Impala**: 初始化Impala服务,同步Hive元数据到Impala: ``` ...