EMRでHiveServer2を立ち上げてみた
背景
- YARNのリソース設定周りが少しずつわかってきたので、ひとまずクライアントからはどんどんジョブを放り投げておく方針にしたい
- HiveServerで運用していたのだが、その過程でthriftの並列性がもっと欲しくなった
- HiveServer2をそろそろちゃんと使おうと思った
HiveServer2のセットアップ
Setting Up HiveServer2 - Apache Hive - Apache Software Foundation https://cwiki.apache.org/confluence/display/Hive/Setting+up+HiveServer2
The current implementation, based on Thrift RPC, is an improved version of HiveServer and supports multi-client concurrency and authentication.
とのこと。concurrency欲しい。
EMRでHiveServer2を動かす
AWS Developer Forums: hiveserver2 on EMR ... https://forums.aws.amazon.com/thread.jspa?messageID=527530򀲪
というようなforumもあった。とりあえずhive-site.xml
に以下の設定を追加しておく。
<property><name>hive.server2.authentication</name><value>NONE</value></property> <property><name>hive.server2.enable.doAs</name><value>false</value></property>
あとは既存のHiveServerを止めて、HiveServer2プロセスを起動した。さっくり起動。
beeline
HiveServer2 Clients - Apache Hive - Apache Software Foundation https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
Thriftはいろんな言語から呼べる。HiveServer2だとbeelineというクライアントがあるようなので使ってみた。とりあえずmaster nodeで。
$ beeline beeline> !connect jdbc:hive2://localhost:10000 your_hive_user_name_here your_hive_user_password_here org.apache.hive.jdbc.HiveDriver Connecting to jdbc:hive2://localhost:10000 Connected to: Hive (version 0.11.0) Driver: Hive (version 0.11.0) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://localhost:10000> show databases; +------------------------------+ | database_name | +------------------------------+ | default | +------------------------------+ 1 rows selected (3.414 seconds)
という感じでつながることを確認した。試してないけど、別ノードとか作業用の環境からbeeline + jdbc経由で繋げば使える。
Pythonクライアントも既にある。まだ試してない。
BradRuderman/pyhs2 https://github.com/BradRuderman/pyhs2
よく分かってないこと
- HiveServerとHiveServer2との違いをwikiを見た以外の情報を得ていないのでよく知らない
- 運用していけばわかる気もしている
- thriftのapi違うな~とか
hiveserver2.*
な設定増えてるなーとかそのへんくらいしかわかっていない
それとthriftをつかってremoteとclientのPythonコードの生成をして「ふーん」といいつつ眺めていた。thrift apiを触るクライアントライブラリの実装をどうすればいいのかまだ良くわかってない。運良くPythonは上述のpyhs2があったので、(うまくいけば)多分使える。あと非同期リクエストをできるようにしたいんだけど、thrift client側の実装でやるか、それを利用する側で別プロセスで問い合わせるようにするかとか考えていた。なるべくthrift client側の実装でやりたいんだけど、そのへんの隔たりがよくわかってない。調べるかもしれないし、調べないかもしれない。