本文为您介绍使用Spark访问OSS时需要的相关配置。
OSS Endpoint配置
调试时请使用OSS服务所在地域的外网Endpoint,提交集群需替换为VPC内网Endpoint。详情请参见访问域名和数据中心。
OSS访问方式配置
以AccessKey ID和AccessKey Secret方式访问OSS。
spark.hadoop.fs.oss.accessKeyId = xxxxxx spark.hadoop.fs.oss.accessKeySecret = xxxxxx spark.hadoop.fs.oss.endpoint = oss-xxxxxx-internal.aliyuncs.com
以StsToken的方式访问OSS。
以AccessKey ID和AccessKey Secret方式访问OSS,需要明文将AccessKey ID和AccessKey Secret写在配置中,存在一定的安全风险。因此建议您以StsToken的方式访问OSS。
单击一键授权,将当前云账号的OSS资源通过StsToken的方式授权给MaxCompute项目直接访问。
说明当MaxCompute的ProjectOwner为OSS云账号时,才可以执行一键授权。
获取roleArn。
登录RAM控制台。
在左侧导航栏上,选择身份管理 > 角色。
在角色页面,搜索AliyunODPSDefaultRole。
单击AliyunODPSDefaultRole,在基本信息区域获取ARN。格式为
acs:ram::xxxxxxxxxxxxxxx:role/aliyunodpsdefaultrole
。
在Spark配置中添加如下内容即可访问OSS资源。
# 此配置表明Spark是通过StsToken去访问OSS资源。 spark.hadoop.fs.oss.credentials.provider=org.apache.hadoop.fs.aliyun.oss.AliyunStsTokenCredentialsProvider # 此配置是一键授权后产生的一个roleArn。 spark.hadoop.fs.oss.ststoken.roleArn=acs:ram::xxxxxxxxxxxxxxx:role/aliyunodpsdefaultrole # 此配置是OSS资源对应的VPC访问Endpoint。 spark.hadoop.fs.oss.endpoint=oss-cn-hangzhou-internal.aliyuncs.com
网络白名单配置
默认情况下无需配置网络白名单即可访问OSS。
特殊情况下(例如用户的OSS Bucket为大流量类型),如果无法访问OSS,需要配置如下信息。
spark.hadoop.odps.cupid.trusted.services.access.list=[your_bucket_name].oss-xxxxxx-internal.aliyuncs.com
该配置在yarn-cluster模式使用,且该配置项必须放在配置文件或命令行提交参数中。
使用jindo-sdk访问OSS
在SparkConf中设置spark.hadoop.fs.AbstractFileSystem.oss.impl
及spark.hadoop.fs.oss.impl
,示例代码如下。
val conf = new SparkConf()
.setAppName("jindo-sdk-demo")
.set("spark.hadoop.fs.AbstractFileSystem.oss.impl", "com.aliyun.emr.fs.oss.OSS")
.set("spark.hadoop.fs.oss.impl", "com.aliyun.emr.fs.oss.JindoOssFileSystem")
必须设置spark.hadoop.fs.oss.impl
,否则会报"No FileSystem for scheme: oss"的错误。