触发查询时,客户端如何联系 impalad 守护进程?当客户端触发必须由 impala 执行的查询时,后台究竟会发生什么?
问问题
861 次
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 回答