全部產品
Search
文件中心

MaxCompute:Spark訪問OSS

更新時間:Feb 28, 2024

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

    1. 單擊一鍵授權,將當前雲帳號的OSS資源通過StsToken的方式授權給MaxCompute專案直接存取。

      說明

      當MaxCompute的ProjectOwner為OSS雲帳號時,才可以執行一鍵授權。

    2. 擷取roleArn。

      1. 登入RAM控制台

      2. 在左側導覽列上,選擇身份管理 > 角色

      3. 角色頁面,搜尋AliyunODPSDefaultRole。

      4. 單擊AliyunODPSDefaultRole,在基本資料地區擷取ARN。格式為acs:ram::xxxxxxxxxxxxxxx:role/aliyunodpsdefaultrole

    3. 在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.implspark.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"的錯誤。