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

Python EMR如何处理s3存储桶的输入和输出?,python,apache-spark,amazon-emr,Python,Apache Spark,Amazon Emr,我正在旋转一个EMR集群,我已经创建了指定的bucket,但是我应该如何上传数据并从中读取数据呢?在spark提交步骤中,我使用s3://myclusterbucket/scripts/script.py说脚本名是否输出并没有自动上传到s3?如何处理依赖关系?我曾尝试使用pyfiles指向s3存储桶中的依赖项zip,但不断返回“未找到文件”EMR中的MapReduce或Tez作业可以直接访问s3,因为EMRFS(基于s3的AWS专有Hadoop文件系统实现),例如,在Apache Pig中,您可

我正在旋转一个EMR集群,我已经创建了指定的bucket,但是我应该如何上传数据并从中读取数据呢?在spark提交步骤中,我使用
s3://myclusterbucket/scripts/script.py说脚本名是否输出并没有自动上传到s3?如何处理依赖关系?我曾尝试使用pyfiles指向s3存储桶中的依赖项zip,但不断返回“未找到文件”

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

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

有多种复制方法:

  • 使用
    hadoop fs
    命令将对象从S3复制到EMR HDFS(反之亦然),例如
    hadoop fs-cp S3://mybucket/myobjecthdfs://mypath_on_emr_hdfs

  • 使用s3 dist cp将对象从s3复制到EMR HDF(反之亦然)


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

您的问题非常笼统。读取数据的最佳方式取决于数据的大小以及您希望如何处理数据。还有,它是什么格式。将数据从S3移动到S3的最通用方法是使用aws命令行工具()。使用它,您可以使用类似于
aws s3 cp myfile.txt s3://mybucket/myfile.txt
的内容复制数据。至于输出,这取决于脚本写入的位置。OP的意思是AWS EMR支持运行spark submit作为一个步骤,并在完成时自动终止@那么我们如何使用
s3cp src dest
在完成时自动将输出移动到s3。我们如何指定输入s3文件夹。它会覆盖s3中的文件吗?最好不使用s3-dist-cp。目标是实现在s3文件夹中获取spark输出的一键式自动化。我想这个问题可以通过在
spark提交之前和之后添加
s3-dist-cp
作为步骤来解决。有人能详细说明他们是如何做到这一点的吗?