EMR 如何处理用于输入和输出的 s3 存储桶?

How does EMR handle an s3 bucket for input and output?

我正在启动一个 EMR 集群,并且我已经创建了指定的存储桶 in the EMR docs,但是我应该如何上传数据并从中读取数据?在我的 spark 提交步骤中,我说脚本名称使用 s3://myclusterbucket/scripts/script.py 输出不会自动上传到 s3 吗?如何处理依赖关系?我尝试使用指向 s3 存储桶内的依赖项 zip 的 pyfiles,但不断返回 'file not found'

EMR 中的 MapReduce 或 Tez 作业可以直接访问 S3,因为 EMRFS(一种基于 S3 的 AWS 专有 Hadoop 文件系统实现),例如,在 Apache Pig 中你可以这样做 loaded_data = LOAD 's3://mybucket/myfile.txt' USING PigStorage();

不确定基于 Python 的 Spark 作业。但一种解决方案是先将对象从 S3 复制到 EMR HDFS,然后在那里进行处理。

复制有多种方式:

您也可以使用awscli(或hadoop fs -copyToLocal)将对象从S3复制到EMR主实例本地磁盘(反之亦然),例如aws s3 cp s3://mybucket/myobject .