Jar*_*red 6 python amazon-s3 amazon-web-services pyspark
假设我这样做:
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())
Run Code Online (Sandbox Code Playgroud)
我知道,从理论上讲,我可以在'sc.textFile(...)'调用之前设置我的凭据:
sc._jsc.hadoopConfiguration().set('fs.s3a.access.key', 'awsKey')
sc._jsc.hadoopConfiguration().set('fs.s3a.secret.key', 'awsSecret')
Run Code Online (Sandbox Code Playgroud)
然而; 我没有密钥/密钥对,相反,我有一个密钥/密钥/令牌三元组(它们是通过AssumeRole定期刷新的临时凭证....有关获取这些凭据的详细信息,请参阅此处:https:// docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)
如何使用三元组对AWS S3进行身份验证,而不仅仅是密钥和密钥?
我的偏好是com.amazonaws.auth.profile.ProfileCredentialsProvider用作凭证提供者(并在〜/ .aws /凭证中使用密钥/秘密/令牌).我愿意在命令行或硬编码上提供它们.
如果我尝试这个(使用〜/ .aws /凭证中的凭据):
sc._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.profile.ProfileCredentialsProvider")
Run Code Online (Sandbox Code Playgroud)
我仍然得到这个:
py4j.protocol.Py4JJavaError: An error occurred while calling o37.partitions.
: com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain
Run Code Online (Sandbox Code Playgroud)
如何从〜/ .aws /凭证加载凭据或以其他方式使用SessionToken?
我com.amazonaws.auth.profile.ProfileCredentialsProvider在文档中没有看到。但是,org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider它允许您使用密钥和秘密以及fs.s3a.session.token令牌应该去的地方。
该页面上的说明说:
要使用这些进行身份验证:
- 声明
org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider为提供者。- 在属性中设置会话密钥
fs.s3a.session.token,并将访问和秘密密钥属性设置为该临时会话的那些。例子:
Run Code Online (Sandbox Code Playgroud)<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>
| 归档时间: |
|
| 查看次数: |
1454 次 |
| 最近记录: |