本文為您介紹使用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"的錯誤。