我试图读取Spark的s3桶,直到今天Spark总是抱怨请求返回403
hadoopConf = spark_context._jsc.hadoopConfiguration()
hadoopConf.set("fs.s3a.access.key", "ACCESSKEY")
hadoopConf.set("fs.s3a.secret.key", "SECRETKEY")
hadoopConf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
logs = spark_context.textFile("s3a://mybucket/logs/*)
斯帕克说......无效的访问密钥[ACCESSKEY]
然而,与相同的ACCESSKEY和秘书处这是工作与AWS-cli
aws s3 ls mybucket/logs/
在python中,这是可行的
resource = boto3.resource("s3", region_name="us-east-1")
resource.Object("mybucket", "logs/text.py") \
.put(Body=open("text.py", "rb"),ContentType="text/x-py")
所以我的证书无效,问题肯定是Spark的问题。。
今天,我决定打开整个火花的“调试”日志,令我惊讶的是...Spark没有使用我提供的[秘书处],而是...添加一个随机的???
17/03/08 10:40:04调试请求:发送请求:HEADhttps://mybucket.s3.amazonaws.com/Headers:(授权: AWS ACCESSKEY:[RANDON-SECRET-KEY], User-Agent: AWS-sdk-java/1.7.4Mac_OS_X/10.11.6Java_HotSpot(TM)_64-Bit_Server_VM/25.65-b01/1.8.0_65,日期: 3月8日星期三2017 10:40:04GMT,内容类型:应用程序/x-ww-form-urlencoded; charset=utf-8,)
这就是为什么它仍然返回403!Spark没有使用我为fs提供的密钥。s3a。秘密而是发明一个随机的??
作为记录,我正在我的机器(OSX)上本地运行这个命令
spark-submit --packages com.amazonaws:aws-java-sdk-pom:1.11.98,org.apache.hadoop:hadoop-aws:2.7.3 test.py
有人能告诉我这件事吗?
这个随机密钥非常有趣。可能AWS SDK正在从操作系统环境获取密码。
在hadoop 2.8中,默认的AWS提供商链显示以下提供商列表:
BasicAWSCredentialsProvider EnvironmentVariableCredentialsProvider SharedInstanceProfileCredentialsProvider
秩序当然重要!在AWSCreentialProviderChain中,从提供该信息的第一个提供商获取第一个密钥。
if (credentials.getAWSAccessKeyId() != null &&
credentials.getAWSSecretKey() != null) {
log.debug("Loading credentials from " + provider.toString());
lastUsedProvider = provider;
return credentials;
}
请参阅"GrepCode for AWSCreentialProviderChain"中的代码。
我在使用配置文件凭据时也面临类似的问题。SDK正在忽略~/中的凭据。aws/credentials(作为良好实践,我建议您不要以任何方式在程序中存储凭据)。
我的解决方案。。。
将凭据提供程序设置为使用ProfileCreentialsProvider
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3.eu-central-1.amazonaws.com") # yes, I am using central eu server.
sc._jsc.hadoopConfiguration().set('fs.s3a.aws.credentials.provider', 'com.amazonaws.auth.profile.ProfileCredentialsProvider')
我遇到了类似的问题。使用有效AWS凭据的请求返回403禁止,但仅在某些计算机上。最终我发现那些特定机器上的系统时间落后了10分钟。同步系统时钟解决了这个问题。
希望这有帮助!
我的KMS CMK策略规定,只有我可以执行。 我的同事(在我的CMK上没有这些权限)可以... 打开SecretsManager的AWS控制台>>> 单击>>> 查看我的秘密值! 知道为什么吗? 技术细节: 我确认单击AWS SecretsManager控制台中的按钮确实执行了带有的API调用。 AWS说,只有在调用方在用于加密秘密的CMK上也有的情况下才会起作用(这是有道理的)。(请参阅http
我们在AWS环境中部署了完整的应用程序,我们发现AWS秘密管理器是存储数据库和其他一些组件的秘密的正确选择。
我有一个在AWS EC2机器上运行的HortonWorks集群,我想在上面运行一个使用spark streaming的spark工作,该工作将吞下tweet concernings《权力的游戏》。在尝试在集群上运行它之前,我确实在本地运行了它。代码正在工作,如下所示: 我的问题更确切地说是关于这段特定代码行: 17/07/24 11:53:42 INFO AppClient$ClientEndpo
我有一个秘密存储在使用Terraform模块部署的AWS秘密管理器中,该模块支持秘密循环。我没有访问那个模块的源代码,所以我不能修改它。我想使用Terraform禁用秘密旋转。我应该使用哪种资源?需要如下所示的所有3个参数,并且没有任何参数来禁用循环。属性接受1到365之间的值,因此传递0也不是一个选项。
问题内容: 有什么好的教程/起点可以建议我开发自己的Java库吗? (我现在正在考虑开发一个小型图形库。) 问题答案: 如何开发自己的Java库? 如您所知,Java库通常只是一个包含一些实用程序类的jar文件,目的是在比Java Platform API中的类更高的抽象层次上解决问题。因此,从技术上讲,您只需编写在库中发现有用的类,对其进行编译,将它们打包并编写一些好的文档。 有什么好的教程/起
Spark with Jupyter on AWS By Danny Luo A guide on how to set up Jupyter with Pyspark painlessly on AWS EC2 instances using the Flintrock tool, with native S3 I/O support. Scala support on Jupyter is c