最近就计算与存储分离的一套组合: 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读取数据的每个请求获取数据的大小。