我們如何實現高帶寬連接用BI工具嗎
2021年8月11日, 在工程的博客
商業智能(BI)工具,如畫麵和微軟權力BI是出了名的慢提取大型查詢結果與傳統的數據倉庫,因為他們通常在一個線程獲取數據通過SQL端點成為數據傳輸瓶頸。數據分析師可以連接他們的BI工具磚SQL端點查詢數據表通過ODBC / JDBC協議集成在我們辛巴司機。與雲取回,我們發布的磚8.3運行時,辛巴ODBC 2.6.17司機,我們引入一個新的機製來獲取數據並行通過AWS S3和Azure等雲存儲數據湖存儲數據更快的BI工具。在我們的實驗中使用雲取回,我們觀察到一個10 x加速由於並行提取性能。
動力和挑戰
BI工具在大型組織變得越來越受歡迎,因為它們提供大數據可視化數據分析師運行分析應用程序而隱藏查詢執行的複雜性。BI工具與SQL通信端點通過一個標準ODBC / JDBC協議執行查詢和提取結果。之前引入雲取回,磚采用類似的方法使用Apache火花™。在這種背景下,端到端提取性能通常是由時間單線程的SQL端點將結果返回給您的BI工具。
雲之前取回,如圖1所示的數據流是相當簡單的。BI工具連接到SQL端點支持的集群並行查詢執行在計算槽。查詢結果都是收集SQL端點,充當協調者節點之間的通信的客戶端和集群。為大量數據沒有達到SQL端點的資源限製,我們上啟用disk-spilling SQL端點,結果超過100 MB的存儲在一個本地磁盤。當所有結果收集和潛在disk-spilled, SQL端點準備結果返回給BI服務客戶請求它。服務器沒有返回整個數據,而是它切割成多個小塊。
我們確定了兩個主要的可伸縮性問題,使這個數據流效率低下,並把SQL端點的風險成為一個瓶頸時提取數百MB:
- 多租戶。有限的出口帶寬可能由多個用戶訪問同一個共享SQL端點。隨著並發用戶數量的增加,每個人將會提取數據和降解性能。
- 缺乏並行性。盡管集群並行執行查詢,從執行者收集查詢結果並返回給BI工具在單線程執行。雖然客戶端獲取結果順序幾MB的塊存儲和服務結果由一個線程瓶頸在SQL端點。
雲計算獲取架構
為了解決這些局限性,我們修改了數據提取架構以這樣一種方式,寫作和閱讀的結果是並行完成的。高層,每個查詢分為多個任務運行在所有可用的計算資源,這些任務寫作結果湖存儲Azure數據,AWS S3,或者穀歌雲存儲。SQL端點發送一個文件列表pre-signed url到客戶端,以便客戶機可以直接從雲存儲並行下載數據。
數據布局。查詢任務流程的各個分區輸入數據並生成箭頭序列化結果。Apache箭頭最近成為柱狀內存數據分析的實際標準,並已通過大量的開源項目。每個查詢任務寫數據雲存儲在20 MB的塊使用箭頭流格式。在每個文件中,可能有多個箭頭批次由一個固定的行數和字節。我們進一步應用LZ4壓縮的塊來解決用戶上傳抓取帶寬限製設置。
結果集合。而不是收集MBs或GBs的查詢結果,SQL端點現在存儲雲存儲的鏈接,這樣內存占用和disk-spilling開銷都顯著降低。我們的實驗表明,雲獲取提供超過2 x吞吐量提高查詢結果大小超過1 MB。然而,上傳結果小於1 MB到雲存儲很容易遭受不小延遲。因此,我們設計了一個混合的獲取機製,允許我們要麼內聯結果和避免延遲小查詢結果或上傳結果和提高吞吐量大查詢結果。我們確定了三種可能的場景當收集SQL端點的結果:
- 所有任務返回箭頭批次和他們的總大小是小於1 MB。這是一個很短的查詢對延遲敏感的和為獲取通過雲存儲並不理想。我們這些結果直接返回給客戶通過上述單線程機製。
- 所有任務返回箭頭批次和他們的總大小是高於1 MB或任務返回箭頭的批次和雲文件。在這種情況下我們剩下的箭頭批量上傳到雲存儲從SQL端點使用相同的數據布局任務和存儲的結果列表文件。
- 所有任務返回雲文件的鏈接。在這種情況下,我們的雲存儲鏈接內存並將它們返回給客戶機獲取請求。
獲取請求。SQL端點上的數據可用時,BI工具可以通過按順序開始抓取請求小塊。獲取請求時,SQL端點獲取文件對應於當前抵消並返回一組pre-signed url到客戶機。這樣的url是方便BI雲提供商的客戶,因為他們是不可知論者,可以使用一個基本的HTTP客戶端下載。並行BI工具下載返回的文件,解壓縮他們的內容,從箭批次提取單個行。
實驗結果。我們執行數據提取實驗合成數據集組成的400萬列和行總量為3.42 GB。啟用了雲取回我們觀察到12 x提高提取吞吐量相比,單線程的基線。
開始
要加快您的數據提取嗎?開始使用雲獲取下載並安裝最新的軟件ODBC驅動程序。SQL和互動中可用的特性是磚磚與磚集群部署運行時8.3或更高的Azure磚和亞馬遜。我們將雲獲取機製辛巴ODBC驅動程序的最新版本2.6.17 2.6.18和即將到來的辛巴JDBC驅動程序。