Loading
0

Impala

用途:

Impala 可以直接为存储在HDFS或HBase中的Hadoop数据提供快速,交互式的SQL查询。除了使用相同的存储平台外, Impala和Apache Hive一样也使用了相同的元数据,SQL语法(Hive SQL),ODBC驱动和用户接口(Hue Beeswax),这就很方便的为用户提供了一个相似并且统一的平台来进行批量或实时查询。

Impala 是用来进行大数据查询的补充工具。 Impala 并没有取代像Hive这样基于MapReduce的分布式处理框架。Hive和其它基于MapReduce的计算框架非常适合长时间运行的批处理作业,例如那些涉及到批量 Extract、Transform、Load ,即需要进行ETL作业。

组成:

1) State Store

对应进程为 statestored (参考Impala版本为0.4)

用于协调各个运行impalad的实例之间的信息关系,Impala正是通过这些信息去定位查询请求所要的数据。换句话说,state store的作用主要为跟踪各个impalad实例的位置和状态,让各个impalad实例以集群的方式运行起来。

与 HDFS的NameNode不一样,虽然State Store一般只安装一份,但一旦State Store挂掉了,各个impalad实例却仍然会保持集群的方式处理查询请求,只是无法将各自的状态更新到State Store中,如果这个时候新加入一个impalad实例,则新加入的impalad实例不为现有集群中的其他impalad实例所识别(事实上,经笔者测试,如果impalad启动在statestored之后,根本无法正常启动,因为impalad启动时是需要指定statestored的主机信息的)。然而,State Store一旦重启,则所有State Store所服务的各个impalad实例(包括state store挂掉期间新加入的impalad实例)的信息(由impalad实例发给state store)都会进行重建。

2) Impalad

对应进程为 impalad(核心进程,数据的计算就靠这个进程来执行)

该进程应运行在DataNode机器上(建议每个DataNode机器运行一个impalad,官方的意思似乎这种建议是必须的),每个impalad实例会接收、规划并调节来自ODBC或Impala Shell等客户端的查询。每个impalad实例会充当一个Worker,处理由其它impalad实例分发出来的查询片段(query fragments)。客户端可以随便连接到任意一个impalad实例,被连接的impalad实例将充当本次查询的协调者(Ordinator),将查询分发给集群内的其它impalad实例进行并行计算。当所有计算完毕时,其它各个impalad实例将会把各自的计算结果发送给充当 Ordinator的impalad实例,由这个Ordinator实例把结果返回给客户端。每个impalad进程可以处理多个并发请求。

3)Impala shell

这是一个客户端工具。

该客户端工具提供一个交互接口,供使用者发起数据查询或管理任务,比如连接到impalad。这些查询请求会传给ODBC这个标准查询接口。换言之,它就是一个命令行客户端。你就是通过它来查询数据的。

查询数据步骤:

  1. 用户通过 Hue Beeswax,the Impala shell, 或者ODBC 这样的客户端接口来提交查询请求。
  2. Impala 的分布式查询引擎通过集群来创建和分发查询任务。
  3. 每个节点直接读取本地的HDFS或HBase中的数据来完成部分分布式查询任务,以提升查询性能。
  4. Impalad将结果返回给客户端。