很多使用者使用DLA對存儲在OSS上的資料的進行分析。并且,由于OSS極低的存儲成本,也有很多使用者也會選擇通過SLS日志投遞、DLA一鍵建倉等功能把其他資料源的資料轉儲到OSS進行分析。然而,由于OSS按照調用次數收費,在分析OSS資料時,因OSS接口調用而産生的成本往往會成為成本中較為顯著的一個部分。

優化思路
在此之前,DLA通路OSS資料是通過開源的
AliyunOSSFileSystem來進行讀寫的。我們對AliyunOSSFileSystem内部機制進行了分析,發現AliyunOSSFileSystem在進行資料讀取時,會以每次512KB為機關(可配置,為描述友善,這裡以預設配置為例)調用OSS API進行讀取,如果讀取的資料範圍超出了512KB,就會新發起一次請求,這樣就會導緻使用AliyunOSSFileSystem讀取OSS檔案時,調用次數非常多,産生了很多不必要的成本。
我們認為,理想情況下讀取OSS檔案的方式應該是這樣的:
- 一次請求會盡量多的讀取需要的内容。例如如果是從頭到尾順序讀一個大檔案,應該隻會産生一次OSS調用。
- 如果讀取過程中有大的跳轉(seek)操作,需要重新進行一次OSS調用。這是由OSS的接口設計決定的,OSS使用HTTP接口,我們隻能在發起請求的時候決定這次讀取的開始位置,是以如果不重新進行調用,就隻能把這次跳轉中間的資料全部讀一遍并忽略,這樣雖然調用次數少了,但是seek的延時變大了。
-
反過來說,小的跳轉則可以不用重新調用,因為讀取少量位元組并忽略顯然比重新發起一次HTTP請求的延時要小。
這個思路可以用下圖來示意:
當然,具體實作起來還有一些細節的點需要考慮,例如每次讀取的範圍應該設定多少;再例如,按需讀取意味着HTTP連接配接的存活時間比較長,如何對連接配接的生命周期進行管理等。
最終,我們按照這個思路對AliyunOSSFileSystem做了優化,經過測試,優化達到了我們最初期望的效果。
測試結果
測試選擇了Text/ORC/Parquet三種常用的檔案格式,統計他們在TPCH查詢場景下的調用次數,分别測試了1GB和10GB資料量下的優化效果。測試結果如下:
從這個測試結果可以看出,在Text檔案格式上面,優化後的調用次數隻有優化前的1/10,ORC/Parquet的優化效果沒有這麼誇張,但是也隻有優化前的1/3左右。這就是說,調用次數帶來的成本會有60%~90%的下降。
為什麼Text格式的優化效果這麼明顯呢?結合前面的優化思路介紹,由于Text檔案格式簡單,以順序讀為主,是以理論上讀一個Text檔案需要的最小OSS調用次數就是任務的split個數。而在優化前,由于社群AliyunFileSystem的預讀邏輯,調用次數不會小于 檔案大小/512KB。實際上,我們從執行計劃看到的split個數,以及檔案的大小計算得到的調用次數和測試結果基本是吻合的。而對列存格式來說,由于檔案格式決定了要讀取資料除了順序讀之外還會有跳轉,是以優化效果不如Text明顯。
更進一步,我們未來可以再對列存的索引等内容加入一些緩存的邏輯,甚至把經常讀取的資料塊也放在緩存中,這樣就能進一步降低OSS的調用次數,對查詢性能也有一定幫助。
目前,這個優化已經在華東1釋出,該區域的DLA使用者可以關注一下您的OSS成本變化。其他Region也會在近期陸續釋出。
關于我們
資料湖分析Data Lake Analytics簡介
歡迎大家使用資料湖分析(DLA),DLA不僅僅便宜,且快,且友善,專為阿裡雲資料湖分析方案而生
- 支援自建、托管RDS、NoSQL、OSS(JSON、CSV、Parquet等格式)多種資料源分析
- 支援按量 按照掃描量 的計費方式,準入門檻0元,提供的Serverless的彈性服務為按需收費,不需要購買固定的資源,完全契合業務潮汐帶來的資源波動,滿足彈性的分析需求,同時極大地降低了運維成本和使用成本
- 平台底層托管大叢集且自動彈性,在一定資料量情況下,分析性能比自建小叢集高出400%
- 支援一鍵 把 MySQL、PG、SqlServer、PolarDb資料庫 拖到DLA,再分析,解決原MySQL不敢分析的問題。 DLA 分析性能TPC-H 10G情況 比原MySQL 8c16g 等高出10倍,資料量越大,MySQL性能越差,在1TB資料量下,原MySQL基本跑不出來
- 産品文檔: https://www.aliyun.com/product/datalakeanalytics
- 幫助文檔: https://help.aliyun.com/document_detail/70378.html
- MySQL&PG&SqlServer一鍵同步資料到DLA: https://help.aliyun.com/document_detail/126559.html
- 新客戶1元試用: https://common-buy.aliyun.com/?commodityCode=openanalytics_post