2016-02-11 129 views
0

我知道過類似的問題,但我認爲我的用例非常具體,我找不到任何答案。Cassandra數據從1.2遷移到3.0.2

在生產中,我們使用Cassandra 1.2和ByteOrderPartitioner在6節點集羣中以Priam作爲種子管理工具。我們最近升級了所有依賴關係,並試圖使用Murmur分區器遷移到Cassandra 3.0.2,爲了實現向後兼容性,我們需要啓用節點集羣。同時我們也希望從Priam遷移出來。 我能夠設置新的羣集,但在數據遷移過程中遇到很多問題。我試過3兩件事:

1)使用拷貝命令:失敗時的行數較大

2)SSTable2Json:卡桑德拉3.0.2已停止支持SSTable2Json

3)SSTableloader:失敗我想是因爲源和目標

了java.lang.RuntimeException的不同版本卡桑德拉:在org.apache.cassandra.tools.BulkLoader $ ExternalClient.init(BulkLoader.java:233) 在組織 :無法檢索端點範圍。 apache.cassandra.io.sstable.SSTableLoader.stream( SSTableLoader.java:119) at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:67) 引起:InvalidRequestException(原因:未配置的表schema_columnfamilies) at org.apache.cassandra.thrift.Cassandra $ (org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) at org.apache.cassandra.thrift.Cassandra $ Client.recv_execute_cql3_query(Cassandra.java:1562)org.apache.thrift.TServiceClient.receiveBase(Cassandra.java:1578) at org.apache.cassandra.thrift.Cassandra $ Client.execute_cql3_query(Cassandra.java:1547) at org.apache.cassandra.tools.BulkLoader $ ExternalClient.init(BulkLoader.java:225) ... 2 more

Righ現在我有點卡住了,對此的任何幫助將深受讚賞。如果您需要更多詳細信息,請告訴我。

回答

1

不,您不能將sstables 直接從1.2升級到3.0.2,因爲sstable對於不同的版本會有所不同。這個link描述了升級cassandra版本的步驟。但它也不會幫你,因爲你正在改變分區類型。

更改分區類型尚不支持卡桑德拉作爲 現在(Link)

其中一個解決方案,我寧願是的,

創建一個獨立的工具,它是卡桑德拉3.0.2版本,從您的源卡桑德拉閱讀所有的數據和寫入的SSTable 與幫助CQLSSTableWriter與分區類型的Murmur分區程序(訣竅是,您正在編寫 版本3.0.2的sstable,因此此sstable將很容易被您的新集羣識別爲 )。然後使用SSTableLoader在你的目標羣


但我不知道爲什麼你仍然需要向後兼容性,同時創造CQLSSTableWritter你可以用關鍵字 「緊湊存儲」指定列的家庭模式。但我沒有用「WITH COMPACT STORAGE」嘗試CQLSSTableWritter,但沒有「WITH COMPACT STORAGE」我試過了,它也適用於你的情況。

+0

感謝Jaya,我仍在探索兩種選擇: 1)使用CQLSSTableWriter 2)在新集羣中創建模式,編寫將一組數據直接複製到另一個集羣的Java代碼。由於數據並不龐大(大約100GB),我更傾向於第二種選擇,因爲我已經熟悉在cassandra中寫入數據的代碼。對此有任何想法。 –

+0

以我的觀點來看,第二種方法比第一種方法需要更多的時間。另一個預防措施是使用重試邏輯進行寫入過程。因爲如果有任何寫入失敗,出現任何異常,那麼您需要從第一個寫入過程開始。 –

+0

對於第二個選項,還有一點是,我不確定cassandra是否會處理100GB的所有數據。由於以100GB的速度寫入,可能會帶來麻煩。從cassandra文檔中,它必須處理所有100GB數據,而不會失敗。還沒有嘗試過,但幾乎你正在給cassandra做壓力測試。但是如果你選擇第一種選擇,你就不會陷入任何陷阱。如果可能的話,一旦完成就取回結果,這對未來可能有所幫助。 –

0

好吧,如果您嘗試從1.2直接遷移到3.0.2,那麼您確實在尋找麻煩。

遷移路徑應該是

  1. 最新輕微或1.2
  2. 2.0最新次要
  3. 2.1最新次要
  4. 3.0.2

對於版本之間的每個跳變,讀https://github.com/apache/cassandra/blob/trunk/NEWS.txt文件知道您是否需要特殊操作(升級sstable,...)

+0

謝謝@doanduyhai,但這不會工作,好像我只是升級當前版本,我仍然必須使用ByteOrderPartitioner –

+0

一旦你選擇了分區器(ByteOrderPartitioner),你就必須永遠保持它。更改分區程序的唯一方法是創建一個新集羣並使用Spark將所有數據複製到此新集羣中 – doanduyhai

+0

對不起,不清楚,但在我的問題中,我提到過我已經用新分區程序創建了一個新集羣,現在只有在等待複製數據 –