2014-12-07 75 views
3

我使用Apache Spark和Spark Cassandra Connector將數百萬行寫入Cassandra羣集。複製因子使用下列選項設置爲3,我在火花提交(YARN客戶端模式)設置寫一致性ALL:Cassandra與批量更新不一致

spark-submit ... 
--conf spark.cassandra.output.consistency.level=ALL \ 
--conf spark.cassandra.output.concurrent.writes=1 \ 
--conf spark.cassandra.output.batch.size.bytes=20000 \ 
... 

我然後寫另一個星火工作算我已寫入的數據。我成立了新的工作如下的一致性:

spark-submit ... 
--conf spark.cassandra.input.consistency.level=ONE \ 
--conf spark.cassandra.input.split.size=50000 \ 
... 

從文檔,如果寫一致性加上讀一致性大於複製因子越大,我應該有一致的讀取。

但我發現了以下結果:

  • 讀取作業給我不同的結果(計數),我每次運行它時
  • 如果我增加了讀作業的一致性水平我得到的預期結果

我錯過了什麼?是否有任何默認設置的祕密配置(例如,如果在寫入過程中發生問題,然後降低一致性級別或類似的東西......),還是我使用卡桑德拉的錯誤版本(它是2.1.2),或者spark-cassandra-connector用於將數據保存到Cassandra(我只是簡單地使用「saveToCassandra」方法)嗎?

怎麼回事?

+1

這聽起來像是一個bug,你可以在連接器github網站上報告它嗎?我猜測輸出一致性級別沒有得到適當的應用。對代碼的粗略瀏覽使我認爲它正在工作,但更多細節將有所幫助(編寫命令,集羣設置,節點數量,dcs ...) – RussS 2014-12-07 21:54:44

回答

3

我確認這是連接器中的一個錯誤。一致性級別正在針對單個準備好的語句進行設置,並且在我們使用批量語句的情況下簡單地被忽略。按照連接器上的更新 - 修復程序將包含在下一個錯誤修復版本中。