2017-04-15 81 views
2

這裏是我的表數查詢設置

CREATE TABLE star.star_event (
eventnumber int, 
primarytracks int, 
prodtime double, 
antinucleus int, 
eventfile int, 
eventtime double, 
histfile bigint, 
multiplicity int, 
nabovelb int, 
nbelowlb int, 
nlb int, 
pt double, 
runnumber int, 
vertexx double, 
vertexy double, 
vertexz double, 
PRIMARY KEY (eventnumber, primarytracks, prodtime) 
) WITH CLUSTERING ORDER BY (primarytracks ASC, prodtime ASC) 

我試圖做select count(1) from star_event。我知道這是cassandra支持的有效查詢,至少對於少量的數據。但是對於一個巨大的數據集,它似乎不起作用。

經常收到錯誤

ReadTimeout: Error from server: code=1200 [Coordinator node timed out 
waiting for replica nodes' responses] message="Operation timed out - 
received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'} 

cassandra.yaml仍然沒有運氣增加了默認ReadTimeout值。什麼是可用的解決方法。

回答

1

我看到你知道你用cassandra的方式就夠了;)你已經嘗試過改變yaml文件。現在並沒有太多可以做的事情,因爲它現在只能使用cassandra(除了甚至可能進一步增加超時時間並看看會發生什麼)

基本上有時數據只是很大。所以你必須解決這個問題。有幾個方法可以做到這一點:

  1. 由外部處理進行計數 - 火花總是工作真的很好,我,但我也有些編碼自己的工具來經常處理數據。您可以使用這個答案你自己的計數工具https://stackoverflow.com/a/23750872/7413631

  2. 嘗試重塑數據 - 但是這一次也不適合你我猜,因爲破錶分成多個較小的似乎不是最佳

  3. 通過使用表統計nodetool cfstats使用模糊卡桑德拉近似(內128),如果你只是有興趣到棒球場:http://www.wentnet.com/blog/?p=24

  4. 試圖使用計數器列,基本上對每一次插入多了一個更新,你作出這樣實際上增加計數器值。但是一旦你開始計算,你還需要將它設置爲初始值。

這一切都取決於,如果這個計數是你不經常做的事,可以等待自己的腳本或火花是o.k.如果你必須馬上擁有它,我會去櫃檯專欄。

+0

不錯的點非常有幫助。所以如果火花可以替代這個probs。我不清楚這一點,如果卡桑德拉本身無法處理這樣的疑問,那麼火花會是什麼? – curiousguy

+0

Spark實際上會將行拖出小塊並計數:)我知道這可能聽起來有點奇怪我同意,但如果數據量很大,那麼在單個請求中表現不佳,因此您還需要東西在一邊。分佈式計數總是有點問題。 –

+0

有趣的我會試試這個肯定的,並回到你身邊。感謝您向我展示方向:) – curiousguy