在大数据中,代码被推向数据以供执行。这是有道理的,因为数据很大并且执行代码相对较小。来到AWS EMR,数据可以是HDFS,也可以是S3。在S3的情况下,必须将数据拉到核心/任务节点以便从一些其他节点执行。与HDFS中的数据相比,这可能有点开销。
最近,我注意到当MR作业执行时,将日志文件导入S3的时间很长。有时,即使在作业完成后,日志文件也会花费几分钟时间显示。
有什么想法吗?是否有人使用HDFS与S3中的数据来完成MR作业完成的指标?
这在不同的层面上存在问题。
S3只具有最终的一致性。在写入过程被延迟之后,您的代码(例如close()
或flush()
)写入内容后,您不会立即看到/可以阅读。我认为这可能是由于为您编写的数据分配了免费资源。所以这不是性能问题,而是你真正想要/需要的一致性问题。
我该怎么做EMR?我启动了一个Hadoop集群,并将所有内容都放入了HDFS所需的工作。在S3上读取时间要贵得多,并且最终的一致性使得在作业之间缓冲项目基本无用。
但是,从HDFS备份文件或将其用于其他实例或服务(例如CloudFront)时,S3非常棒。
在性能方面,HDFS优于S3
如果您的需求是长期的,需要高性能并且您想要执行迭代机器学习算法,HDFS会更好
如果您的负载是可变的,需要高耐久性和持久性而成本较低,S3会更好。
欲了解更多信息,请访问此链接http://www.nithinkanil.com/2015/05/hdfs-vs-s3.html
如果要终止EMR集群,则必须使用S3,因为一旦终止集群,HDFS数据将被删除。