2015-11-20 24 views
7

Próbuję wstawić rekordy do Cassandry za pomocą wielowątkowego programu Python. Używam tego programu jednocześnie na 3 komputerach. Przez jakiś czas wstawiane są rekordy, ale później dostaję się poniżej wyjątku. Używam sterownika dostarczonego przez datastax.Jak rozwiązać "cassandra.cluster.NoHostAvailable" w wielowątkowym programie Python

cassandra.cluster.NoHostAvailable

Zrobiłem kilka wyszukiwania i okazało się (źródło: https://datastax.github.io/python-driver/api/cassandra/cluster.html)

wyjątek cassandra.cluster.NoHostAvailable
Raised gdy operacja próby ale wszystkie połączenia są zajęte, nie działające, zamknięte lub spowodowało błędy podczas korzystania.

Moje pytanie brzmi:
1. Czy to normalne wyjątek można by zmierzyć się ze zbyt wielu podłączenia do Cassandry.
2. Jak rozwiązać ten problem w sytuacji, w której chcę utworzyć wiele połączeń/sesji z/z kassandra. (Wiem, że tworzenie zbyt wielu sesji nie jest wskazane, ma wpływ na wydajność serwera, ponieważ każda sesja zużywa garstkę pamięci)

Poniżej znajduje się fragment kodu.

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() 

Odpowiedz

5

To zwykłych wyjątków, które mogą wystąpić, gdy jeden lub więcej węzłów Cassandra danych, zwłaszcza jeśli idzie do wirowania GC lub innych awarii.

W zależności od współczynnika replikacji (RF) i poziomu spójności (CL), pojedynczy węzeł przechodzący w tryb offline może, ale nie musi, złamać aplikację (przy częstotliwościach radiowych równym 3 i CL kworum każda awaria pojedynczego węzła nie powinna stanowić problemu) .

Powinieneś sprawdzić stan zdrowia klastra z kassandra za pomocą nodetool status i sprawdzić /var/log/cassandra/system.log pod kątem oznak poruszania się węzłów w górę/w dół.

+0

Dzięki Jeff za odpowiedź. Teraz RF ma wartość 2, myślę, że muszę go zmienić na 3 –