【问题标题】:What happens when a query is fired by client in Impala?当 Impala 中的客户端触发查询时会发生什么?
【发布时间】:2013-07-01 11:18:14
【问题描述】:

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

【问题讨论】:

    标签: cloudera impala


    【解决方案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 端由void ImpalaServer::query(QueryHandle&, const Query&) 执行 rpc 查询:

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

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

    4) 当所有片段都完成后,屏幕上会显示fetch() 后面的数据,这是客户端的 thrift 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 2019-10-31
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多