/home/by-natures/dev*

データ界隈で働くエンジニアとしての技術的なメモと、たまに普通の日記。

HiveServer2 でジョブ進捗は取得できない?

HiveServer2 を使っているのですが、Hive クエリ(というか MapReduce)は場合によっては時間がかかるため、ユーザーの方に「クエリの進捗を知る方法はないか」と尋ねられました。利用側からすると、数十分で終わるのか、数時間で終わるのか、なんとなく具合を知りたいというのは最もな要望です。

Hive CLI(コマンドライン)から叩くと MapReduce のログがコンソールに出力されるので、ステージがどのぐらい進んだか、Map タスクがどのぐらい進んでいるかなど、進捗の具合を知ることができます。最後のタスクが非常に時間がかかることもあるので正確な目安にもならないのですが、何も出ないよりマシ…といったところでしょうか。

ただ、このような情報を HiveServer2 を利用して取得する方法はないようです:

qnalist.com

HiveServer2 は Thrift 上で構築されており、Thrift に定義されていなければ HiveServer2 ではジョブ進捗は取得できないとあります。Thrift は詳しくないのですが、以下のリポジトリ(ミラー)に Thrift インタフェースの定義があります。その中にはジョブの進捗を返すようなものはなく、単にジョブのステータス(終わったかどうかなど)を返すものがあるだけでした:

hive/TCLIService.thrift at 0af6cb42725659740a022044c6cc464ef1cf4e6b · apache/hive · GitHub

そもそも「ジョブ進捗」が何なのかは実行エンジンに依存するので、そんなものを返す API は存在しないのは当たり前かもしれません。ただHiveServer2 のログ自体には MapReduce の進捗が出ているので、これを補足して…という回答もありますが、かなり怪しい実装になりそうなので結局何もできなそうです。。同じような状況の方がいて何か対策されていたら教えて下さい。