gpt4 book ai didi

amazon-web-services - 从 Google 的 dataproc 读取 S3 数据

转载 作者:行者123 更新时间:2023-12-02 20:58:42 26 4
gpt4 key购买 nike

我正在我创建的集群上通过 Google 的 dataproc 运行 pyspark 应用程序。在一个阶段,应用程序需要访问 Amazon S3 目录中的目录。在那个阶段,我收到错误:

AWS 访问 key ID 和 secret 访问 key 必须指定为 s3 URL 的用户名或密码(分别),或者通过设置 fs.s3.awsAccessKeyId 或 fs.s3.awsSecretAccessKey 属性(分别)。

我登录到集群的头节点,并使用我的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 信息设置/etc/boto.cfg,但这并没有解决访问问题。

(1) 关于如何从 dataproc 集群访问 AWS S3 还有其他建议吗?

(2) 另外,dataproc 用于访问集群的用户名是什么?如果我知道这一点,我可以在集群上为该用户设置 ~/.aws 目录。

谢谢。

最佳答案

由于您使用的是 Hadoop/Spark 接口(interface)(如 sc.textFile ),所以一切确实应该通过 fs.s3.* 完成。或fs.s3n.*fs.s3a.*键而不是尝试通过任何 ~/.aws 连接或/etc/boto.cfg设置。您可以通过几种方法将这些设置连接到您的 Dataproc 集群:

在集群创建时:

gcloud dataproc clusters create --properties \
core:fs.s3.awsAccessKeyId=<s3AccessKey>,core:fs.s3.awsSecretAccessKey=<s3SecretKey> \
--num-workers ...

core这里的前缀表示您希望将设置放在 core-site.xml 中文件,如 Cluster Properties documentation 中所述.

或者,在作业提交时,如果您使用 Dataproc 的 API:

gcloud dataproc jobs submit pyspark --cluster <your-cluster> \
--properties spark.hadoop.fs.s3.awsAccessKeyId=<s3AccessKey>,spark.hadoop.fs.s3.awsSecretAccessKey=<s3SecretKey> \
...

在本例中,我们将属性作为 Spark 属性传递,Spark 提供了一种方便的机制来将“hadoop”conf 属性定义为 Spark conf 的子集,只需使用 spark.hadoop.*字首。如果您通过 SSH 在命令行提交,则相当于:

spark-submit --conf spark.hadoop.fs.s3.awsAccessKeyId=<s3AccessKey> \
--conf spark.hadoop.fs.s3.awsSecretAccessKey=<s3SecretKey>

最后,如果您想在集群创建时进行设置,但又不想在 Dataproc 元数据中显式设置访问 key ,则可以选择使用 initialization action反而。有一个方便的工具,名为 bdconfig它应该出现在您可以轻松修改 XML 设置的路径中:

#!/bin/bash
# Create this shell script, name it something like init-aws.sh
bdconfig set_property \
--configuration_file /etc/hadoop/conf/core-site.xml \
--name 'fs.s3.awsAccessKeyId' \
--value '<s3AccessKey>' \
--clobber
bdconfig set_property \
--configuration_file /etc/hadoop/conf/core-site.xml \
--name 'fs.s3.awsSecretAccessKey' \
--value '<s3SecretKey>' \
--clobber

将其上传到某处的 GCS 存储桶,并在集群创建时使用它:

gsutil cp init-aws.sh gs://<your-bucket>/init-aws.sh
gcloud dataproc clustres create --initialization-actions \
gs://<your-bucket>/init-aws.sh

虽然 Dataproc 元数据确实像任何其他用户数据一样进行静态加密和严格保护,但使用 init 操作有助于防止无意中向站在屏幕后面的人员显示您的访问 key / secret ,例如在查看 Dataproc 集群属性时向站在屏幕后面的人显示。

关于amazon-web-services - 从 Google 的 dataproc 读取 S3 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39377635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com