Cassandra NoHostAvailable 错误
Cassandra NoHostAvailable mistake
我刚刚通过 Docker 创建了两个 Cassandra 集群。 docker exec -it name nodetool status
命令告诉集群创建一切正常:
然后我将尝试从 Python 驱动程序向 table 插入数据。
这是我的代码:
from cassandra.cluster import Cluster
from faker import Faker
import time
fake = Faker()
num = 0
cluster = Cluster(['172.17.0.2', '172.17.0.3'], port=9042)
session = cluster.connect()
session.execute('USE keys')
print("Start create data")
start = time.time()
for i in range(10000):
time.sleep(0.001)
num+=1
session.execute(
"""
INSERT INTO tt (id, title) VALUES (%(id)s, %(title)s)
""",
{'id': num, 'title': fake.address()}
)
end = time.time()
print("Total time: ", end - start)
最后,当我尝试执行代码时,我在终端中出现了以下错误:
您是从主机连接的吗?
在这种情况下,请检查您是否将容器端口 9042 暴露给本地主机(因为 docker 容器 运行 在与您的主机不同的网络上)。
例如单个节点:
docker run -p 9042:9042 cassandra:latest
因为你有两个默认都使用容器端口 9042 的节点,你想将第二个节点的端口 9042 映射到其他东西,比如
docker run -p 9043:9042 cassandra:latest
两个端口都映射到localhost,在python中设置集群时指定一个节点就可以了,你只需要一个节点连接,其余集群被发现连接成功:
cluster = Cluster(['127.0.0.1'], port=9042)
我刚刚通过 Docker 创建了两个 Cassandra 集群。 docker exec -it name nodetool status
命令告诉集群创建一切正常:
然后我将尝试从 Python 驱动程序向 table 插入数据。
这是我的代码:
from cassandra.cluster import Cluster
from faker import Faker
import time
fake = Faker()
num = 0
cluster = Cluster(['172.17.0.2', '172.17.0.3'], port=9042)
session = cluster.connect()
session.execute('USE keys')
print("Start create data")
start = time.time()
for i in range(10000):
time.sleep(0.001)
num+=1
session.execute(
"""
INSERT INTO tt (id, title) VALUES (%(id)s, %(title)s)
""",
{'id': num, 'title': fake.address()}
)
end = time.time()
print("Total time: ", end - start)
最后,当我尝试执行代码时,我在终端中出现了以下错误:
您是从主机连接的吗?
在这种情况下,请检查您是否将容器端口 9042 暴露给本地主机(因为 docker 容器 运行 在与您的主机不同的网络上)。
例如单个节点:
docker run -p 9042:9042 cassandra:latest
因为你有两个默认都使用容器端口 9042 的节点,你想将第二个节点的端口 9042 映射到其他东西,比如
docker run -p 9043:9042 cassandra:latest
两个端口都映射到localhost,在python中设置集群时指定一个节点就可以了,你只需要一个节点连接,其余集群被发现连接成功:
cluster = Cluster(['127.0.0.1'], port=9042)