gpt4 book ai didi

python - 如何使用 AWS SessionToken 从 pyspark 中的 S3 读取数据?

转载 作者:太空狗 更新时间:2023-10-30 00:04:50 24 4
gpt4 key购买 nike

假设我这样做:

import os os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages "org.apache.hadoop:hadoop-aws:2.7.3" pyspark-shell' from pyspark import SparkConf from pyspark import SparkContext
from pyspark import SparkConf
from pyspark import SparkContext

conf = SparkConf() \
.setMaster("local[2]") \
.setAppName("pyspark-unittests") \
.set("spark.sql.parquet.compression.codec", "snappy")
sc = SparkContext(conf=conf)
s3File = sc.textFile("s3a://myrepo/test.csv")
print(s3File.count())
print(s3File.id())

我知道,理论上,我可以在“sc.textFile(...)”调用之前执行此操作以设置我的凭据:

sc._jsc.hadoopConfiguration().set('fs.s3a.access.key', 'awsKey')
sc._jsc.hadoopConfiguration().set('fs.s3a.secret.key', 'awsSecret')

但是;我没有 key / secret 对,相反,我有一个 key / secret / token 三元组(它们是临时凭证,通过 AssumeRole 定期刷新......有关获取这些凭证的详细信息,请参见此处:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)

我如何使用三元组向 AWS S3 进行身份验证,而不仅仅是 key 和 secret ?

我的偏好是使用 com.amazonaws.auth.profile.ProfileCredentialsProvider 作为凭证​​提供程序(并在 ~/.aws/credentials 中拥有 key / secret / token )。我愿意在命令行或硬编码中提供它们。

如果我尝试这个(在 ~/.aws/credentials 中使用我的凭据):

sc._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.profile.ProfileCredentialsProvider")

我还是明白了:

py4j.protocol.Py4JJavaError: An error occurred while calling o37.partitions.
: com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain

我如何从 ~/.aws/credentials 加载凭据或以其他方式使用 SessionToken?

最佳答案

我在 documentation 中没有看到 com.amazonaws.auth.profile.ProfileCredentialsProvider .但是,org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider 允许您将 key 和 secret 与 fs.s3a.session.token 一起使用,这是 token 应该放在哪里。

该页面上的说明说:

To authenticate with these:

  1. Declare org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider as the provider.
  2. Set the session key in the property fs.s3a.session.token, and the access and secret key properties to those of this temporary session.

Example:

<property>
<name>fs.s3a.aws.credentials.provider</name>
<value>org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider</value>
</property>

<property>
<name>fs.s3a.access.key</name>
<value>SESSION-ACCESS-KEY</value>
</property>

<property>
<name>fs.s3a.secret.key</name>
<value>SESSION-SECRET-KEY</value>
</property>

<property>
<name>fs.s3a.session.token</name>
<value>SECRET-SESSION-TOKEN</value>
</property>

关于python - 如何使用 AWS SessionToken 从 pyspark 中的 S3 读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50242843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com