Impala能够对HDFS,Hbase中的数据,提供快速的,交互的SQL查询,除了和Hive一样使用统计的存储平台之外,Impala还使用相同的元数据,SQL语法,ODBC驱动,以及用户交互。
Impala只是提供另一种查询方式而已,并不是取代MapReduce或者Hive,相反的,Hive和其他构建在MapReduce上的框架,更多适用于批量的数据抽取,转换,ETL工作。
Impala的好处
- 和传统的SQL语句有着类似的标准,使用起来更方便
- 能够查询Hadoop中的大量数据
- 分布式的查询引擎,充分利用硬件
- 和其他框架,比如Hive,Pig等,共享数据存储,不需要额外的数据导出或者导入
- 对于BigData处理来说,Impala实用简单,即可完成分析,而不需要为了数据分析,而去学习复杂的ETL模型,
Impala构成组件和架构
Impala Daemon
核心的Impala组件,在每个DataNode中都可以运行改组件,物理上就是一个Impalad进程,负责读写数据,接受来自impala-shell,Hue,JDBC或者ODBC的查询请求,数据的查询分布在集群中执行,查询的中间结果返回给coordinator节点。
查询可以提交任何一个impala daemon ,并且其会作为这个查询的coordinator,其他的impalad将部分查询结果返回给coordinator,coordinator负责整理成最终的结果,
impala-shell命令提交的查询功能,会直接连接命令所在机器的impala,而,对于生产环境的负载下,为了load-balance,可以借助round-robin随机方式,将每次查询请求发送不同的impalad,
impala daemon通过statestore 进行通信,来确保彼此哪个节点是健康的,能够接受新的工作。
当集群中,任何节点,create,alter,drop任何类型的数据,或者,当insert,load data语句被执行时候,impalad都会接受来自catelogd daemon(下文介绍,Impala 1.2之后引入)的消息,而在impala 1.2之前,需要使用refresh或者invalidate metadata语句完成节点之间的元数据同步。
Impala 2.9以后,可以控制哪些主机的impalad作为coordinators,哪些主机的impalad作为查询的executors,以此,针对高并发的负载,来提高集群的稳定性。
Impala Statestore
statestore用下检查所有impalad进程的健康状态,不断的将这些信息发送给所监控的每个impalad进程,物理上,是一个后台进程,叫做statestored,在集群中,只能在一个机器上启动一个statestored进程,如果任何一个impalad因为各种问题失去联系,statestore都会发现,并告诉每一个impalad,后续的查询任何不要发给这个不可到达的节点,
statestore的作用,出现错误的时候,提供帮助以及传递元数据在coordinators之间,因此,对impala集群的正常操作,不是一直很重要。如果statestore没有运行或者不可访问,impalad仍然能够运行,并且任务也能够正常分布运行,仅仅,结果只是当其他impalad失败后,集群变得不健壮而已,元数据变得不一致而已,但是,当statestore恢复后,impalad能够重新和其建立连接,statestore也能重新恢复监控和信息传递功能。
我们跟多考虑的是impalad的高可用性,statestored和catelogd并没有这样的需求,因此他们不会影响到数据丢失。当他们不可用的时候,可以停止impala服务,将对应机器上的impala statestored角色删除,并在新的机器上启动statestored服务,启动impalad服务即可。
Impala Catalog Service
同statestore一样,一个集群只能有一个catelog服务,一个进程,catelogd,作用在于,在impalad之间同步元数据的改变。另外,因为请求是通过statestored完成传递的,因此,将catelogd和statestored放在同一个host机器中最好。
当元数据因为操作语句发生改变,catelog避免使用refresh和invalidate metadata命令。当我们通过hive创建表,load data,等等,需要使用refresh和invalidate metadata同步下元数据,在任何执行查询之前。
当通过impala执行create table,insert或则其他table改变,数据改变时候,不需要执行refresh和invalidate metadata,但是通过hive执行时候或者直接操作hdfs,就需要执行refresh和invalidate metadata了,并且,只需要在一个impala节点上执行即可。
架构图如下,
impala组件和架构
Impala采用cloudera manager安装,可以看到几个组件的安装情况如下,
组件安装情况.png
网友评论