AWS認定試験で必要な身分証明書
- Wed
- 23:30
- AWS
AWS EMRのJupyterからHiveへアクセス
- Sun
- 21:09
- AWS
awsのEMRはマネージドで自分で構成要素の設定を行う必要はほぼありませんが、EMR起動時のJupyterを指定してもそのままでは、Jupyter NotebookからHiveにアクセスすることができません。
と、いうことで一番簡単であろうpyhiveを利用したアクセスの設定を。
手順としては、
1. jupyterhub dockerに必要なpkgをインストール
2. materノードのhost側(jupyter dockerでない)にpkgをインストール
3. materノードのhiveserver2の設定&再起動
4. pythonのコードからアクセス
次にpkgを入れる。jupyterhubのdockerはUbuntuなのでapt-getで。build-essentialを入れる理由は、thrift系のpkgを入れるときにC/C++系のbuildが走るため。OSに必要なもの入れた後は、pipでpyhiveを。
HS2をリスタート。
HS2の設定で、NOSASLを指定しているのに、pyhiveで接続する時にはsasl系のパッケージをmasterに入れないとダメな理由がわかりませんが、とりあえず接続できたのでOK。
kerberos等、他の認証方法を使う場合はそれに合わせてhive-site.xmlとpythonコードを修正する。
prestoに接続する場合は、
と、いうことで一番簡単であろうpyhiveを利用したアクセスの設定を。
手順としては、
1. jupyterhub dockerに必要なpkgをインストール
2. materノードのhost側(jupyter dockerでない)にpkgをインストール
3. materノードのhiveserver2の設定&再起動
4. pythonのコードからアクセス
1. jupyterhub dockerに必要なpkgをインストール
dockerのコンテナ名は「jupyterhub 」になってるので、まずdockerに入る。$ sudo docker exec -i -t jupyterhub bash
次にpkgを入れる。jupyterhubのdockerはUbuntuなのでapt-getで。build-essentialを入れる理由は、thrift系のpkgを入れるときにC/C++系のbuildが走るため。OSに必要なもの入れた後は、pipでpyhiveを。
$ sudo apt-get update $ sudo apt-get install build-essential libsasl2-dev $ sudo pip install sasl thrift_sasl pyhive
2. materノードのhost側(jupyter dockerでない)にpkgをインストール
後で書きますが、一旦入れる。$ sudo yum install cyrus-sasl cyrus-sasl-md5 cyrus-sasl-devel
3. materノードのhiveserver2の設定&再起動
hive-site.xmlに下記を追加。<property> <name>hive.server2.authentication</name> <value>NOSASL</value> </property>
HS2をリスタート。
$ sudo start hive-server2
4. pythonのコードからアクセス
import thrift, thrift_sasl from pyhive import hive conn = hive.Connection( host="masterのEC2のIPアドレス", port=10000, auth="NOSASL" ) cursor = conn.cursor() cursor.execute("クエリー") print (str(cursor.fetchall()))
HS2の設定で、NOSASLを指定しているのに、pyhiveで接続する時にはsasl系のパッケージをmasterに入れないとダメな理由がわかりませんが、とりあえず接続できたのでOK。
kerberos等、他の認証方法を使う場合はそれに合わせてhive-site.xmlとpythonコードを修正する。
prestoに接続する場合は、
from pyhive import presto cursor = presto.connect("masterのEC2のIPアドレス", port="8889", schema="hive").cursor() cursor.execute("クエリー")クエリーはとりあえず"show tables"とか、prestoなら"show schemas"とかで接続テストするといいかと。