本文介绍如何通过Serverless Spark访问OSS数据源。您需要先配置访问OSS的权限,然后可以使用SQL的方式或者提交代码包(Python或者Jar包)的方式访问OSS。
操作步骤
启用OSS数据写入性能优化
当您使用自建HiveMetaStore或者DLA元数据服务访问OSS时,社区版Spark HiveClient的rename操作比较低效,DLA对此进行了优化。您只需要将参数spark.sql.hive.dla.metastoreV2.enable
设置为true
即可启用这项优化。示例如下:
{
"args": ["oss://${oss-buck-name}/data/test/test.csv"],
"name": "spark-oss-test",
"file": "oss://${oss-buck-name}/jars/test/spark-examples-0.0.1-SNAPSHOT.jar",
"className": "com.aliyun.spark.oss.WriteParquetFile",
"conf": {
"spark.driver.resourceSpec": "medium",
"spark.executor.resourceSpec": "medium",
"spark.executor.instances": 2,
"spark.dla.connectors": "oss",
"spark.sql.hive.dla.metastoreV2.enable": "true"
}
}
OSS Connector数据写入性能优化
OSS Connector数据写入性能优化功能是DLA Spark团队基于OSS分片上传功能,针对Spark写入数据到OSS过程中大量调用OSS API导致写入性能差的问题,实现的性能优化提升。在典型场景下,性能可提升1~3倍。
您需要启用DLA Spark内置的OSS connector,并开启性能优化开关,才能使用该功能。具体配置如下:
spark.dla.connectors = oss; //启用DLA Spark内置的OSS connector。
spark.hadoop.job.oss.fileoutputcommitter.enable = true; //开启性能优化开关。
说明
- 如果启用该性能优化功能,在作业被强制Kill等情况下,可能会产生一些没有被清理的文件碎片,占用您OSS的存储空间。建议对相关OSS Bucket设置碎片生命周期规则,对过期未合并的碎片自动进行清理,建议配置周期为3天以上。具体操作请参见设置生命周期规则。
- 该性能优化功能对RDD的
saveAsHadoop
前缀和saveAsNewAPIHadoop
前缀的方法不生效。
使用示例:
{
"args": ["oss://${oss-buck-name}/data/test/test.csv"],
"name": "spark-oss-test",
"file": "oss://${oss-buck-name}/jars/test/spark-examples-0.0.1-SNAPSHOT.jar",
"className": "com.aliyun.spark.oss.WriteParquetFile",
"conf": {
"spark.driver.resourceSpec": "medium",
"spark.executor.resourceSpec": "medium",
"spark.executor.instances": 2,
"spark.dla.connectors": "oss",
"spark.hadoop.job.oss.fileoutputcommitter.enable": true
}
}