最近就計算與存儲分離的一套組合: Spark + OSS的性能進行了調優,取得了一些數據,這裡記錄一下。我測試的工作負載如下:
這裡測試的具體的數據是一個Parquet格式保存的數據,每個數據文件10G左右。Spark集羣的配置是每個Executor4C16G, 幾十個Executor的一個集羣。
計算與存儲分離從架構上來說可以讓分工更進一步細化: 做計算引擎的專心做計算引擎,做存儲的專心做存儲;從用戶角度來說讓用戶可以避免Vendor Locked In, 把數據以公開的格式保存在對象存儲上, 用戶如果什麼時候想遷移到其它平臺,只要把數據複製走就好了。但是對性能調優也帶來了挑戰,原本緊密結合的計算和存儲被拆開,調優的時候需要通盤考慮。
OSS參數調優
計算跟存儲分離之後,很影響速度的一塊是從存儲拉取數據的速度,開源引擎(Spark, Presto) 在跟這些對象存儲(AWS S3, Aliyun OSS)打交道都是通過Hadoop File System的介面, Aliyun OSS也實現了HDFS的介面, 在它的官方文檔上暴露了一些可以進行調優的參數: https://hadoop.apache.org/docs/r3.2.0/hadoop-aliyun/tools/hadoop-aliyun/index.html 。
fs.oss.multipart.download.size
從Aliyun OSS讀取數據的每個請求獲取數據的大小。