2014-07-22 54 views
16

我使用Cassandra 2.0.9來存儲相當大量的數據,比如100Gb,在一個列系列中。我想快速將這些數據導出爲CSV。我想:從Cassandra導出大量的數據到CSV

  • sstable2json - 它會產生相當大的JSON文件,這是很難解析 - 因爲工具放入一行數據,並使用複雜的架構,它需要(例如300MB的數據文件=〜2Gb的JSON)。大量的時間來轉儲和卡桑德拉喜歡根據其內部機制來更改源文件名
  • COPY - 導致對大數量的記錄
  • CAPTURE相當快的EC2實例超時 - 像上面,導致超時
  • 與分頁讀 - 我用timeuuid它,但它返回約1,5k記錄每秒

我使用Amazon EC2實例具有快速存儲,內存15 GB和4個核

是有沒有更好的選擇將Cassandra的數據從千兆字節輸出到CSV?

+0

你有沒有考慮過爲自己製作一個小玩意兒?使用datastax驅動程序,您可以輕鬆地提出請求,提取您的數據,然後使用csv文件將它們序列化爲幾乎沒有Java代碼? 這將確保你得到你想要的確切結果(儘管有一點努力)。 – Ar3s

+0

此外,我沒有得到「閱讀與分頁」方法或問題。 – Ar3s

+1

*閱讀與分頁* - 使用Python驅動程序我試圖閱讀內容使用限制(測試值100 - 10000,基於TimeUuid)和偏移量,它非常緩慢,卡桑德拉能夠讀取每秒約1,5k記錄3個實例和複製因子2 我無法想象,只需使用驅動程序就可以構建快速讀取,因爲每行Cassandra必須檢查存儲數據的節點。 – KrzysztofZalasa

回答

3

因爲使用COPY在試圖從Cassandra中導出數百萬行的表時非常具有挑戰性,所以我所做的就是創建一個簡單的工具從cassandra表中獲取數據塊(分頁)將其導出爲CSV。使用來自datastax的java庫查看我的example solution

+0

請提供一個完整的答案,而不僅僅是一個鏈接 – slfan

+0

正如我之前寫的:我試過這個解決方案,但速度很慢 - 它可能每秒傳遞1,5k條記錄。你有任何副本集和100Gb數據的基準嗎? – KrzysztofZalasa

+0

我們的數據集中最大的表格是:22gb數據〜122mil行〜在444m38.061s中提取。 (使用1個主機cassandra服務器4core 8gb ram sata hdd)(大約4.5k行/秒,這對我們來說已經足夠了,因爲我們只會將數據遷移到其他地方) –