• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    人工智能/深度學習

    使用 GPU 分析 Cassandra 數據,第 2 部分

    編者按:觀看使用 GPU s 分析卡桑德拉數據研討會。

    在上一篇文章中,我談到了我們尋找將 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 類型counterfrozen和用戶定義的類型。
    • 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 版本訪問。

    我們將舉辦一個免費的在線研討會,將在 8 月中旬通過實際操作的例子深入到這個項目中!如果您感興趣,可以注冊here

    如果您有興趣嘗試sstable-to-arrow,,請查看本系列分為兩部分的第二篇博文,如果有任何反饋或問題,請隨時聯系seb@datastax.com

    ?

    0

    標簽

    人人超碰97caoporen国产