1

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

4

1 回答 1

1

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

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

2)select xxx from table...在shell中,它将调用do_select(...)并将self.imp_service.query(query)被调用,这是一个thrfit rpc。

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

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

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

4)当所有片段完成后,数据将显示在屏幕上,之后fetch()是来自客户端的 thrift 调用。

于 2013-08-07T05:42:48.753 回答