/home/by-natures/dev*

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

2019/06/12 Hive CLI のアーキテクチャ

hive CLI コマンドは非推奨で、今後は beeline 推奨(JDBC/Thrift で HiveServer2 へ接続)とのことですが、どうにも HiveServer2 は運用していて良い思い出がないので(私が利用している環境だと定期的に再起動しないと応答がなくなる。。)、最近あまり状況追っていないのでどうなっているのかなぁと思いつつ、そもそも hive CLI ってどういう風に動いているんだっけ?と思って調べました。

cwiki.apache.org

公式はざっくりした図です。

beeline は HS2 に接続するだけなのでシンプルですが、hive CLI は自分自身で metastore に接続したりクエリパースしたり、ジョブを投げたりしています。ですので hive CLI を動かす環境にも hive-site.xml などクラスタに接続する設定情報が必要になります。

ただ、簡単なクエリ(例えばパーティションに対する SELECT * )を動かすと、MapReduce に変換されずに hive CLI が直接 HDFS にデータを取得しに行っているようです。上の図だと Execution Engine が簡易的なものになるイメージでしょうか。簡単なクエリでも巨大なパーティション群に対してスキャンが掛かると kill したいことがたまにあるのですが、YARN アプリケーションに変換されていないのでやや面倒です。