【问题标题】:Cassandra NoHostAvailable mistakeCassandra NoHostAvailable 错误
【发布时间】:2021-01-27 14:38:06
【问题描述】:

我刚刚通过 Docker 创建了两个 Cassandra 集群。 docker exec -it name nodetool status 命令告诉集群创建一切正常:

然后我将尝试从 Python 驱动程序向表中插入数据。

这是我的代码:

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)

最后,当我尝试执行代码时,我在终端中给出了以下错误:

【问题讨论】:

    标签: python docker cassandra cassandra-python-driver


    【解决方案1】:

    您是从主机连接吗?

    在这种情况下,请检查您是否将容器端口 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)
    

    【讨论】:

      猜你喜欢
      • 2016-06-14
      • 2020-01-13
      • 2018-01-08
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2020-12-23
      • 2017-12-26
      • 2021-10-04
      相关资源
      最近更新 更多