【问题标题】:How to authenticate and authorize Spark+Scala App to Cloud Object Storage?如何对云对象存储进行身份验证和授权 Spark+Scala 应用程序?
【发布时间】:2017-10-22 11:47:22
【问题描述】:

我正在尝试使用 spark-submit.sh 在 Bluemix 上运行 Spark+Scala 应用程序。到目前为止,基于documentationsourcecode我想出了以下sn-p:

val spark: SparkSession = SparkSession
  .builder
  .appName("app")
  .config("spark.hadoop.fs.cos.softlayer.endpoint",
          "s3-api.us-geo.objectstorage.service.networklayer.com")
  .config("spark.hadoop.fs.cos.softlayer.access.key",
          "auto-generated-apikey-<redacted>")
  .config("spark.hadoop.fs.cos.softlayer.secret.key",
          "<redacted>")
  .getOrCreate()
spark.sparkContext.setLogLevel("TRACE")
spark.sparkContext.textFile("s3d://<bucket>.softlayer/<file>")

失败了

Exception in thread "Driver" java.lang.NullPointerException
        at com.ibm.stocator.fs.common.ObjectStoreGlobber.glob(ObjectStoreGlobber.java:179)
        at com.ibm.stocator.fs.ObjectStoreFileSystem.globStatus(ObjectStoreFileSystem.java:443)
        at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:259)

由于

DEBUG apache.http.headers: http-outgoing-0 << HTTP/1.1 403 Forbidden

我相信 403 的意思是“身份验证成功,但授权失败”,但即使我将凭据更改为随机的,我仍然会得到 403。

我将我的服务帐户配置为所有“云对象存储”资源的阅读器。

我在python 中使用相同的凭据。

我错过了什么?

【问题讨论】:

    标签: scala apache-spark ibm-cloud object-storage


    【解决方案1】:

    不幸的是,AE 测试版的当前文档引用了IaaS version of COS,它使用 AWS 样式 (HMAC) 凭证而不是 IBM Cloud IAM 提供的 API 密钥进行身份验证。支持 IAM 的 COS 中的 HMAC 凭证支持将于今年晚些时候推出。

    AE 文档应该很快会更新,其中包含使用 API 密钥连接 COS 的示例。同时,请尝试以下配置语法:

    .config("spark.hadoop.fs.cos.iamservice.iam.endpoint",
              "https://iam.ng.bluemix.net/oidc/token")   
    .config("spark.hadoop.fs.cos.iamservice.endpoint",
              "s3-api.us-geo.objectstorage.service.networklayer.com")
    .config("spark.hadoop.fs.cos.iamservice.iam.api.key",
              "<api-key>")
    .config("spark.hadoop.fs.cos.iamservice.iam.service.id",
              "<resource-instance-id>")
    

    【讨论】:

    • 除了更改配置键之外,我还将 URL 更改为 s3d://.iamservice/ 并且它起作用了。谢谢!
    • spark.hadoop.fs.cos.iamservice.iam.service.id 指的是什么服务? IAM 服务?如何获取此服务的 ID?
    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    相关资源
    最近更新 更多