Spark访问OSS

本文为您介绍使用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"的错误。