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