1

クエリが起動されたときに、クライアントはどのように impalad デーモンに連絡しますか? クライアントが impala によって実行されなければならないクエリを起動すると、バックグラウンドで正確に何が起こるのでしょうか?

4

1 に答える 1

1

たとえば、impala-shell を取り上げます。これは ImpalaShell Python クラス extends cmd.Cmdです。ユーザーは:

1)connect ip:portシェル内で、do_connect(..)thrift を介して Impala バックエンドを呼び出して接続します。そしてthrift clientは次のように作成されますself.imp_service = ImpalaService.Client(protocol)

2)thrfit rpcでselect xxx from table...あるシェルで呼び出しますdo_select(...)self.imp_service.query(query)

3) 次に、rpc クエリが Impalad 側で次のように実行されますvoid ImpalaServer::query(QueryHandle&, const Query&)

  • コーディネーターはクエリを解析し、フラグメント化された AST を作成し、各フラグメントを一連のホストに割り当てて実行します。
  • rpc 呼び出しは、各フラグメントの各ホストに対して並行して発行されます。

  • 親フラグメントは、子フラグメントが完了するまで待機します。

4) すべてのフラグメントが完了すると、画面にデータが表示され、その後fetch()、クライアント側からのthrift 呼び出しが行われます。

于 2013-08-07T05:42:48.753 に答える