我已经在AWS上建立了一个星火EMR集群(Hadoop2.8.5,Spark2.4.4)。我有一个s3桶url,它是访问凭据。在设置了集群并附加了笔记本之后,我可以在使用以下方法设置hadoop配置之后,使用spark.read.parquet("s3n://...")从存储桶中读取数据:
sc._jsc.hadoopConfiguration().set('fs.s3n.awsAccessKeyId', '...')
sc._jsc.hadoopConfiguration().set('fs.s3n.awsSecretAccessKey', '...')但是,我在许多文档中看到,这是不推荐的,因为它将密钥存储在日志中。
因此,我正在尝试的是在HDFS文件系统中创建一个Hadoop凭证文件,然后在“核心站点”中添加一个EMR配置,以提供凭证文件路径。以下是我遵循的步骤:
$ 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>spark.hadoop.security.credential.provider.path”提供给spark.hadoop.security.credential.provider.path,并将配置应用到主和从配置。问题:
然而,我无法使用spark.read.parquet()从EMR笔记本中访问桶,它会抛出一个访问拒绝异常。是我做错了还是有什么中间的步骤我错过了这里。我不想硬编码的钥匙在我的电子病历笔记本。任何帮助都将不胜感激。从一个星期以来,我一直在处理这个问题。
桶和聚类在不同的区域。但是,我也尝试过在与存储桶相同的位置创建集群,从而尝试了相同的过程。这个问题仍然存在。
发布于 2020-05-20 09:56:00
EMR中的
s3:// URL一起使用;任何其他模式引用它们不支持的代码。这是没有意义的,但s3n连接器(过时的,不受支持的)不支持JCEK文件
https://stackoverflow.com/questions/61886239
复制相似问题