在Impala中客户端触发查询时会发生什么?

时间:2013-07-01 11:18:14

标签: cloudera impala

在触发查询时,客户端如何联系impalad deamon? 当客户端触发必须由impala执行的查询时,后台究竟会发生什么?

1 个答案:

答案 0 :(得分:1)

以impala-shell为例,它是ImpalaShell Python类扩展cmd.Cmd。用户将:

shell中的

1)connect ip:port,它将调用do_connect(..)并通过thrift连接到Impala后端。并将一个thrift客户端创建为self.imp_service = ImpalaService.Client(protocol)

外壳中的

2)select xxx from table...将调用do_select(...)self.imp_service.query(query),这将是一个thrfit rpc。

3)然后由void ImpalaServer::query(QueryHandle&, const Query&)在Impalad端执行rpc查询:

  • coordinator解析查询并创建一个分段AST,并将每个片段分配给一组要执行的主机;
  • rpc调用与每个片段的每个主机并行发出。

  • 父片段将一直等到子片段完成。

4)当所有片段完成后,数据将在fetch()之后显示在屏幕上,这是来自客户端的节俭电话。