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