在上一篇文章中,我談到了我們尋找將 SSTable 數(shù)據(jù)加載到 GPU 以進行數(shù)據(jù)分析的最佳方法的過程。我們研究了將 Cassandra 數(shù)據(jù)轉(zhuǎn)換為RAPIDS可用格式的各種方法,并決定創(chuàng)建sstable to arrow ,一種自定義實現(xiàn),用于解析 sstable 并將其寫入 arrow 格式。在這篇文章中,我們將進一步討論sstable-to-arrow,它的功能、局限性,以及如何在分析用例中使用它。
實施細節(jié)
Sstable-to-arrow是用C++17編寫的。它使用 Kaitai 結(jié)構(gòu)。庫以反 Clara 方式指定SSTable文件的布局。然后 Kaitai 結(jié)構(gòu)編譯器將這些 declarations 編譯成C++類,這些類可以包含在源代碼中,以將SSTables解析為內(nèi)存中的數(shù)據(jù)。然后,它獲取數(shù)據(jù)并將表中的每一列轉(zhuǎn)換為箭頭向量。Sstable to arrow隨后可以將arrow數(shù)據(jù)發(fā)送到任何客戶機,在那里數(shù)據(jù)可以轉(zhuǎn)換為 cuDF 并可用于 GPU 分析。
當前限制
SStable-to-arrow一次只能讀取一個 SSTable 。要處理多個 SSTable ,用戶必須為每個 SSTable 配置 cuDF ,并使用 GPU 根據(jù)上次寫入 wins 語義合并它們。
sstable-to-arrow公開內(nèi)部卡桑德拉時間戳和墓碑標記,以便可以在 cuDF 層進行合并。
有些數(shù)據(jù),包括分區(qū)鍵和集群列的名稱,實際上無法從 SSTable 文件中推斷出來,因為它們需要將模式存儲在系統(tǒng)表中。
Cassandra 在刷新到 SSTables 之前將數(shù)據(jù)存儲在 memtables 和 commitlogs 中,因此僅使用sstable-to-arrow執(zhí)行的分析可能會過時/不實時。
目前,解析器只支持 Cassandra OSS 3 。 11 編寫的文件。
系統(tǒng)設(shè)置為掃描整個 SSTables (而不是讀取特定分區(qū))。如果我們做謂詞下推,還需要做更多的工作。
不支持以下CQL 類型:counter、frozen和用戶定義的類型。
varint s 最多只能存儲 8 個字節(jié)。嘗試讀取具有較大varint的表將崩潰。
解析器最多只能讀取 64 列的表。
解析器將每個 SSTable 加載到內(nèi)存中,因此當前無法處理超出機器內(nèi)存容量的大型 SSTable 。
Decimal S轉(zhuǎn)換成8字節(jié)浮點值,因為無論是C++還是箭頭都沒有對 Java BigIntege 或 BigDecimal 類的任意精度整數(shù)或小數(shù)點的本機支持。這意味著對十進制列的操作將使用浮點運算,這可能是不精確的。
Set 被視為列表,因為 Arrow 沒有集合的等效項。
路線圖和未來發(fā)展
該項目的最終目標是在 RAPIDS 生態(tài)系統(tǒng)中包含某種形式的讀表功能,類似于cudf.read_csv。性能也是一個不斷發(fā)展的領(lǐng)域,我目前正在研究如何進一步并行讀取 SSK 表,以充分利用 GPU 。我還致力于解決或改進前面提到的限制,特別是擴大對不同 CQL 類型的支持,并使程序能夠處理大型數(shù)據(jù)集。
如何使用sstable-to-arrow
您可以使用Docker運行sstable-to-arrow。

這將偵聽端口 9143 上的連接。它希望客戶端先發(fā)送消息,然后以以下格式發(fā)送數(shù)據(jù):
作為 8 字節(jié) big-endian 無符號整數(shù)傳輸?shù)募^表數(shù)
對于每個表:
其大?。ㄒ宰止?jié)為單位)為 8 字節(jié)大端無符號整數(shù)。
表的內(nèi)容采用箭頭 IPC 流格式。
然后,您可以使用任何客戶端從端口獲取數(shù)據(jù)。要開始使用示例 Python 客戶端,如果您的系統(tǒng)不支持 CUDA ,請執(zhí)行以下步驟:

如果您的系統(tǒng)支持 CUDA ,建議使用以下命令創(chuàng)建 conda 環(huán)境。在啟動sstable-to-arrow服務(wù)器之前,您還需要傳遞 -x 標志,以將所有不支持 cuDF 的類型轉(zhuǎn)換為十六進制字符串。

要使用其他數(shù)據(jù)集進行實驗,您需要在計算機上使用原始 SSTable 文件。您可以在這是谷歌硬盤文件夾下載物聯(lián)網(wǎng)數(shù)據(jù)示例。您還可以使用存儲庫中的generate-data腳本生成物聯(lián)網(wǎng)數(shù)據(jù),也可以使用 CQL 和 Cassandra Docker 映像手動創(chuàng)建表(有關(guān)更多信息,請參閱Cassandra 快速入門)。確保使用 Docker 卷與容器共享 SSTable 文件:

您還可以傳遞 -h 標志以獲取有關(guān)其他選項的信息。如果希望從源代碼構(gòu)建項目,請按照GitHub 存儲庫中的步驟進行操作。
SSTable to Parquet
Sstable-to-arrow還能夠?qū)?SSTable 數(shù)據(jù)保存為Parquet文件,這是存儲列數(shù)據(jù)的常用格式。同樣,它還不支持重復數(shù)據(jù)消除,因此它只需將 sstable 和所有元數(shù)據(jù)輸出到給定的拼花地板文件。
您可以通過傳遞-p標志,然后傳遞要存儲拼花地板文件的路徑來運行此操作:

結(jié)論
Sstable-to-arrow是利用 Cassandra 數(shù)據(jù)進行基于 GPU 的分析的早期但有希望的方法。該項目可在GitHub上獲得,并可通過碼頭中心作為 alpha 版本訪問。
關(guān)于作者
Alex Cai 于 2021 年在 DataStax 實習,是哈佛大學 2025 級的學生。他熱衷于計算機、軟件和認知科學,在業(yè)余時間,他喜歡閱讀、研究語言學和玩他的貓。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5464瀏覽量
108760 -
gpu
+關(guān)注
關(guān)注
28文章
5067瀏覽量
134134 -
計算機
+關(guān)注
關(guān)注
19文章
7742瀏覽量
92551
發(fā)布評論請先 登錄
如何將算得的數(shù)據(jù)(10進制)轉(zhuǎn)換為16進制通過串口發(fā)送出?
如何將秒數(shù)轉(zhuǎn)換為時間字符串?
如何將ADC代碼轉(zhuǎn)換為電壓
如何將excel格式的文件轉(zhuǎn)換為可以使用agilent intuilink波形編輯器查看的格式?
請教大神LSM6DSM是如何將寄存器數(shù)據(jù)轉(zhuǎn)換為C度的?
如何將PCM值轉(zhuǎn)換為.wav格式?
LM5066如何將數(shù)據(jù)轉(zhuǎn)換為負溫度?
如何將PROTEL格式的文件轉(zhuǎn)換為AUTOCAD格式并打印
數(shù)學原理:如何將ADC代碼轉(zhuǎn)換為電壓(第1篇)
cassandra數(shù)據(jù)庫存儲結(jié)構(gòu)_ cassandra數(shù)據(jù)庫數(shù)據(jù)的寫入,讀取和刪除
如何將Altera的SDC約束轉(zhuǎn)換為Xilinx XDC約束
深入RAPIDS了解處理Cassandra數(shù)據(jù)的方法
如何將簡單的汽車轉(zhuǎn)換為無線遙控汽車
如何bmp格式轉(zhuǎn)換為jpg格式

如何將Cassandra數(shù)據(jù)轉(zhuǎn)換為RAPIDS可用格式
評論