【问题标题】:Accessing Data in S3 within EMR在 EMR 中访问 S3 中的数据
【发布时间】:2014-01-14 22:41:10
【问题描述】:
我有一个存储在 S3 中的大型文本文件,可以在多节点集群上使用“s3:///folder/folder/file”格式直接从 EMR(比如 PIG)中访问它。
我的问题是关于向数据节点传输数据的效率。我相信 S3 中的数据以类似于 HDFS 的方式存储在块中。
- 读取文件时,如何拆分并发送到各个数据节点?
- 数据节点的分配是否由 Master Node/Job Tracker 控制?
- 将文件复制到 HDFS 中然后访问它是否更有效?
【问题讨论】:
标签:
hadoop
amazon-s3
amazon-emr
emr
【解决方案1】:
通常在拆分时从 hdfs 和 s3 读取没有区别。 S3FileSystem 类(这是 s3 输入的存储类)将使用公共位置和偏移量来获取 s3 文件块(使用 HTTP 请求,包括位置,标头中的偏移量信息)。
更多细节,你可以查看hadoop版本中的代码。
是的,和HDFS过程一样。
这取决于工作流程。如果您阅读一次,多次查询,您可能希望将文件复制到 HDFS,这将受益于本地 I/O。否则,您可以只使用 s3 作为存储。 S3 更稳定,具有无限存储空间,尽管它可能比 HDFS 慢一点。 (我知道 Netflix 在很多情况下都使用 s3 作为 emr 存储,正如他们所说的那样工作得很好)
PS:S3DistCp可以帮助您在HDFS和S3之间进行快速复制。