2012-07-27 58 views
6

我有我的系統爲單節點集羣上的卡桑德拉1.1.2安裝有三個keyspaces:hotelstudentemployee。如果可能,我想轉儲hotel的密鑰空間模式及其列數據,並在其他Cassandra集羣上恢復轉儲。任何人都可以詳細告訴我,我該怎麼做?KEYSPACE模式導入和導出在卡桑德拉

回答

6

您可以使用sstable2jsonjson2sstable卡桑德拉工具

退房Datastax documentation在同和this

Usage: sstable2json [-f outfile] <sstable> [-k key [-k key [...]]] 
Usage: json2sstable -K keyspace -c column_family <json> <sstable> 

您隨時可以在文件

cassandra-cli -h HOST -p PORT -f fileName 

執行卡桑德拉 - CLI命令您可以將所有創建語句加載到文件中並執行此命令

要獲得CLI腳本來創建keyspaces和列家庭使用以下命令卡桑德拉-CLI界面

show schema 

但櫃面你想創建兩個節點的集羣。你不需要做所有上述事情。只需以不同的令牌範圍和相同的羣集名稱啓動另一個節點即可。 Cassandra內部將設法傳輸數據和模式信息

+0

感謝泰米爾非常感謝你我一直面臨這個問題從3天這是一個很好的解決方案 我有一件事要問geting密鑰空間後恢復它在其他羣集可以複製和粘貼的密鑰空間數據進入數據目錄 – 2012-07-27 09:32:43

+0

不,你不能這樣做。在現有的一個節點集羣上執行'nodetool drain' [即使您想要所有數據,甚至在內存中]並繼續使用json加載程序。別無他法。 nodetool drain會刷新所有的CF,但是當前的集羣將無法訪問,直到此操作完成。 – Tamil 2012-07-27 10:35:37

+0

謝謝,但我做了我上面提到的,它工作正常,它會創建任何問題,如果我不會使用節點排水等 – 2012-07-27 19:39:14

2

我不建議使用stable2jsonjson2sstable加載大量數據。它使用jackson API來創建數據集並將其轉換爲json格式。它意味着加載內存中的所有數據來創建一個獨特的json表示。

對於少量的數據可以,現在想象加載一個包含超過4000萬行數據,大約25GB數據的大型數據集,這些工具根本無法正常工作。我已經向datastax提問,但沒有澄清。

如果數據集較大,只需將cassandra數據文件從羣集複製到另一個羣集即可解決問題。在我的情況下,我試圖從Cassandra 1.0.6集羣遷移到1.2.1,這些版本之間的數據文件不兼容。

解決方案是什麼? 我只是寫我自己的出口/進口工具來解決這個問題。我希望很快發佈此工具的鏈接。