在上一篇文章中,我談到了我們尋找將 SSTable 數據加載到 GPU 以進行數據分析的最佳方法的過程。我們研究了將 Cassandra 數據轉換為RAPIDS可用格式的各種方法,并決定創建sstable to arrow ,一種自定義實現,用于解析 sstable 并將其寫入 arrow 格式。在這篇文章中,我們將進一步討論sstable-to-arrow,它的功能、局限性,以及如何在分析用例中使用它。
實施細節
Sstable-to-arrow是用C++17編寫的。它使用 Kaitai 結構。庫以反 Clara 方式指定SSTable文件的布局。然后 Kaitai 結構編譯器將這些 declarations 編譯成C++類,這些類可以包含在源代碼中,以將SSTables解析為內存中的數據。然后,它獲取數據并將表中的每一列轉換為箭頭向量。Sstable to arrow隨后可以將arrow數據發送到任何客戶機,在那里數據可以轉換為 cuDF 并可用于 GPU 分析。
當前限制
SStable-to-arrow一次只能讀取一個 SSTable 。要處理多個 SSTable ,用戶必須為每個 SSTable 配置 cuDF ,并使用 GPU 根據上次寫入 wins 語義合并它們。
sstable-to-arrow公開內部卡桑德拉時間戳和墓碑標記,以便可以在 cuDF 層進行合并。
有些數據,包括分區鍵和集群列的名稱,實際上無法從 SSTable 文件中推斷出來,因為它們需要將模式存儲在系統表中。
Cassandra 在刷新到 SSTables 之前將數據存儲在 memtables 和 commitlogs 中,因此僅使用sstable-to-arrow執行的分析可能會過時/不實時。
目前,解析器只支持 Cassandra OSS 3 。 11 編寫的文件。
系統設置為掃描整個 SSTables (而不是讀取特定分區)。如果我們做謂詞下推,還需要做更多的工作。
不支持以下CQL 類型:counter、frozen和用戶定義的類型。
varint s 最多只能存儲 8 個字節。嘗試讀取具有較大varint的表將崩潰。
解析器最多只能讀取 64 列的表。
解析器將每個 SSTable 加載到內存中,因此當前無法處理超出機器內存容量的大型 SSTable 。
Decimal S轉換成8字節浮點值,因為無論是C++還是箭頭都沒有對 Java BigIntege 或 BigDecimal 類的任意精度整數或小數點的本機支持。這意味著對十進制列的操作將使用浮點運算,這可能是不精確的。
Set 被視為列表,因為 Arrow 沒有集合的等效項。
路線圖和未來發展
該項目的最終目標是在 RAPIDS 生態系統中包含某種形式的讀表功能,類似于cudf.read_csv。性能也是一個不斷發展的領域,我目前正在研究如何進一步并行讀取 SSK 表,以充分利用 GPU 。我還致力于解決或改進前面提到的限制,特別是擴大對不同 CQL 類型的支持,并使程序能夠處理大型數據集。
如何使用sstable-to-arrow
您可以使用Docker運行sstable-to-arrow。
這將偵聽端口 9143 上的連接。它希望客戶端先發送消息,然后以以下格式發送數據:
作為 8 字節 big-endian 無符號整數傳輸的箭頭表數
對于每個表:
其大小(以字節為單位)為 8 字節大端無符號整數。
表的內容采用箭頭 IPC 流格式。
然后,您可以使用任何客戶端從端口獲取數據。要開始使用示例 Python 客戶端,如果您的系統不支持 CUDA ,請執行以下步驟:
如果您的系統支持 CUDA ,建議使用以下命令創建 conda 環境。在啟動sstable-to-arrow服務器之前,您還需要傳遞 -x 標志,以將所有不支持 cuDF 的類型轉換為十六進制字符串。
要使用其他數據集進行實驗,您需要在計算機上使用原始 SSTable 文件。您可以在這是谷歌硬盤文件夾下載物聯網數據示例。您還可以使用存儲庫中的generate-data腳本生成物聯網數據,也可以使用 CQL 和 Cassandra Docker 映像手動創建表(有關更多信息,請參閱Cassandra 快速入門)。確保使用 Docker 卷與容器共享 SSTable 文件:
您還可以傳遞 -h 標志以獲取有關其他選項的信息。如果希望從源代碼構建項目,請按照GitHub 存儲庫中的步驟進行操作。
SSTable to Parquet
Sstable-to-arrow還能夠將 SSTable 數據保存為Parquet文件,這是存儲列數據的常用格式。同樣,它還不支持重復數據消除,因此它只需將 sstable 和所有元數據輸出到給定的拼花地板文件。
您可以通過傳遞-p標志,然后傳遞要存儲拼花地板文件的路徑來運行此操作:
結論
Sstable-to-arrow是利用 Cassandra 數據進行基于 GPU 的分析的早期但有希望的方法。該項目可在GitHub上獲得,并可通過碼頭中心作為 alpha 版本訪問。
關于作者
Alex Cai 于 2021 年在 DataStax 實習,是哈佛大學 2025 級的學生。他熱衷于計算機、軟件和認知科學,在業余時間,他喜歡閱讀、研究語言學和玩他的貓。
審核編輯:郭婷
-
NVIDIA
+關注
關注
14文章
5075瀏覽量
103579 -
gpu
+關注
關注
28文章
4768瀏覽量
129261 -
計算機
+關注
關注
19文章
7534瀏覽量
88502
發布評論請先 登錄
相關推薦
評論