2017-01-16 5 views
0

Ich habe installiert Cloudera Manager Express 5.9.0 HBase, mit Thrift-Server auf Port 9090 auf CentOS 7.3 in einer VirtualBox VM ausgeführt wird.Verbinden mit Hbase von Python und happybase/Thrift

Bitte helfen Sie herauszufinden, warum ich nicht in der Lage bin über happybase erfolgreich zu kommunizieren, oder helfen Sie bei der Identifizierung der nächsten Schritte.

Ich bin ein erfahrener Java-Programmierer, der Python lernt. Ich habe Erfahrung mit Hbase von Java mit der nativen Schnittstelle, obwohl nicht in dieser spezifischen Umgebung.

  • Ich habe bestätigt, dass ich hbase Shell-Tabellen erstellen können, legen Sie Daten usw.
  • Ich habe bestätigt, dass 9090 (Sparsamkeit) hört und Verbindungen zu akzeptieren.
  • Ich glaube, ich habe bestätigt, dass der Thrift-Server mit den gleichen Protokoll/Transporteinstellungen wie die happybase Verbindungsparameter ausgeführt wird.

Python Script praktisch direkt aus happybase Howto genommen:

import happybase 

connection = happybase.Connection(host='localhost',port=9090,transport='buffered', protocol='compact') 

connection.create_table('mytable', 
    {'cf1': dict(max_versions=10), 
    'cf2': dict(max_versions=1, block_cache_enabled=False), 
    'cf3': dict(), # use defaults 
    } 
) 

Fehlermeldung, die ich nicht große Referenz finden können:

[[email protected] ~]# python testhbase.py 
Traceback (most recent call last): 
    File "testhbase.py", line 10, in <module> 'cf3': dict(), # use defaults 
    File "build/bdist.linux-x86_64/egg/happybase/connection.py", line 311, in create_table 
    File "/usr/lib64/python2.7/site-packages/thriftpy/thrift.py", line 198, in _req return self._recv(_api) 
    File "/usr/lib64/python2.7/site-packages/thriftpy/thrift.py", line 210, in _recv fname, mtype, rseqid = self._iprot.read_message_begin() 
    File "/usr/lib64/python2.7/site-packages/thriftpy/protocol/compact.py", line 147, in read_message_begin % proto_id) 
thriftpy.protocol.exc.TProtocolException: TProtocolException(type=4) 
[[email protected] ~]# 

I Thift Web-Service-Manager ausgeführt haben auf Port 9095, die berichtet:

HBase Version 1.2.0-cdh5.9.0, rUnknown HBase version and revision 
Thrift Impl Type threadpool Thrift RPC engine implementation type chosen by this Thrift server 
Compact Protocol true Thrift RPC engine uses compact protocol 
Framed Transport false Thrift RPC engine uses framed transport 

Any er LP wird sehr geschätzt. Vielen Dank.

+0

sind Sie sicher, dass die Sparsamkeit 1 (nicht thrift2) Daemon verwendet wird, mit dem richtigen Protokoll und Transport? –

+0

Wouter - Wetten, dass Sie Recht haben. Ich war mir der Unterschiede zwischen Thrift1/2 und dem Fehlen der Unterstützung von Thrift² happybase nicht bewusst. Ich werde die Antwort akzeptieren, wenn Sie als Antwort posten. – starvingmind

Antwort

1

Ich nehme an, Sie verwenden nicht die unterstützte Version des Thrift-Daemons.

Sind Sie sicher, dass der Sparsamkeit 1 (nicht Sparsamkeit2) Daemon verwendet wird, mit dem richtigen Protokoll und Transport?

+0

Happycase unterstützt nur Thrift1. Für Python-Unterstützung für Thrift2, versuchen Sie dies: https://github.com/apache/hbase/blob/master/hbase-examples/src/main/python/thrift2/DemoClient.py – starvingmind

+0

@wouterbolsterlee Wo kann ich sehen, ob meine Hbase Installation verwendet Thrift1 oder Thrift2? – Stanko