読者です 読者をやめる 読者になる 読者になる

すずけんメモ

技術メモです

EMRでHiveServer2を立ち上げてみた

hive emr

背景

  • 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&#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側の実装でやりたいんだけど、そのへんの隔たりがよくわかってない。調べるかもしれないし、調べないかもしれない。