HiveとImpalaクエリのライフサイクル

Published on 22 September 2014 in Hive / Impala - 4 minutes read - Last modified on 06 March 2021

HiveとImpalaのSQLエディタによって、Hueはよく使用されるようになっています:

impala-ui

しかし、クエリの結果はどうなるのでしょうか?それらはどのくらい保持されているのでしょうか?それらはなぜ時々消えているのでしょうか?なぜ一部のImpalaのクエリは、それらが完了した場合でも、まだ「実行中」なのでしょうか?

各クエリでは、ImpalaやHiveServer2のいくつかのリソースを使用しています。ユーザが多くのクエリを投入すると、何も起こらない場合にはサーバを起動してクラッシュします。多くの改善が行われたHue 3 とCDH4.6のHueでは、自動的にすべてのメタデータクエリをクローズするようになりました。これらは微調整することができる最新の設定です:

Impala

Hueは、ユーザが結果ページから移動する際にクエリをクローズしようとします(クエリは一般的に高速なので、それらをすぐにクローズするのはOKです)。しかし、ユーザーがクエリの結果を確認しに戻ってこなかったり、ページをクローズしなかったりした場合、クエリは保持されたままになります。(HUE-2251で)Hue 3.7とC5.2から、Impalaはquery_timeout_sプロパティで10分以上アイドルになると、自動的にクエリが期限切れになります。

[impala]
  # If QUERY_TIMEOUT_S > 0, the query will be timed out (i.e. cancelled) if Impala does not do any work (compute or send back results) for that query within QUERY_TIMEOUT_S seconds.
  query_timeout_s=600

このバージョンまでの唯一の代替回避策は、すべてのクエリをクローズするためにHue(またはImpala)を再起動することです。

Hive

(いくつかのクエリには数時間処理がかかることがあるように)Hueは、デフォルトではHiveのクエリをクローズすることはありません。クエリの量が少ない(例えば、一日に数百未満)、かつ毎週HiveServer2を再起動する場合にはおそらく影響ありません。Impalaと同じ振る舞い(およびユーザーがページを離れたときに、クエリをクローズする)を得るには、hue.iniでオンに切り替えます:

[beeswax]
  # Hue will try to close the Hive query when the user leaves the editor page.
  #This will free all the query resources in HiveServer2, but also make its results inaccessible.
  close_queries=true

CDH5と(HiveServer2のある)CDH4.6から、Hueにはいくつかのclose_queryとclose_sessionコマンドが追加されました。

build/env/bin/hue close_queries --help

Usage: build/env/bin/hue close_queries [options] <age_in_days>  (default is 7)

7日以上古い実行されていないクエリをクローズします。が指定されている場合は、いかなる種類のものもクローズします。Cloudera Managerを使用してそれらを実行するには、次の2つの環境変数をエクスポートしてください:

export HUE_CONF_DIR="/var/run/cloudera-scm-agent/process/`ls -alrt /var/run/cloudera-scm-agent/process | grep HUE | tail -1 | awk '{print $9}'`"

./build/env/bin/hue close_queries 0
Closing (all=False) HiveServer2 queries older than 0 days...
1 queries closed.

./build/env/bin/hue close_sessions 0 hive
Closing (all=False) HiveServer2 sessions older than 0 days...
1 sessions closed.

その後crontabにこのコマンドを追加して、N日以上経過したクエリを期限切れにすることができます。

備考

Kerberosを使用する際にも必要です:

export HIVE_CONF_DIR="/var/run/cloudera-scm-agent/process/`ls -alrt /var/run/cloudera-scm-agent/process | grep HUE | tail -1 | awk '{print $9}'`/hive-conf"

(Hive 0.14またはC5.2で利用可能になる)HIVE-5799の「クリーナー」ソリューションがあります。Impalaのように、これでHiveServer2は自動的にクエリを期限切れにすることができます。hive-site.xmlを少し編集します:

<property>
  <name>hive.server2.session.check.interval</name>
  <value>3000</value>
  <description>The check interval for session/operation timeout, which can be disabled by setting to zero or negative value.</description>
</property>

<property>
  <name>hive.server2.idle.session.timeout</name>
  <value>0</value>
  <description>Session will be closed when it's not accessed for this duration, which can be disabled by setting to zero or negative value.</description>
</property>

<property>
  <name>hive.server2.idle.operation.timeout</name>
  <value>0</value>
  <description>Operation will be closed when it's not accessed for this duration of time, which can be disabled by setting to zero value. With positive value, it's checked for operations in terminal state only (FINISHED, CANCELED, CLOSED, ERROR). With negative value, it's checked for all of the operations regardless of state.</description>
</property>

備考

これはHiveのために推奨されるソリューションです。ユーザーが長く結果を保持したいと思う場合、CREATE TABLE AS SELECT… またはHueで結果をエクスポートすることができます。

総括

リソースが無限に増えていく必要がないので、クエリサーバーは、これらの変更によりはるかに安定してきています。トレードオフの一つは、ユーザーが一定時間後にクエリの結果を失うことになるということです。経験をより良いものにするために、自動的に結果セットのN行をダウンロードし、より長くそれらを保つように、いくつかのアイデアでが調査されています。

いつものように、コメントとフィードバックはhue-user メーリングリストや@gethueまでお気軽に!


comments powered by Disqus

More recent stories

10 June 2021
Hue4.10(新しいSQLエディタコンポーネント、REST API、小さなファイルのインポート、Slackアプリなど)がリリースされました!
Read More
29 May 2021
Sqlスクラッチパッドコンポーネントとパブリック REST API を使用して、5 分で独自の SQL エディター (BYOE) を構築する
Read More
26 May 2021
改善されたHueのImporter -- ファイルの選択、方言の選択、テーブルの作成
Read More