在上一篇文章中,我談到了我們尋找將 SSTable 數(shù)據(jù)加載到 GPU 以進(jìn)行數(shù)據(jù)分析的最佳方法的過程。我們研究了將 Cassandra 數(shù)據(jù)轉(zhuǎn)換為RAPIDS可用格式的各種方法,并決定創(chuàng)建sstable to arrow ,一種自定義實(shí)現(xiàn),用于解析 sstable 并將其寫入 arrow 格式。在這篇文章中,我們將進(jìn)一步討論sstable-to-arrow,它的功能、局限性,以及如何在分析用例中使用它。
實(shí)施細(xì)節(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ā)送到任何客戶機(jī),在那里數(shù)據(jù)可以轉(zhuǎn)換為 cuDF 并可用于 GPU 分析。
當(dāng)前限制
SStable-to-arrow一次只能讀取一個(gè) SSTable 。要處理多個(gè) SSTable ,用戶必須為每個(gè) SSTable 配置 cuDF ,并使用 GPU 根據(jù)上次寫入 wins 語義合并它們。
sstable-to-arrow公開內(nèi)部卡桑德拉時(shí)間戳和墓碑標(biāo)記,以便可以在 cuDF 層進(jìn)行合并。
有些數(shù)據(jù),包括分區(qū)鍵和集群列的名稱,實(shí)際上無法從 SSTable 文件中推斷出來,因?yàn)樗鼈冃枰獙⒛J酱鎯?chǔ)在系統(tǒng)表中。
Cassandra 在刷新到 SSTables 之前將數(shù)據(jù)存儲(chǔ)在 memtables 和 commitlogs 中,因此僅使用sstable-to-arrow執(zhí)行的分析可能會(huì)過時(shí)/不實(shí)時(shí)。
目前,解析器只支持 Cassandra OSS 3 。 11 編寫的文件。
系統(tǒng)設(shè)置為掃描整個(gè) SSTables (而不是讀取特定分區(qū))。如果我們做謂詞下推,還需要做更多的工作。
不支持以下CQL 類型:counter、frozen和用戶定義的類型。
varint s 最多只能存儲(chǔ) 8 個(gè)字節(jié)。嘗試讀取具有較大varint的表將崩潰。
解析器最多只能讀取 64 列的表。
解析器將每個(gè) SSTable 加載到內(nèi)存中,因此當(dāng)前無法處理超出機(jī)器內(nèi)存容量的大型 SSTable 。
Decimal S轉(zhuǎn)換成8字節(jié)浮點(diǎn)值,因?yàn)闊o論是C++還是箭頭都沒有對 Java BigIntege 或 BigDecimal 類的任意精度整數(shù)或小數(shù)點(diǎn)的本機(jī)支持。這意味著對十進(jìn)制列的操作將使用浮點(diǎn)運(yùn)算,這可能是不精確的。
Set 被視為列表,因?yàn)?Arrow 沒有集合的等效項(xiàng)。
路線圖和未來發(fā)展
該項(xiàng)目的最終目標(biāo)是在 RAPIDS 生態(tài)系統(tǒng)中包含某種形式的讀表功能,類似于cudf.read_csv。性能也是一個(gè)不斷發(fā)展的領(lǐng)域,我目前正在研究如何進(jìn)一步并行讀取 SSK 表,以充分利用 GPU 。我還致力于解決或改進(jìn)前面提到的限制,特別是擴(kuò)大對不同 CQL 類型的支持,并使程序能夠處理大型數(shù)據(jù)集。
如何使用sstable-to-arrow
您可以使用Docker運(yùn)行sstable-to-arrow。
這將偵聽端口 9143 上的連接。它希望客戶端先發(fā)送消息,然后以以下格式發(fā)送數(shù)據(jù):
作為 8 字節(jié) big-endian 無符號整數(shù)傳輸?shù)募^表數(shù)
對于每個(gè)表:
其大小(以字節(jié)為單位)為 8 字節(jié)大端無符號整數(shù)。
表的內(nèi)容采用箭頭 IPC 流格式。
然后,您可以使用任何客戶端從端口獲取數(shù)據(jù)。要開始使用示例 Python 客戶端,如果您的系統(tǒng)不支持 CUDA ,請執(zhí)行以下步驟:
如果您的系統(tǒng)支持 CUDA ,建議使用以下命令創(chuàng)建 conda 環(huán)境。在啟動(dòng)sstable-to-arrow服務(wù)器之前,您還需要傳遞 -x 標(biāo)志,以將所有不支持 cuDF 的類型轉(zhuǎn)換為十六進(jìn)制字符串。
要使用其他數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),您需要在計(jì)算機(jī)上使用原始 SSTable 文件。您可以在這是谷歌硬盤文件夾下載物聯(lián)網(wǎng)數(shù)據(jù)示例。您還可以使用存儲(chǔ)庫中的generate-data腳本生成物聯(lián)網(wǎng)數(shù)據(jù),也可以使用 CQL 和 Cassandra Docker 映像手動(dòng)創(chuàng)建表(有關(guān)更多信息,請參閱Cassandra 快速入門)。確保使用 Docker 卷與容器共享 SSTable 文件:
您還可以傳遞 -h 標(biāo)志以獲取有關(guān)其他選項(xiàng)的信息。如果希望從源代碼構(gòu)建項(xiàng)目,請按照GitHub 存儲(chǔ)庫中的步驟進(jìn)行操作。
SSTable to Parquet
Sstable-to-arrow還能夠?qū)?SSTable 數(shù)據(jù)保存為Parquet文件,這是存儲(chǔ)列數(shù)據(jù)的常用格式。同樣,它還不支持重復(fù)數(shù)據(jù)消除,因此它只需將 sstable 和所有元數(shù)據(jù)輸出到給定的拼花地板文件。
您可以通過傳遞-p標(biāo)志,然后傳遞要存儲(chǔ)拼花地板文件的路徑來運(yùn)行此操作:
結(jié)論
Sstable-to-arrow是利用 Cassandra 數(shù)據(jù)進(jìn)行基于 GPU 的分析的早期但有希望的方法。該項(xiàng)目可在GitHub上獲得,并可通過碼頭中心作為 alpha 版本訪問。
關(guān)于作者
Alex Cai 于 2021 年在 DataStax 實(shí)習(xí),是哈佛大學(xué) 2025 級的學(xué)生。他熱衷于計(jì)算機(jī)、軟件和認(rèn)知科學(xué),在業(yè)余時(shí)間,他喜歡閱讀、研究語言學(xué)和玩他的貓。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5304瀏覽量
106312 -
gpu
+關(guān)注
關(guān)注
28文章
4937瀏覽量
131186 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7658瀏覽量
90728
發(fā)布評論請先 登錄
如何將算得的數(shù)據(jù)(10進(jìn)制)轉(zhuǎn)換為16進(jìn)制通過串口發(fā)送出?
如何將秒數(shù)轉(zhuǎn)換為時(shí)間字符串?
如何將ADC代碼轉(zhuǎn)換為電壓
如何將excel格式的文件轉(zhuǎn)換為可以使用agilent intuilink波形編輯器查看的格式?
請教大神LSM6DSM是如何將寄存器數(shù)據(jù)轉(zhuǎn)換為C度的?
如何將PCM值轉(zhuǎn)換為.wav格式?
LM5066如何將數(shù)據(jù)轉(zhuǎn)換為負(fù)溫度?
如何將PROTEL格式的文件轉(zhuǎn)換為AUTOCAD格式并打印
數(shù)學(xué)原理:如何將ADC代碼轉(zhuǎn)換為電壓(第1篇)
cassandra數(shù)據(jù)庫存儲(chǔ)結(jié)構(gòu)_ cassandra數(shù)據(jù)庫數(shù)據(jù)的寫入,讀取和刪除

如何將Altera的SDC約束轉(zhuǎn)換為Xilinx XDC約束
深入RAPIDS了解處理Cassandra數(shù)據(jù)的方法

如何將簡單的汽車轉(zhuǎn)換為無線遙控汽車

如何bmp格式轉(zhuǎn)換為jpg格式

評論