如何解决Python多线程程序中的“cassandra.cluster.NoHostAvailable”

时间:2015-11-20 20:23:26

标签: python cassandra cassandra-2.0

我正在尝试使用多线程Python程序将记录插入到Cassandra中。我在3台机器上同时运行这个程序。有一段时间记录被插入,但后来我得到了以下异常。我正在使用datastax提供的驱动程序。

  

cassandra.cluster.NoHostAvailable

我做了一些搜索并找到了(来源:https://datastax.github.io/python-driver/api/cassandra/cluster.html

  

例外cassandra.cluster.NoHostAvailable
  手术时举起   尝试但所有连接都忙,无法关闭,或关闭   使用时导致错误。

我的问题是:
这是一个正常的例外,可能面临与卡桑德拉太多的联系。
2.如果我想创建与cassandra的许多连接/会话,我将如何解决这个问题。 (我知道创建太多会话是不可取的,它会影响服务器性能,因为每个会话消耗少量内存)

下面是代码片段。

cluster = Cluster(['192.168.1.21'])
session = cluster.connect('myNameSpace')

def insertInToCassandra(catRange):
    for x in catRange:
        //function to insert records into Cassandra table

ProductRange = [
    range(900,920),
    range(921,940),
    range(941,960),
    range(961,980),
    range(981,1000)
     ]

# Make the Pool of workers
pool = ThreadPool(20)

# Open the urls in their own threads
# and return the results
results = pool.map(insertInToCassandra, ProductRange)

#close the pool and wait for the work to finish
pool.close()
pool.join()

1 个答案:

答案 0 :(得分:6)

如果一个或多个cassandra节点不可用,这可能会发生正常异常,特别是如果它进入GC旋转或以其他方式崩溃。

根据您的复制因子(RF)和一致性级别(CL),单个节点脱机可能会或可能不会中断应用程序(RF为3和CL的仲裁,任何单个节点都失败应该没问题)。

您应该使用nodetool status检查您的cassandra群集的运行状况,并检查/var/log/cassandra/system.log是否有节点向上/向下拍打的迹象。