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

使用Spark读取S3文件时提供AWS_PROFILE

百里胜泫
2023-03-14

我希望我的Spark应用程序(Scala)能够读取S3文件

spark.read.parquet("s3://my-bucket-name/my-object-key")

在我的开发机器上,我可以使用awscli访问S3文件在~/. aws/config~/. aws/凭据中预先配置的配置文件,例如:

aws --profile my-profile s3 ls s3://my-bucket-name/my-object-key

但是当尝试从Spark读取这些文件时,使用作为env变量提供的aws_配置文件(aws_配置文件),我得到了以下错误:

DoesBucket存在于我的bucket名称中:com.amazonaws.AmazonClientException:BasicAWSCredentialsProvider环境变量CredentialsProvider SharedInstanceProfileCredentialsProvider:com.amazonaws.sdkClientxception:无法从服务endpoint加载凭据

还尝试将概要文件作为JVM选项提供(-Daws.profile=my profile),但没有成功。

谢谢你的阅读。

共有2个答案

魏硕
2023-03-14

如果在将fs.s3a.aws.credentials.provider设置为之后仍然出现问题com.amazonaws.auth.profile.并正确设置AWS_PROFILE,这可能是因为您正在使用不支持上述配置的Hadoop 2。

因此,我找到的唯一解决办法是升级到Hadoop 3。

查看本文和Hadoop文档了解更多信息。

汪博艺
2023-03-14

解决方案是提供spark属性:fs.s3a.aws.credentials.provider,将其设置为com.amazonaws.auth.profile.ProfileCredentialsProvider。如果我可以更改代码以构建Spark会话,则类似于:

SparkSession
    .builder()
    .config("fs.s3a.aws.credentials.provider","com.amazonaws.auth.profile.ProfileCredentialsProvider")
    .getOrCreate()

另一种方法是提供JVM选项-Dspark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.profile.ProfileCredentialsProvider
*注意前缀spark.hadoop

 类似资料:
  • 我在apache Spark中读取本地文件时出错。scala>val f=sc.textfile(“/home/cloudera/downloads/sample.txt”)

  • 问题内容: 我对此进行了一些讨论,但还不太了解正确的解决方案:我想将S3中的数百个文件加载到RDD中。这是我现在的做法: 在不使用实际的阅读客户端: 我从在Scala中针对相同问题看到的答案中“翻译”了一下。我认为也可以将整个路径列表传递给,但是我不确定哪种是最佳做法。 问题答案: 根本的问题是,在s3中列出对象的速度确实很慢,并且每当执行树遍历时,看起来像目录树的方式都会降低性能(就像路径的通配

  • 问题内容: 我在S3中有一个csv文件,我正在尝试读取标题行以获取大小(这些文件是由我们的用户创建的,因此它们几乎可以是任何大小)。有没有办法使用boto做到这一点?我以为也许我们可以使用python BufferedReader,但是我不知道如何从S3键打开流。任何建议都很好。谢谢! 问题答案: 看来boto具有可以执行此操作的功能。这是一些对我有用的代码: 调用会从对象返回下一个n个字节。 当

  • > 我运行spark shell,如下所示: spark-shell--jars.\spark-csv2.11-1.4.0.jar;.\commons-csv-1.2.jar(我不能直接下载这些依赖项,这就是我使用--jars的原因) 使用以下命令读取csv文件: 在执行第一个建议的解决方案后:

  • 因此,我一直在使用Python3.2和OpenPyXL的iterable工作簿,如这里的“优化阅读器”示例所示。 当我尝试使用此策略读取从简单文档中提取的一个或多个文件时,就会出现问题。zip存档(手动和通过python zipfile包)。当我调用我得到“A”和我得到1,当要求打印每个单元格的值时,如下所示: 它打印A1、A2、A3、A4、A5、A6和A7中的值,而不管文件实际有多大。文件本身没

  • 我有一个桶,里面有几个小的拼花文件,我想把它们合并成一个更大的文件。 要完成此任务,我想创建一个spark作业来消费并写入一个新文件。 知道怎么了吗?