通过Python连接到远程Cassandra数据库

时间:2015-09-11 13:28:00

标签: python cassandra

我需要一些帮助建立与ec2实例上的远程Cassandra数据库的连接。让我们直接进入。这是我的python脚本(我正在尝试两种不同的方法)。

import cql
from cassandra.cluster import Cluster

cluster = Cluster(contact_points = ['172.XX.XX.XX',], port=<port>)
session = cluster.connect('demo')

while True:
    fname = raw_input('First name> ')
    lname = raw_input('Last name> ')
    session.execute("INSERT INTO demo (firstname, lastname) VALUES ('"+fname+"', '"+lname+"')")


'''connection = cql.connect('172.XX.XX.XX', <port>, 'demo')
print 'made connection'
cur = connection.cursor()
cur.execute("INSERT INTO example (firstname, lastname) VALUES ('Guy', 'Man');")
'''

这是我一直在犯的错误。

Traceback (most recent call last):
File "/home/user/Cassandra/remote connect.py", line 5, in <module>
session = cluster.connect('demo')
File "build/bdist.linux-x86_64/egg/cassandra/cluster.py", line 840, in connect
self.control_connection.connect()
File "build/bdist.linux-x86_64/egg/cassandra/cluster.py", line 2087, in connect
self._set_new_connection(self._reconnect_internal())
File "build/bdist.linux-x86_64/egg/cassandra/cluster.py", line 2122, in _reconnect_internal
raise NoHostAvailable("Unable to connect to any servers", errors)
NoHostAvailable: ('Unable to connect to any servers', {'172.XX.XX.XX': error(None, "Tried connecting to [('172.XX.XX.XX', <port>)]. Last error: None")})

这是我配置cassandra.yaml的方式

listen_address: 172.XX.XX.XX

设置为机器的IP。

start_native_transport: true
native_transport_port: 9042

start_rpc: false

rpc_address: 0.0.0.0

broadcast_rpc_address: 172.XX.XX.XX

也设置为机器的IP。

然后我做bin/cassandra -f并收到此错误。

java.lang.IllegalStateException: Failed to bind port 9042 on 0.0.0.0.

然后它宣布关闭。

当我尝试bin/cassandra时,它会说明这一点 -

INFO: No gossip backlog; proceeding

然后我等了15到20分钟,看看它是否有效......但事实并非如此。

任何帮助表示赞赏!提前谢谢!

1 个答案:

答案 0 :(得分:1)

问题是您使用的是遗留CQL驱动程序,它使用thrift / 9160,而不是实现本机协议的新Python数据存储驱动程序(9042)。

请注意:https://github.com/datastax/python-driver