DB-API (非同期) の例を使用して、Python (PyHive 0.5、python 2.7) を介して、docker コンテナー内で (コンテナーの外部から) 実行されている Hive サーバー 2 に接続しようとしています。
from pyhive import hive
conn = hive.connect(host='172.17.0.2', port='10001', auth='NOSASL')
ただし、次のエラーが発生します
Traceback (most recent call last):
File "py_2.py", line 4, in <module>
conn = hive.connect(host='172.17.0.2', port='10001', auth='NOSASL')
File "/home/foodie/anaconda2/lib/python2.7/site-packages/pyhive/hive.py", line 64, in connect
return Connection(*args, **kwargs)
File "/home/foodie/anaconda2/lib/python2.7/site-packages/pyhive/hive.py", line 164, in __init__
response = self._client.OpenSession(open_session_req)
File "/home/foodie/anaconda2/lib/python2.7/site-packages/TCLIService/TCLIService.py", line 187, in OpenSession
return self.recv_OpenSession()
File "/home/foodie/anaconda2/lib/python2.7/site-packages/TCLIService/TCLIService.py", line 199, in recv_OpenSession
(fname, mtype, rseqid) = iprot.readMessageBegin()
File "/home/foodie/anaconda2/lib/python2.7/site-packages/thrift/protocol/TBinaryProtocol.py", line 148, in readMessageBegin
name = self.trans.readAll(sz)
File "/home/foodie/anaconda2/lib/python2.7/site-packages/thrift/transport/TTransport.py", line 60, in readAll
chunk = self.read(sz - have)
File "/home/foodie/anaconda2/lib/python2.7/site-packages/thrift/transport/TTransport.py", line 161, in read
self.__rbuf = BufferIO(self.__trans.read(max(sz, self.__rbuf_size)))
File "/home/foodie/anaconda2/lib/python2.7/site-packages/thrift/transport/TSocket.py", line 132, in read
message='TSocket read 0 bytes')
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
私が使用しているdockerイメージはこれです(タグ: mysql_corrected)。以下のサービスを実行します (jps コマンドで出力)
992 Master
1810 RunJar
259 DataNode
2611 Jps
584 ResourceManager
1576 RunJar
681 NodeManager
137 NameNode
426 SecondaryNameNode
1690 RunJar
732 HistoryServer
を使用してコンテナを起動しています
docker run -it -p 8088:8088 -p 8042:8042 -p 4040:4040 -p 18080:18080 -p 10002:10002 -p 10000:10000 -e 3306 -e 9084 -h sandbox -v /home/foodie/docker/w1:/usr/tmp/test rohitbarnwal7/spark:mysql_corrected bash
さらに、次の手順を実行して、docker コンテナー内で Hive サーバーを起動します。
- mysql サービスを開始します。
service mysqld start
- ディレクトリ /usr/local/hive に切り替えます。
cd $HIVE_HOME
- Hive メタストア サーバーを起動します。
nohup bin/hive --service metastore &
- Hive サーバー 2 を起動します
hive --service hive-server2
(thrift-server ポートは で既に 10001 に変更されていることに注意してください/usr/local/hive/conf/hive-site.xml
) 。 - beeline シェルを起動します。
beeline
- beeline シェルを Hive server-2 に接続します。
!connect jdbc:hive2://localhost:10001/default;transportMode=http;httpPath=cliservice
私はすでに運がなくても次のことを試しました
- dockerコンテナ内のデフォルトのpythonバージョンとしてpython 2.7.3を作成します(元のデフォルトはpython 2.6.6で、python 2.7.3はコンテナ内にインストールされていますが、デフォルトではありません)
- Hive サーバーのポートをデフォルト値の 10000 に変更する
- コンテナー内で同じ python スクリプトを実行して Hive サーバーに接続しようとしています (それでも同じエラーが発生します)