当前位置: 首页 > 知识库问答 >
问题:

403使用Spark访问s3a时出错

袁波
2023-03-14

问题:

能够使用AWS CLI和Boto3成功下载文件。但是,在使用Hadoop/Spark的S3A连接器时,收到以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o24.parquet.
: com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 403, AWS Service: Amazon S3, AWS Request ID: BCFFD14CB2939D68, AWS Error Code: null, AWS Error Message: Forbidden, S3 Extended Request ID: MfT8J6ZPlJccgHBXX+tX1fpX47V7dWCP3Dq+W9+IBUfUhsD4Nx+DcyqsbgbKsPn8NZzjc2U

配置:在本地计算机上运行此配置

>

  • Spark版本2.4.4

    Hadoop版本2.7

    贾尔斯补充道:

    >

  • Hadoop-aws-2.7.3.jar

    aws-java-sdk-1.7.4.jar

    Hadoop配置:

    hadoop_conf.set("fs.s3a.access.key", access_key)
    hadoop_conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
    hadoop_conf.set("fs.s3a.secret.key", secret_key)
    hadoop_conf.set("fs.s3a.aws.credentials.provider","org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider")
    hadoop_conf.set("fs.s3a.session.token", session_key)
    hadoop_conf.set("fs.s3a.endpoint", "s3-us-west-2.amazonaws.com") # yes, I am using central eu server.
    hadoop_conf.set("com.amazonaws.services.s3.enableV4", "true")
    

    读取文件的代码:

    from pyspark import SparkConf, SparkContext, SQLContext
    sc = SparkContext.getOrCreate()
    hadoop_conf=sc._jsc.hadoopConfiguration()
    sqlContext = SQLContext(sc)
    df = sqlContext.read.parquet(path)
    print(df.head())
    
  • 共有1个答案

    章兴发
    2023-03-14

    将AWS凭据提供程序设置为配置凭据:

    hadoopConf.set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.profile.ProfileCredentialsProvider")
    
     类似资料:
    • 我在node.js中通过以下路径生成访问令牌 https://login.microsoftonline.com/{租户-ID}/oauth2/v2.0/token 之后,我得到access_token,但没有范围参数。 当我尝试点击添加了授权标头的 https://graph.microsoft.com/v1.0/users?$filter=startswith(给定名称,“J”)网址时,我得到

    • 我正在编写一个UDAF,应用于Vector(spark.ml.linalg.Vector)类型的Spark数据帧列。我依赖spark.ml.linalg包,这样我就不必在数据帧和RDD之间来回穿梭。 在UDAF内部,我必须为输入、缓冲和输出模式指定数据类型: VectorUDT是我在spark.mllib.linalg.Vector中使用的:https://github . com/Apache/

    • 我一直在我的项目中使用基于azure定时器的功能。自从我开始使用该功能以来,我收到了与Azure存储帐户禁止访问相关的错误403。 我尝试在函数的配置中添加AzureWebJobs存储密钥我尝试添加azure存储帐户的允许ip范围的出站ip我尝试检查允许azure托管服务进入存储帐户的选项。 然而,我的函数应用程序中的特定计时器函数仍然存在错误。其他功能运行正常。 尽管如此,如果我允许存储帐户防火

    • 问题内容: 我有一个应该将文件发送到Web服务的程序,该程序需要SSL连接。我运行程序如下: 这很好,但是当我将第一行更改为 我收到以下错误: 因此,似乎该问题与我正在使用的JRE有关,但似乎没有意义的是非IBM JRE可以正常工作,而IBM JRE则不能。有什么想法或建议吗? 问题答案: 如果您的非IBM jre是sun,那么它已经附带了SSL类实现。 看来IBM jre根本不包含SSL实现类。

    • 我遇到的解决方案是配置s3a提交器。 如何在本地Spark中配置S3a提交器?还有其他的解决方案吗?

    • 我正在尝试使用播放器模块访问android摄像头,但我遇到了以下错误,我不知道如何解决它。 这是我的密码。 我的建筑工人。规格: 有办法解决吗?