【问题标题】:AWS EMR : setting hadoop credentials provider for S3 Bucket accessAWS EMR:为 S3 Bucket 访问设置 hadoop 凭证提供程序
【发布时间】:2020-09-05 05:37:07
【问题描述】:

我在 AWS 上设置了 Spark EMR 集群(Hadoop 2.8.5、Spark 2.4.4)。我有一个 s3 存储桶 url,它是访问凭据。设置集群并附加笔记本后,我可以使用 spark.read.parquet("s3n://...") 在使用以下命令设置 hadoop 配置后从存储桶中读取数据:

sc._jsc.hadoopConfiguration().set('fs.s3n.awsAccessKeyId', '...')
sc._jsc.hadoopConfiguration().set('fs.s3n.awsSecretAccessKey', '...')

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

$ 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>

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

问题:
但是,我无法使用 spark.read.parquet() 从 EMR 笔记本访问存储桶,它会引发访问被拒绝异常。我是做错了还是我在这里遗漏了一些中间步骤。我不想在我的 EMR 笔记本中对密钥进行硬编码。任何帮助将不胜感激。一个星期以来,我一直被这个问题困扰。
附言存储桶和集群位于不同的区域。但是,我也通过在与存储桶相同的位置创建集群来尝试相同的过程。问题依然存在。

【问题讨论】:

    标签: amazon-web-services hadoop amazon-s3 pyspark amazon-emr


    【解决方案1】:
    • 在 EMR 中访问 S3 数据应使用其连接器和s3:// URL;任何其他架构引用他们不支持的代码。
    • 您将获得部署 VM/容器时使用的 IAM 角色的访问权限。要访问特定存储桶,请选择正确的角色

    没有实际意义,但 s3n 连接器(已过时,不受支持)不支持 JCEKs 文件

    【讨论】:

    • IAM 角色目前仅分配给组织中的一个人,获取其他帐户的角色需要一些时间。如果没有角色,是否没有其他方法可以指定密钥并访问存储桶(无需在笔记本中硬编码)?
    • 恐怕对 EMR 了解不够。对于基于 Hadoop 3.3+ 的基于 ASF 的系统,您可以在客户端上创建会话/角色凭据并将其与您的作业一起提交
    猜你喜欢
    • 2018-05-07
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2015-07-09
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多