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,可以根据熟悉程度进行选择。


 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号