这是【kudu pk parquet】的第二篇,query2在kudu和parquet上的对比解析,其中kudu包含有不能下发的谓词。

3台物理机,1T规模的数据集,impala和kudu版本是我们修改后支持runtime filter的版本,结果对比如下图:

 
纵坐标表示耗时,矮表示性能好,耗时短,响应差近三倍。
首先,来我们来看两者的执行计划,颜色越鲜艳表示越耗时:
  • parquet

 
  • kudu

 
可以看到kudu左右两边各有一个鲜艳的红色框(节点),说明这两个执行节点耗时比较长,放大来看:
左边部分:
  • parquet

 
  • kudu


上面两个图的执行计划红色圈起来部分,parquet的扫描(“05:SCAN KUDU”)和关联(“09:HASH JOIN”)分别只要1秒钟左右,而kudu则要7秒和11秒。
大家注意到了没有,“07:SCAN KUDU”这个节点在两个引擎上返回的数据量是不一样的,parquet只返回了5条记录,kudu则返回了25条。同时这个返回结果是作为runtime filter应用于“06:SCAN KUDU”的,所以可以看到“06:SCAN KUDU”节点上返回的数据量,呈现几何级的差异(条件宽泛,所以匹配的数据量就多了)。接着,过滤出来的结果再runtime filter应用于“05:SCAN KUDU”节点。为什么“05:SCAN KUDU”节点的扫描动作会差7倍(kudu 7秒钟对比parquet 1秒钟)?
分析kudu的profile可以看到“05:SCAN KUDU”的runtime filter是在2秒钟(另外1个是在18秒后到达,无效)以后才到达的:

 
所以减去1秒钟的filter等待时间,对partsupp表扫描花了6秒钟时间,同样是扫描partsupp表为啥parquet只要扫描2秒钟,怎么解释?这涉及到了runtime裁剪分片,因为它们的关联键刚好是个主键
05:SCAN KUDU [kudu_1000g_2.partsupp]
   runtime filters: RF000 -> kudu_1000g_2.partsupp.ps_partkey, RF004 -> ps_suppkey
   mem-estimate=0B mem-reservation=0B
   tuple-ids=5 row-size=24B cardinality=800000000
----------------
所以动态裁剪分片很重要,这里就不再展开,以后有机会再解析。
扫描返回的数据多,直接导致后续的关联节点“09:HASH JOIN”时间变成11秒。
前面埋伏了1个地雷,有心的读者可以想一下。
右边部分:
  • parquet
 
  • kudu
 
上面两个图中,kudu的“00:SCAN KUDU”节点消耗了4秒钟,而parquet只需要817毫秒!
查看kudu的profile:
|  |  |  F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
|  |  |  00:SCAN KUDU [kudu_1000g_2.part]
|  |  |     predicates: p_type LIKE '%NICKEL'
|  |  |     kudu predicates: p_size = 22
|  |  |     mem-estimate=0B mem-reservation=0B
|  |  |     tuple-ids=0 row-size=75B cardinality=1264911
|  |  |

可以看到有个“like”的谓词,但是kudu官网说“!=”和“like”目前是不支持的:

因为kudu不支持“like”谓词的下发,所以过滤的动作需要在impala侧执行,这就需要impala把kudu上的数据全部扫描读取过来,那么这个耗时跟parquet本地过滤显然是没法比的(网络IO+序列化反序列化),近5倍的差异。
然后,左边“02:SCAN KUDU”节点的runtime filter是在4秒钟后到达:
 
所以partsupp全表扫了3秒钟(减去1秒钟的filter等待时间),然后应用filter,接着扫描剩下的7秒钟(11秒-4秒),也即扫描花了10秒钟时间。耗时比parquet长的原因和最前面“左边部分”的“05:SCAN KUDU”一样,也涉及到了runtime裁剪分片,因为它们的关联键也是主键:
|  |  02:SCAN KUDU [kudu_1000g_2.partsupp]
|  |     runtime filters: RF008 -> ps_partkey
|  |     mem-estimate=0B mem-reservation=0B
|  |     tuple-ids=2 row-size=24B cardinality=800000000
|  |
这里埋伏第2个地雷。
-------------------------------------------------------------------------------------------
到此,TPC-H query2在kudu和parquet上执行耗时的对比已经解析完成,接下来挖出前面埋伏的2个地雷:
  1. 为什么parquet上“07:SCAN KUDU”只返回5条,而kudu返回了25条?
  2. 在kudu执行计划中,同样是扫描partsupp表,为啥“左边部分”“05:SCAN KUDU”节点只耗时7秒钟,而“右边部分”“02:SCAN KUDU”节点则耗时11秒钟?

本文来自网易云社区,经作者何李夫授权发布。

原文地址:【kudu pk parquet】TPC-H Query2对比解析

更多网易研发、产品、运营经验分享请访问网易云社区

【kudu pk parquet】TPC-H Query2对比解析的更多相关文章

  1. 【kudu pk parquet】runtime filter实践

    已经有好一阵子没有写博文了,今天给大家带来一篇最近一段时间开发相关的文章:在impala和kudu上支持runtime filter. 大家搜索下实践者社区,可以发现前面已经有好几位同学写了这个主题的 ...

  2. 完爆Facebook/GraphQL,APIJSON全方位对比解析(三)-表关联查询

    相关阅读: 完爆Facebook/GraphQL,APIJSON全方位对比解析(一)-基础功能 完爆Facebook/GraphQL,APIJSON全方位对比解析(二)-权限控制 自APIJSON发布 ...

  3. Zsh vs. Bash不完全对比解析,zsh是一种更强大的被成为“终极”的Shell

    https://www.zhihu.com/question/21418449 Mort | Zsh vs. Bash:不完全对比解析(1) 2014-10-07  bdpqlxz     Zsh和B ...

  4. 【原创】大叔经验分享(63)kudu vs parquet

    一 对比 存储空间对比: 查询性能对比: 二 设计方案 将数据拆分为:历史数据(hdfs+parquet+snappy)+ 近期数据(kudu),可以兼具各种优点: 1)整体低于10%的磁盘占用: 2 ...

  5. 5分钟看懂svg path 路径的所有命令(更有API解释、有图、有图文对比解析)

    友情提示:更多详情.每个命令的例子.参数变化对比图文详解,欢迎关注九十七度的博客:SVG<Path>命令详解 M = moveto M x y 移动到指定坐标,xy分别为x轴和y轴的坐标点 ...

  6. Splunk和ElasticSearch深度对比解析(转)

    转载自:http://www.sohu.com/a/154105465_354963 随着Splunk越来越被大家熟知和认可,现在市面上也不断涌各种同类产品,作为大数据搜索界的翘楚Splunk和Ela ...

  7. 数据库管理哪家强?Devart VS Navicat 360°全方位对比解析

    今天小编向大家推荐的是两个开发环节的主流数据库管理品牌,那么你知道这两款数据库管理软件品牌与数据库引擎配套的管理软件有什么区别吗?小编这就360°全方位为您解答: ★ 品牌介绍 Devart:拥有超过 ...

  8. str.match(regex)与regex.exec(str)对比解析,从此不再晕

    match属于字符串的方法,exec属于正则表达式的方法.其中regex是否有g标志的区别经常搞不清,所以测试记录下. 1.str.match(regex) regex中无g标志 返回一个数组,arr ...

  9. Hadoop和Spark的Shuffer过程对比解析

    Hadoop Shuffer Hadoop 的shuffer主要分为两个阶段:Map.Reduce. Map-Shuffer: 这个阶段发生在map阶段之后,数据写入内存之前,在数据写入内存的过程就已 ...

随机推荐

  1. 1059 Prime Factors

    题意: 给出一个int型正整数N,要求把N分解成若干个质因子,如N=97532468,则把N分解成:97532468=2^2*11*17*101*1291.质因子按增序输出,如果某个质因子的幂是1,则 ...

  2. Altium Designer之多图纸设计

    Altium Designer的多图纸功能感觉比较方便:今天翻了下徐老师<Altium Designer 快速入门>里面关于多图纸设计的介绍,再参考了altium 网站的一些资料,算是摸熟 ...

  3. LINUX免密登陆

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 有机器A(192.168.1.155),B(192.168.1.181).现想 ...

  4. Java微信公众平台开发(一)--接入微信公众平台

    转自:http://www.cuiyongzhi.com/post/38.html (一)接入流程解析 在我们的开发过程中无论如何最好的参考工具当然是我们的官方文档了:http://mp.weixin ...

  5. scala 在vim中的语法高亮

    https://github.com/derekwyatt/vim-scala 提供了一个选择 看install手册,发现两个命令都是必须的. mkdir -p ~/.vim/{ftdetect,in ...

  6. Vmware中的centos虚拟机克隆之后没有eth0

    克隆虚拟机之后,CentOS没有eth0的解决办法 我们常常需要从一台已经安装完成的虚拟机系统克隆出来一个新系统(克隆时候必须要改变网卡物理地址,这一点无需多说),但是新系统启动之后,会发现系统网络工 ...

  7. linux 软链接 硬链接

    查看文件sun.txt   加上参数i 是显示节点 inode [root@bogon test]# ls -li sun.txt 10006225 -rw-r--r--. 1 root root 0 ...

  8. 在CenOS7.5里安装Redis

    一.系统环境 操作系统:CentOS 7.5 Redis版本:redis3.2.8 登录账号:Frank 二.安装过程 A.预安装,安装gcc 1.进入终端,切换到root账号 2.输入指令: yum ...

  9. BT下载的原理 和疑问

    我心中有几个疑问,同时也搜索了点素材,肯能对理解问题有帮助. BT下载,即P2P下载,是一种不需要中心化服务器的下载,实现原理是,每个客户端在下载的时候也作为服务器. 我的疑问是,P2P各个节点是如何 ...

  10. quilljs 一款简单轻量的富文本编辑器(适合移动端)

    quilljs入门使用教程: quill.js是一款强大的现代富文本编辑器插件.该富文本编辑器插件支持所有的现代浏览器.平板电脑和手机.它提供了文本编辑器的所有功能,并为开发者提供大量的配置参数和方法 ...