[原创]kudu vs parquet, impala vs spark Benchmark

测试环境

  • 节点:

2 台主节点,6台计算节点

  • 机器配置:

16个物理核

128G内存

12*3T磁盘

  • 操作系统:

redhat 7.2

  • 版本:

CDH 5.7.1-1.cdh5.7.1.p0.11

impala_kudu 2.7.0-1.cdh5.9.0.p0.23

kudu 0.9.1-1.kudu0.9.1.p0.32

spark 2.0.0

  • 对照组:

Spark on Parquet

Impala on Parquet

Impala on Kudu

测试数据、语句、场景

TPC-DS,是用于评测决策支持系统(或数据仓库)的标准SQL测试集。这个测试集包含对大数据集的统计/报表生成/联机查询/数据挖掘等复杂应用,测试用的数据和值是有倾斜的,与真实数据一致。可以说TPC-DS是与真实场景非常接近的一个测试集,也是难度较大的一个测试集。

TPC-DS支持指定不同的数据大小。本次测试选择的数据大小分别为10GB、100GB、1TB、10TB。数据大小与表rows的关系如下图所示:

TPC-DS一共99个测试案例,遵循SQL‘99和SQL 2003的语法标准,SQL案例比较复杂.分析的数据量大,并且测试案例是在回答真实的商业问题.测试案例中包含各种业务模型(如分析报告型,迭代式的联机分析型,数据挖掘型等).本次测试使用了大部分的query,某些query由于语法错误、语法不兼容,或者在Hive、Spark、Impala下面都无法跑过,因此这些query不纳入性能测试的范围。

参数配置

本次测验基本上使用了CDH的默认配置。一些重要配置有:

  • Hadoop:  使用非安全模式,不带kerberos认证。
  • Impala:  使用自带的Resource Management,而非YARN;Catalog Server设置内存为32gb;impalad内存设置为64gb。
  • Kudu:   使用data disks的第一块磁盘作为WAL磁盘(也就是使用SATA盘);Kudu Tablet Server内存设置为32gb。
  • Spark:  配置如下
spark.serializer                 org.apache.spark.serializer.KryoSerializer
spark.driver.memory              10g
spark.executor.memory           10g
spark.executor.instances        36
spark.executor.cores            5
spark.yarn.executor.memoryOverhead  2g
spark.sql.autoBroadcastJoinThreshold    209715200

  

测试步骤

  1. 通过tpcds-gen在hdfs上生成parquet数据
  2. 利用impala将tpcds数据从hdfs上导入到kudu
  3. 测试impala on kudu的性能
  4. 测试impala on parquet性能
  5. 测试spark on parquet的性能

测试结果

Kudu数据导入速度

如图所示,kudu在导入小表时速度非常快,当导入大表时,速度反而变慢,性能严重下降。为了避免表字段类型、字段数目、大小造成的速度差异。我们根据同一张表store_sales进行比较,其结果为

(单位rows/秒, 越大越好)

由于kudu一开始先将数据插入到memRowSet,因此在数据集较小时插入速度非常快。当插入的数据达到10亿条级别以上时,性能开始出现严重的downgrade。根据Todd在slack上的解释是,impala插入数据时采用了随机的顺序,如果先将数据排序,再用impala导入可改善插入性能。目前社区正在改善此问题。

Kudu 查询性能

首先我们比较一下100GB下impala on kudu 和impala on parquet的性能

(单位second, 越小越好)

如图所示,在小数据集的查询性能上,kudu普遍比parquet慢了2倍~10倍。

如果我们再比较一下1TB下的性能,可以发现

Kudu比parquet慢了10倍~100倍。这其中很可能是由于impala对kudu缺少优化导致的。因此我们再来比较基本查询kudu的性能

如图所示,单从简单查询来看,kudu的性能和imapla差距不是特别大,其中出现的波动是由于缓存导致的。和impala的差异主要来自于impala的优化。

Spark 2.0 / Impala查询性能

查询速度

(单位second, 越小越好)

从数据大小分析, 1TB和10TB下的差异不大。

从语句进行分析,Impala对于query75、query94下的性能较差,很可能是语句优化,join顺序导致的异常。Spark对于query17、query50性能较差。

综合分析,可以发现impala的速度普遍比Spark快一倍以上。Impala经过compute stats之后,消除了query75、query94这两个语句的异常,在其它语句上的速度提升达到了一倍以上,在某些语句上compute stats后速度反而下降,如query58,然而这种情况很少见。

资源使用情况

Impala的资源使用整体少于Spark,磁盘的数据读取少于Spark,这对于速度的提高至关重要,这与其语句的优化有关。Impala的CPU一直维持在较低的水平,说明其C++的实现比JAVA高效。

Spark的CPU占用较高,但是维持在50%的水平,可见CPU并没有成为其瓶颈。Spark的磁盘写入(绿色)非常多,这也许是其速度的主要瓶颈。从网络IO上来看Spark也多余Impala,这一点可能与语句的优化、join、shuffle的实现方式有关。

--------

By 浴雨青山

商业转载请联系作者获得授权,非商业转载请注明出处

时间: 2024-08-01 22:49:42

[原创]kudu vs parquet, impala vs spark Benchmark的相关文章

[原创]Kudu:支持快速分析的新型Hadoop存储系统

Kudu是Cloudera开源的新型列式存储系统,是Apache Hadoop生态圈的新成员之一(incubating),专门为了对快速变化的数据进行快速的分析,填补了以往Hadoop存储层的空缺.本文主要对Kudu的动机.背景,以及架构进行简单介绍. 背景——功能上的空白 Hadoop生态系统有很多组件,每一个组件有不同的功能.在现实场景中,用户往往需要同时部署很多Hadoop工具来解决同一个问题,这种架构称为混合架构 (hybrid architecture).比如,用户需要利用Hbase的

SQL数据分析概览——Hive、Impala、Spark SQL、Drill、HAWQ 以及Presto+druid

转自infoQ! 根据 O'Reilly 2016年数据科学薪资调查显示,SQL 是数据科学领域使用最广泛的语言.大部分项目都需要一些SQL 操作,甚至有一些只需要SQL. 本文涵盖了6个开源领导者:Hive.Impala.Spark SQL.Drill.HAWQ 以及Presto,还加上Calcite.Kylin.Phoenix.Tajo 和Trafodion.以及2个商业化选择Oracle Big Data SQL 和IBM Big SQL,IBM 尚未将后者更名为"Watson SQL&q

【原创】大数据基础之Spark(7)spark读取文件split过程(即RDD分区数量)

spark 2.1.1 spark初始化rdd的时候,需要读取文件,通常是hdfs文件,在读文件的时候可以指定最小partition数量,这里只是建议的数量,实际可能比这个要大(比如文件特别多或者特别大时),也可能比这个要小(比如文件只有一个而且很小时),如果没有指定最小partition数量,初始化完成的rdd默认有多少个partition是怎样决定的呢? 以SparkContext.textfile为例来看下代码: org.apache.spark.SparkContext /** * Re

【原创】大数据基础之Spark(4)RDD原理及代码解析

一 简介 spark核心是RDD,官方文档地址:https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-distributed-datasets-rdds官方描述如下:重点是可容错,可并行处理 Spark revolves around the concept of a resilient distributed dataset (RDD), which is a fault-tolerant colle

【原创】大数据基础之Kudu(1)简介、安装

kudu 1.7 官方:https://kudu.apache.org/ 一 简介 kudu有很多概念,有分布式文件系统(HDFS),有一致性算法(Zookeeper),有Table(Hive Table),有Tablet(Hive Table Partition),有列式存储(Parquet),有顺序和随机读取(HBase),所以看起来kudu是一个轻量级的 HDFS + Zookeeper + Hive + Parquet + HBase,除此之外,kudu还有自己的特点,快速写入+读取,使

使用Spark Streaming + Kudu + Impala构建一个预测引擎

随着用户使用天数的增加,不管你的业务是扩大还是缩减了,为什么你的大数据中心架构保持线性增长的趋势?很明显需要一个稳定的基本架构来保障你的业务线.当你的客户处在休眠期,或者你的业务处在淡季,你增加的计算资源就处在浪费阶段:相对应地,当你的业务在旺季期,或者每周一每个人对上周的数据进行查询分析,有多少次你忒想拥有额外的计算资源. 根据需求水平动态分配资源 VS 固定的资源分配方式,似乎不太好实现.幸运的是,借助于现今强大的开源技术,可以很轻松的实现你所愿.在这篇文章中,我将给出一个解决例子,基于流式

Spark Kudu 结合

Kudu的背景 Hadoop中有很多组件,为了实现复杂的功能通常都是使用混合架构, Hbase:实现快速插入和修改,对大量的小规模查询也很迅速 HDFS/Parquet + Impala/Hive:对超大的数据集进行查询分析,对于这类场景, Parquet这种列式存储文件格式具有极大的优势. HDFS/Parquet + Hbase:这种混合架构需要每隔一段时间将数据从hbase导出成Parquet文件,然后用impala来实现复杂的查询分析 以上的架构没办法把复杂的实时查询集成在Hbase上

Spark 中关于Parquet的应用与性能初步测试

Spark 中关于Parquet的应用 Parquet简介 Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目 http://parquet.apache.org/ Spark关于Parquet的支持 这里我们使用的版本为spark2.0.1,是2016年10月3日发布的最新版本. Spark可以很好的使用和生成Parquet 文件.下面的截图来自官方文档. 上图的例子中spark读取了一个

实战kudu集成impala

推荐阅读: 论主数据的重要性(正确理解元数据.数据元) CDC+ETL实现数据集成方案 Java实现impala操作kudu 实战kudu集成impala impala基本介绍 impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具, impala是参照谷歌的新三篇论文(Caffeine--网络搜索引擎.Pregel--分布式图计算.Dreme