HueからHiveやImpalaの実行時にリソースプールを変更したい問題
分析用のクラスタでの運用の話。
クラスタへのデータ投入やETLなどのジョブと分析用のジョブを共存共栄したいという要望がある。 基本的に分析系のジョブは重たくなりやすいので、他に影響与えないように隔離したい。
beelineを使う場合は、以下のようにすると、リソースプールを例えば root.analysts
として実行出来るのだけれど、、、
beeline -u jdbc:hive2://hiveserver2:10000/ -n analysts -f test.sql --hiveconf mapred.job.queue.name=root.analysts
ちなみに、impalaの場合は以下の感じ。
impala-shell -i hostname:portnum -B -q "set REQUEST_POOL=root.analysts; select * from hoge;"
ただし、リソースプールの指定には、下図のように動的リソースプールの設定も必要で、そこに指定したものだけが指定出来た。
※↑超適当です
本題。
今回は、Hueから実行した場合にも同様にリソースプールを別にしたい。
HueからのImpala実行について
HueからのImpala実行については、下図のように、クエリに環境変数をセットするとリソースプールを変更することが出来た(確認はCludera ManagerのImpalaのクエリ詳細から確認)
ただし、事前に以下のように、変更できるよう設定の追加が必要
他にも
debug_action,explain_level,mem_limit,optimize_partition_key_scans,query_timeout_s
などがある。
また、 root.users.analysts
を指定しても機能しなかった。なんでだろ。 配置ルール的には無かったら作成としているのに。
階層的に root.users
の子だから root.*
は行けても、 root.users.*
はダメなのか?
課題
Hue使った場合のデフォルト指定ってどうやるんだろ?
HueからHive実行について(うまくいかん)
同じ様にHueからのHive実行も、リソースプールを分けたい。
試しに Cloudera ManagerのHueの設定で、 hive-site.xml
の設定をで、下図の様にすれば、リソースプール指定出来ると思ったがダメだった。
ちょっと調べてみると、以下の記事を発見。
Hue is a UI and cannot control how many resources Hive uses. This is controlled by YARN via scheduling policies. For CDH clusters, the fair scheduler is generally used.
http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
You should look at the following for some background information on how to set this up.
* Untangling Apache Hadoop YARN, Part 3: Scheduler Concepts
* Untangling Apache Hadoop YARN, Part 4: Fair Scheduler Queue Basics
との事/(^o^)\ナンテコッタ
また、Hueでログインしたユーザがリソースプールとして、 root.users.(Hueのログインユーザ名)
として実行される事も分かった。
今使っているアカウントは、データ投入で使っているアカウントと同じなので、新規で分析用につくるのも微妙(ディレクトリ変えたくないし権限も変わるので)。。。
さてさて、どうしようかな。
CDH v5.14
追記
HueからのHive実行時のリソースプールの指定について
Impalaと同様に下図のように指定すると一応、リソースプールの指定は出来た。
mapred.job.queue.name
と リソースプール名
を指定すると、指定したリソースプールで実行することが分かった。
とは言え、デフォルトで指定が出来ないので不便なのはそのままだけど。