暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL引擎Impala简介

大猫牍术 2019-08-05
566

Impala


Impala 是Cloudera开源的一款用来进行大数据实时查询分析的开源工具,它能够实现通过SQL语句来操作大数据,数据可以是存储到HDFS、HBase或者是Kudu中的。


1. 简介

        Impala 是由Cloudera受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,它以C++实现,整体采用跟GP一样的MPP(Massive Parallel Processing)架构,Impala在发出了paper 《Impala: A Modern, Open-Source SQL Engine for Hadoop》。Impala是一个内存计算模型,在计算时会把计算尽可能的放入内存中,Impala官方建议内存要至少128G以上,并且把80%内存分配给Impala。

       在实际各种生产环境实践中,Impala也被认为不能完全替代Hive,Hive适合于长时间大数据量的查询分析,而Impala适合于实时Ad-Hoc SQL查询(跟GP场景高度重合,详见Cloudera宣传页,CDH自己也是对标GP的。Tuning Impala_ The top five performance optimizations for the best BI and SQL analytics on Hadoop Presentation.pdf)。

2. Benchmark

MR3(韩国浦项大学推出的一个调优后的MR框架)用TPC-DS跑了一个10TB数据量大小的Benchmark,对比了Hive、Presto以及Impala


Impala on CDH 5.15.2

Hive 3.1.1 on MR3 0.6

Presto 0.217

Time7026.1812249.71424467.39
Succeed599995


表格中飘红的单元格表示查询失败了

Query ID

Impala on CDH 5.15.2

Hive 3.1.1 on MR3 0.6

Presto 0.217

query 131.8622.26934.817
query 234.5227.405287.385
query 32.628.48238.384
query 4375.65796.016488.678
query 5051.178287.52
query 6014.129.708
query 75.4421.009168.616
query 8010.37167.999
query 9068.563255.255
query 10041.84145.519
query 11351.23477.092321.133
query 12010.72412.603
query 13107.4425.366122.245
query 140359.0361999.51
query 1526.3115.09120.471
query 16058.347122.453
query 1787.7274.318280.14
query 18039.10945.935
query 194.2613.16872.181
query 20012.19515.832
query 2108.6825.3
query 22023.6819.354
query 2301896.5662591.82
query 2401369.523801.727
query2529.5868.046279.394
query 264.0513.975177.605
query 27020.40861.978
query 2828.1463.874324.3
query 2931.22110.31323.403
query 3019.9334.66515.671
query 3133.4548.445142.144
query 3209.15440.555
query 338.2714.38698.467
query 3469.619.67161.18
query 35069.54150.54
query 36024.43463.94
query 37014.68516.686
query 380140.744177.3
query 3918.2350.0537.977
query 40013.535144.947
query 411.222.0922.265
query 421.14.964112.64
query 4327.3217.41538.844
query 44071.211252.321
query 45015.07816.112
query 466.5918.97662.357
query 47275.9763.088372.109
query 485.2117.7958.134
query 49049.885611.262
query 5053.53273.19872.74
query 51134.5563.31574.938
query 521.324.53115.632
query 533.0212.01341.308
query 54042.095211.264
query 551.224.39831.707
query 562.477.76470.353
query 57161.6643.622217.402
query 58013.789224.299
query 5952.9540.451187.184
query 608.120.745174.798
query 6154.415.137216.556
query 6232.8123.73730.303
query 632.9311.987169.94
query 64682.73349.591-199.823
query 65252.7341.844395.3
query 66020.30147.811
query 670976.2145152.285
query 6810.1511.84464.817
query 6920.0835.90241.848
query 70047.491176.812
query 7185.0319.91982.468
query 72071.645-210.708
query 735.46.97339.726
query 74210.93370.221527.808
query 75329.79176.646760.535
query 7625.0460.291124.438
query 77015.6165.814
query 782107.931308.21-192.269
query 7946.4624.463162.553
query 80030.929-157.228
query 8114.3935.90658.801
query 82021.9723.48
query 8336.1310.27525.714
query 8408.9415.699
query 8579.5422.706282.752
query 86013.58818.946
query 870153.491122.58
query 8843.2644.965220.993
query 8912.2914.81543.95
query 903.4416.66719.72
query 911.984.9424.712
query 9208.265.499
query 93486.99483.914351.724
query 94058.492203.566
query 950111.842507.821
query 965.7227.91926.341
query 97399.93292.527378.682
query 98014.90149.851
query 9970.3838.23449.176

https://mr3.postech.ac.kr/blog/2019/03/22/performance-evaluation-0.6/

通过这个Benchmark我们可以看到Impala在一些场景下会比Hive快很多,但是在大数据量情况下表现不是很稳定(这也跟基于内存计算有关),维护门槛和使用门槛都比较高。

ProsCons
  • 一定数据量下速度比hive快一个数量级

  • 对 ANSI-92 SQL标准的支持

  • 支持UDF编写

  • 支持HDFS中的多种文件格式以及压缩格式

  • 提供多种数据访问接口:Cli、JDBC、Hue等

  • 可以非常容易地与Hadoop生态整合

  • 可以与一些BI应用系统协同工作,比如Tableau、MicroStrategy等

  • 底层支持多种存储引擎:HDFS、HBase、Kudu、S3等

  • C++编写很难维护

  • 全内存计算引擎,在大数据量情况下并不稳定,如果大量数据表做join操作很可能会崩

  • 有MPP架构通用的缺陷,有短板效应,如果一个节点算的慢会拖慢整个Query


3. 架构要点

Impala的架构设计视图,如图所示:

        上面可以看出,位于Datanode上的每个impalad进程,都具有Query Planner、Query Coordinator、Query Exec Engine这几个组件,每个Impala节点在功能集合上是对等的,也就是说,任何一个节点都能接收外部查询请求。当有一个节点发生故障后,其他节点仍然能够接管,这还要得益于,在HDFS上,数据的副本是冗余的,只要数据能够取到,某些挂掉的impalad进程所在节点的数据,在整个HDFS中只要还存在副本(impalad进程正常的节点),还是可以提供计算的。除非,当多个impalad进程挂掉了,恰好此时的查询请求要操作的数据所在的节点,都没有存在impalad进程,这次Query就会失败。



文章转载自大猫牍术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论