Impala vs GreenPlum vs StarRocks 千万级数据场景下性能测试及比较
背景介绍:
近期研发大数据产品遇到一个需求,面对大数据平台中的巨量数据,用户需要对不同表的数据进行聚合查询,包括join,group,count等操作,需要快速的得到结果。目前主要面向离线数据,暂时不考虑实时数据。现行技术选型是基于CDH的大数据平台,通过Mapreduce或者spark引擎进行计算,实时计算效果不太理想。
分析和思考:
这种场景是一种典型的OLAP场景,在大数据底座上完成快速的数据分析工作。目前在市面上有很多种解决方案,通常有以下几种:
1.基于CDH的Parquet存储+Impala,实现对离线数据的快速查询(若有实时数据场景,考虑kudu+impala)
2.引入MPP(Massively Parallel Processing)引擎,例如:Greenplum和starrocks产品,可以独立于hadoop生态而存在。
接下来需要对上面三种工具parquet+impala,greenplum,starrocks进行验证比较。
方案比较:
测试数据:准备了两张表分别为SAD(700,0000条数据),ITEM(SAD的子表,通过SAD_ID关联,300,0000条数据)
测试场景:join+group+order操作
测试语句:
select a.B33_COMMODITY_CODE,round(a.cnt1/b.cnt2,10) as proportion from (select I.B33_COMMODITY_CODE,count(*) as cnt1 from ura_demo.ods_sad_parquet S left join ura_demo.ods_item_parquet I on S.SAD_ID=I.SAD_ID where S.VERSION >1 group by I.B33_COMMODITY_CODE) a join (select count(*) as cnt2 from ura_demo.ods_sad_parquet) b on 1=1 order by proportion DESC;
a.数据导入到hive数仓,以parquet格式存储,通过impala 查询
数据导入(oracle-->hive):
sqoop脚本+hive脚本
sqoop import --connect jdbc:oracle:thin:@*.*.*.*:1521:test --username system --password="system123" --table CLR.ITEM -m 1 --hive-import -delete-target-dir --hive-table demo.ods_item --map-column-java TARIFF_DESCRIPTION_GOODS=String --hive-drop-import-delims sqoop import --connect jdbc:oracle:thin:@*.*.*.*:1521:test --username system --password="system123" --table CLR.SAD -m 1 --hive-import -delete-target-dir --hive-table demo.sad --hive-drop-import-delims create table demo.ods_sad_parquet stored as parquet as select * from demo.sad; create table demo.ods_item_parquet stored as parquet as select * from demo.ods_item;
b. 安装greenplum,数据导入到greenplum
主机规划:1master+2segment (暂时不建立standby主机)
主机配置:
master | segment |
cpu :8核 25GHZ 内存:DDR4 64G 硬盘:256G SSD 网卡:内部万兆网卡互联 |
cpu :8核 25GHZ 内存:DDR4 64G 硬盘:256G SSD 网卡:内部万兆网卡互联 |
集群安装:安装教程
安装注意: 1.三台主机都要修改系统内核信息,安装应用程序
2.三台主机要实现免密登录
3.数据存储目录(文中的/opt/)一定指定到相关数据盘目录,并且赋予gpadmin用户所有
4.其他操作基本上在master上通过命令实现(提前配置了三台主机间的免密登录,master上直接操作其他segment主机)
附:greenplum是基于postgreqsql的,操作命令:
启动命令:切换到gpadmin用户,master主机上执行gpstart
连接命令:psql -d gp_sydb -h mpp-cluster-master -p 5432 -U gpadmin
数据库列表: \l
切入demo库:\c demo
库中所有表:\d
退出:\q
查询:select count(1) from public."ITEM";
关闭green plum:gpstop
数据导入:oracle-->greenplum 在master主机上安装cloudcanal工具(可以配置两个节点,master上安装主程序,worker01上再安装一个sidcar节点,提升计算性能),提升数据迁移效率,注意调整任务的参数,如:fullbatchsize,可以手动调整查看效果,达到最佳效果
常见错误:Failed to flush data to StarRocks,解决方法
c. 安装starrocks,数据导入到starrocks
主机规划:1fe+3be (fe也作为一个be)
主机配置:
fe | be |
cpu :8核 25GHZ 内存:DDR4 64G 硬盘:256G SSD 网卡:内部万兆网卡互联 |
cpu :8核 25GHZ 内存:DDR4 64G 硬盘:256G SSD 网卡:内部万兆网卡互联 |
集群安装:安装教程
安装注意: 1.三台主机都要copy安装应用程序
2.三台主机要实现免密登录,
3.FE启动,必须切换到root
master主机上/data/software/fe/bin
在master下启动fe:bin/start_fe.sh --daemon
启动mysql客户端:mysql -uroot -P 9030 -h52.130.81.91
默认密码为空
查看状态:
show frontends \G
4.BE启动,必须切换到root
master主机上/data/software/be/bin
worker01主机上/data/software/be/bin
worker02主机上/data/software/fe/bin
bin/start_be.sh --daemon
查看BE状况:
show backends \G
5.starrocks基于mysql,操作命令和mysql相似:mysql -uroot -P 9030 -h*.*.*.*
数据导入:oracle-->starrocks, 使用cloudcanla实现oracle到starrocks的数据迁移
结论:
分类 | parquet+impala | greenplum | starrocks(test1) | starrocks(test2) |
10次测试结果 | 第1次测试结果1960 第2次测试结果2184 第3次测试结果1771 第4次测试结果2049 第5次测试结果1824 第6次测试结果2055 第7次测试结果1791 第8次测试结果2177 第9次测试结果2046 第10次测试结果2176 |
第1次测试结果1607 第2次测试结果1445 第3次测试结果1441 第4次测试结果1517 第5次测试结果1493 第6次测试结果1406 第7次测试结果1473 第8次测试结果1584 第9次测试结果1569 第10次测试结果1468 |
第1次测试结果3867 |
第1次测试结果1446 第2次测试结果980 第3次测试结果1112 第4次测试结果1362 第5次测试结果901 第6次测试结果1126 第7次测试结果1322 第8次测试结果1199 第9次测试结果1420 第10次测试结果1480 |
10次查询总时间 | 20040 | 15009 | 15880 | 12353 |
从结果上看,引入MPP引擎的确可以提升查询性能,查询时间基本在1s~2s之间,而greenplum和starrocks之间的比较,在相同的测试环境下,每次测试的结果稍有不同,但整体上来说starrocks稍微优于greenplum,可以根据熟悉程度进行选择。