使用DseAuthenticator和DseAuthorizer将python连接到带有cassandra的集群

Mad*_*sVJ 8 python linux cql cassandra cqlsh

我都试过用pycassa,cassandra.clusterdse.cluster没有进行连接.

我觉得我正在连接到错误的主机,因为我正在编写linux服务器主机名而没有指定任何有关cassandra的内容.

Collegues告诉我他们只知道通过cqlshlinux机器内联连接到服务器.这听起来不方便.

具体配置 cassandra.yaml

authenticator: com.datastax.bdp.cassandra.auth.DseAuthenticator
authorizer: com.datastax.bdp.cassandra.auth.DseAuthorizer
Run Code Online (Sandbox Code Playgroud)

我在pycassa做的事情:

import pycassa
URIPORTLIST = ['12345.mycompany.net:9420']
pool = pycassa.ConnectionPool('my_keyspace', server_list=URIPORTLIST,credentials={'USERNAME':'fancycar','PASSWORD':'becauseimbatman'}, prefill=False)
cf = pycassa.ColumnFamily(pool, 'my_table')
Run Code Online (Sandbox Code Playgroud)

错误信息:

AllServersUnavailable: An attempt was made to connect to each of the servers twice, but none of the attempts succeeded. The last failure was TTransportException: Could not connect to 12345.mycompany.net:9420
Run Code Online (Sandbox Code Playgroud)

dse.cluster

from dse.cluster import Cluster
auth_provider = PlainTextAuthProvider(
        username='fancycar', password='becauseimbatman')
cluster = Cluster(
    ['12345.mycompany.net'],
    port=9042,auth_provider=auth_provider)
session = cluster.connect('my_keyspace')
Run Code Online (Sandbox Code Playgroud)

错误信息:

NoHostAvailable: ('Unable to connect to any servers', {'11.111.11.1': AuthenticationFailed('Failed to authenticate to 11.111.11.2: Error from server: code=0100 [Bad credentials] message="Failed to login. Please re-try."',)})
Run Code Online (Sandbox Code Playgroud)

Mad*_*sVJ 3

通过使用 dse.auth PlainTextAuthProvider 而不是 Cassandra 来修复。

from dse.cluster import Cluster
# pip install dse-driver
from dse.auth import PlainTextAuthProvider
auth_provider = PlainTextAuthProvider(
        username='fancycar', password='becauseimbatman ')
cluster = Cluster(contact_points=['12345.mycompany.net'],
port=9042, auth_provider=auth_provider)
session = cluster.connect('batcave')
print "connected"
print session.execute("SELECT * FROM robinstears")[0]
Run Code Online (Sandbox Code Playgroud)