Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS EMR:为S3 Bucket访问设置hadoop凭据提供程序_Amazon Web Services_Hadoop_Amazon S3_Pyspark_Amazon Emr - Fatal编程技术网

Amazon web services AWS EMR:为S3 Bucket访问设置hadoop凭据提供程序

Amazon web services AWS EMR:为S3 Bucket访问设置hadoop凭据提供程序,amazon-web-services,hadoop,amazon-s3,pyspark,amazon-emr,Amazon Web Services,Hadoop,Amazon S3,Pyspark,Amazon Emr,我已经在AWS Hadoop 2.8.5和Spark 2.4.4上建立了Spark EMR集群。我有一个s3 bucket url和它的访问凭据。设置集群并连接笔记本后,我可以使用spark.read.parquets3n://。。。使用以下命令设置hadoop配置后: 然而,我在许多文档中读到,不建议这样做,因为它将密钥存储在日志中。 因此,我试图在HDFS文件系统中创建一个Hadoop凭据文件,然后在“核心站点”中添加一个EMR配置,以提供凭据文件路径。以下是我遵循的步骤: 1.创建了EMR

我已经在AWS Hadoop 2.8.5和Spark 2.4.4上建立了Spark EMR集群。我有一个s3 bucket url和它的访问凭据。设置集群并连接笔记本后,我可以使用spark.read.parquets3n://。。。使用以下命令设置hadoop配置后:

然而,我在许多文档中读到,不建议这样做,因为它将密钥存储在日志中。 因此,我试图在HDFS文件系统中创建一个Hadoop凭据文件,然后在“核心站点”中添加一个EMR配置,以提供凭据文件路径。以下是我遵循的步骤: 1.创建了EMR集群 2.通过Putty.exe使用SSH,我创建了hadoop凭据文件:

三,。我从管理控制台在“核心站点”分类下向实例概要文件添加了一个配置,并提供了路径jceks://hdfs/path_to_hdfs_file 到spark.hadoop.security.credential.provider.path并将配置应用到主设备和从设备

问题是: 但是,我无法使用spark.read.parquet从EMR笔记本访问桶,它抛出了一个访问被拒绝的异常。我做错了吗?或者我在这里遗漏了一些中间步骤。我不想硬编码我的电子病历笔记本中的钥匙。我们将非常感谢您的帮助。一周以来我一直在处理这个问题。 另外,铲斗和集群位于不同的区域。但是,我也尝试了同样的过程,在与bucket相同的位置创建集群。这个问题仍然存在

访问EMR中的S3数据应使用连接器和S3://URL;它们不支持的任何其他模式引用代码。 您可以访问部署VM/容器时使用的IAM角色。要访问特定的bucket,请选择正确的角色
这是没有意义的,但是s3n连接器过时了,不受支持,不支持JCEKs文件

IAM角色目前只分配给组织中的一个人,获取其他帐户的角色需要一些时间。如果没有角色,没有其他方法来指定密钥和访问bucket而不在笔记本中硬编码吗?恐怕对EMR了解不够。对于基于Hadoop 3.3+的基于ASF的系统,您可以在客户端上创建会话/角色凭据,并将其与作业一起提交
sc._jsc.hadoopConfiguration().set('fs.s3n.awsAccessKeyId', '...')
sc._jsc.hadoopConfiguration().set('fs.s3n.awsSecretAccessKey', '...')
$ hadoop credential create fs.s3a.access.key -provider jceks://hdfs/<path_to_hdfs_file> -value <aws_access_id>
$ hadoop credential create fs.s3a.secret.key -provider jceks://hdfs/<path_to_hdfs_file> -value <aws_secret_key>