【beeline】Required field 'client_protocol' is unset!

beelineでHadoopにつなごうとしたらこんなエラーがでて困った。

18/10/10 15:59:41 [main]: ERROR jdbc.HiveConnection: Error opening session
org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{use:database=default, set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000})

その時の解決方法。

条件とやりたいこと

やりたいこと

  • すでにHadoopクラスターができている。
  • そのクラスターに対して新しいノードからクライアントしてbeelineを使いたかった。

条件など

  • Hadoopはclouderaを使っている。
  • エラーが出た時、Hiveはapache hive からダウンロードして使っていた。

ちなみにhive 1.2.2も2.3.3も3.1.0も使ってみたが、どのバージョンも同じようなエラーだった。

解決方法

cloudera からHiveをインストールする!

stackoverflowなどをみて解決方法を探ってたら
「hive-jdbc-1.2...だとかバージョン落としてみたら」とか
「metasrore_dbの場所が違うんじゃ?」とか出てきたけど
全然関係なかった。

cloudera のHiveを使えば解決しました。

sudo su -

# OSのバージョンは適宜変更してね
wget http://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/cloudera-cdh5.repo


# clouderaのバージョンが異なるのであれば変えておくこと。
vi cloudera-cdh5.repo

# ex.
# -------------------------------------------------------
baseurl=https://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/5/
↓
baseurl=https://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/5.15.0/
# -------------------------------------------------------

mv cloudera-cdh5.repo /etc/yum.repos.d/

yum install hive

これでうまくいった。

依存関係でhadoopコマンドやhdfsコマンドもインストールされるのね。