Hive/Impala/集算器性能对比测试报告(下)——关联计算

本文对比了Hive、Impala和集算器在窄表和宽表上的分组汇总及关联计算性能。结果显示,在两种场景下Impala和集算器的表现均优于Hive,尤其在关联计算时性能提升近3倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇进行过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只支持外存计算因此不存在内存限制。集算器修改算法后也可以实现外存计算,不过性能会有所下降。

 

### 如何在 DBeaver 中添加或配置数据库驱动 #### 手动配置 SQLite 驱动 当遇到缺少 SQLite 驱动的情况时,可以按照如下方式操作: 由于离线安装了 DBeaver 软件并尝试使用该软件打开 SQLite 数据库却收到无驱动的提示,则需要手动下载驱动并在软件内导入[^1]。 ```sql -- 这里提供的是 SQL 示例而非具体代码实现 SELECT * FROM sqlite_master WHERE type='table'; ``` 对于其他类型的数据库如 MySQL 或者 SQL Server 的驱动配置也有相似之处但存在细节差异。 #### 添加 SQLServer 数据库驱动 针对 SQL Server 数据库的具体步骤为:输入必要的连接参数(IP地址、端口、用户名、密码以及目标数据库名称),之后通过点击测试连接来验证是否能够正常建立通信链路。此时可能会被提醒去下载相应的 JDBC 驱动文件。前往官方站点获取 ZIP 形式的驱动包,并将其解压缩后的内容加入到 DBeaver 的自定义驱动列表当中。删除原有的默认驱动条目,再利用“添加文件”的功能把刚才准备好的 JAR 文件引入进来。完成上述动作后再回到初始界面补充完整的连接详情最后再次执行测试连接命令确认一切就绪[^2]。 #### 特殊情况下的 MySQL 驱动调整 考虑到不同版本间可能存在兼容性问题,比如从 MySQL 8 开始其内部使用的驱动器类有所更改——即由原来的 `com.mysql.jdbc.Driver` 变更为 `com.mysql.cj.jdbc.Driver` 。因此为了确保能顺利对接较旧版次的数据源,在相应位置修改对应的驱动类名可能是必需的操作之一[^3]。 #### Hive/Impala 类大数据平台的驱动设定 以 Apache Hive 为例说明如何处理这类分布式计算框架所涉及的外部数据源接入事宜。启动创建新链接向导流程选定 Hadoop/BigData 分支下对应的服务类型继续前进直到遇见可选配项为止;接着定位至存储有HiveJDBC驱动组件的位置加载进去并通过工具自动识别的方式选取合适的主类对象最终保存设置以便后续调用测试连通状况[^4]。 综上所述,无论是何种数据库系统想要实现在 DBeaver 上的成功集成都离不开正确地指定匹配版本级别的 Java Database Connectivity (JDBC) 接口描述符及其关联资源路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值