hive」タグアーカイブ

Suppress the message “Supplied authorities: …” org.apache.hive.jdbc.Utils#parseURL emits

この記事は【2016年10月1日】と作成から2年以上経っているため、記事の内容が古い可能性があります。最新の情報を合わせてご確認されることを推奨いたします。

HiveServer2にJDBC経由で接続する際に、ログの設定によっては"Supplied authorities: ..."のようなメッセージが出力されます。hive-jdbcの依存するライブラリはcommons-logging、Log4J、SLF4Jなど様々なログライブラリを含んでおり非常にややこしいですが、今回はlogback+SLF4Jで統一するとしてタイトルのようなメッセージを抑制するために以下のようにまとめてみました。

pom.xml

HiveServer2へJDBC経由で接続するのに必要なライブラリは以下を参考にします。

https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

上記リンクを参考に以下のように設定してみました。dbutilsは今回のログの件とは関係なくおまけです。

logback.xml

続いてログの設定です。

実行してみる

最後に実行してみます。

結果は以下のようになりました。

warn

ちなみに以下のように設定すると、

“Supplied …”の部分は表示されます。

info

org.apache.hiveのロガーレベルだけwarn以上にするといい感じに抑制できます。

参考リンク

プログラミング Hive

プログラミング Hive

posted with amazlet at 16.09.30
Edward Capriolo Dean Wampler Jason Rutherglen
オライリージャパン
売り上げランキング: 102,695

Hive Auto Convert Join

この記事は【2015年4月22日】と作成から2年以上経っているため、記事の内容が古い可能性があります。最新の情報を合わせてご確認されることを推奨いたします。

これか!?

CDHのバージョンを4.7から5.3.2に上げたときに,Hiveも0.13.1に上がり,オプションのデフォルト値が変わっていたのを見落としていた。。

joinの最適化に関連するオプションのようで,以下の値がデフォルトでtrueに変更されていた。どうも,テーブル結合するクエリで落ちることがあると思ったらこれが関連していたっぽい。

上記ドキュメントにも書かれているように,このオプションがtrueの時,実行時にjoinの最適化が行われる。他にも関連しそうなオプションがいくつかあり,オプションが何を示しているのかよく分からなかったので,ソースも少し追ってみる。(が理解は十分ではない。。)

このオプションが参照されている箇所を探すと,org.apache.hadoop.hive.ql.optimizer.physical.PhysicalOptimizerinitializeメソッドが見つかる。メソッドの中で,オプションがtrueの時,CommonJoinResolverがresolverリストに加えられている。そして,このresolverの先でTaskTreeを走査し,MapJoinタスクへの変換が試みられている。

タスクTreeのnodeは,CommonJoinTaskDispatcherにdispatch(processCurrentTaskメソッド)されている。そのprocessCurrentTaskメソッドの中でMapJoinタスクへの変換可否がチェックされ,可能ならば変換を行なう。その際にざっと以下の流れで処理が行われているようだった。

  • テーブルのinput pathsを調べ,既知のデータサイズの合計値を計算する
  • bigTableCandidatesの取得
  • hive.auto.convert.join.noconditionaltasktrueの場合,bigTableCandidatesリストからbigTableを求める。
  • bigTableCandidatesのリストから1件ずつ自身以外の既知のテーブルサイズの合計を求め,hive.auto.convert.join.noconditionaltask.sizeで指定されたしきい値を超えていないかチェックする。
  • しきい値を超えていなければ,最大サイズのテーブルかチェックする。
  • bigTableが見つかれば,MapJoinTaskへ変換する。(ConditionalTaskは生成されない)
  • 3で候補が見つからない場合,smalltablesの合計サイズがhive.mapjoin.smalltable.filesizeのしきい値を超えていないかチェックし,しきい値を超えていない場合,MapJoinTaskへ変換される。(ConditionalTaskが生成される)

Hashテーブルのサイズは,hiveクライアントを実行したプロセスのメモリ?が使われる。環境変数でなく,hive.mapred.local.memというプロパティを指定するとそのサイズを変えられそうなのだが,cloudera manager環境下なのだがGatewayのサイズが優先されているように見える。HADOOP_CLIENT_OPTSを使えば適用できそうだった。

ソースももう少しじっくり読み,中身の理解を深めたい。。

参考