选择S3而不是HDFS的5大原因
在Databricks,我们的工程师指导数以千计的组织定义他们的大数据和云战略。当将大数据工作负载迁移到云端时,最常被问到的问题之一是如何评估HDFS与云提供商提供的存储系统之间的差异,例如Amazon的S3,微软的Azure Blob存储,谷歌的云存储.在这篇博文中,我们将分享为什么云存储是数据存储的最佳选择。
在本讨论中,我们以Amazon S3为例,但结论可以推广到其他云平台。bob体育客户端下载我们从以下维度比较S3和HDFS:
- 成本
- 弹性
- SLA(可用性和持久性)
- 每美元绩效
- 事务写入和数据完整性
成本
让我们考虑存储的总成本,这是存储成本和人力成本(维护它们)的组合。
首先,让我们估算每月存储1tb数据的成本。
截至2017年5月,S3的前1TB数据标准存储价格为23美元/月。注意,根据您的使用模式,S3列表和文件传输可能需要花钱。另一方面,使用不常访问存储的冷数据只需花费一半,每月12.5美元。为了便于讨论,让我们用23美元/月来估算成本。S3没有计算能力,但它确实让您可以自由地利用临时集群,并选择最适合工作负载的实例类型(例如,计算密集型),而不是简单地从存储角度考虑什么是最好的。
对于HDFS, EC2上最具成本效益的存储实例是d2系列。为了慷慨地解决HDFS的最佳情况,我们使用以下假设,这些假设在实践中几乎不可能实现:
- 一个预测未来的水晶球,可以提前三年完美地预测存储需求,因此我们可以使用3年预留实例来使用最大折扣。
- 工作负载稳定,峰值与低谷之比为1.0。这意味着我们的存储系统根本不需要弹性。
- 存储利用率为70%,HDFS标准复制因子设置为3。
根据上述假设,使用d2.8xl实例类型(5.52美元/小时,71%的折扣,48TB硬盘)的成本5.52 x 0.29 x 24 x 30 / 48 x 3/ 0.7 = 103美元/月1TB的数据。(注意,使用保留实例,可以在d2系列上实现更低的价格。)
单就存储成本而言,S3比HDFS便宜5倍。
根据我们管理pb级数据的经验,S3的人力成本几乎为零,而维护HDFS通常需要一个Hadoop工程师团队或供应商支持。一旦我们考虑到人力成本,S3比HDFS便宜10倍EC2上具有相当容量的集群。
弹性
容量规划很难正确,很少有组织能够准确地预先估计他们的资源需求。在预置环境中,这要么导致在事后提供更多资源时的巨大痛苦,要么导致由于预先过度供应而导致的低利用率造成的巨大浪费。
S3(或云存储)最大的好处之一是它的弹性和现收现付的定价模式:您只需要按您输入的内容收费,如果您需要输入更多的数据,只需将它们转储到那里。在底层,云提供商根据需要自动提供资源。
简单地说,S3是弹性的,HDFS不是。
SLA(可用性和持久性)
根据我们的经验,S3的可用性非常好。在过去的六年中,我们只经历过两次S3宕机,但我们从未经历过S3的数据丢失。
亚马逊宣称99.999999999%的持久性和99.99%的可用性。请注意,这高于绝大多数组织的内部服务。亚马逊的官方SLA可以在这里找到:服务等级协议- Amazon Simple Storage Service (S3).
相比之下,对于HDFS,很难估计可用性和持久性。理论上可以根据EC2的平均故障间隔时间(MTTF)加上升级和维护停机时间来计算这两个SLA属性。实际上,这些数字很难量化。我们对客户的理解是,大多数Hadoop集群可用性低于99.9%,即每年至少有9小时的停机时间。
通过跨az复制,可以自动在不同的数据中心进行复制,S3的可用性和持久性远远优于HDFS。
每美元表现
S3的主要问题是消费者不再具有数据局部性,所有读取都需要通过网络传输数据,S3性能调优本身就是一个黑箱。
当使用HDFS并获得完美的数据局域性时,在某些实例类型上可以获得~3GB/节点的本地读吞吐量(例如i2.8xl,大约每核90MB/s)。DBIO,我们的云I/O优化模块,提供优化的S3连接器,并可以在i2.8xl上维持~600MB/s的读吞吐量(大约每个核20MB/s)。
也就是说,在每个节点上,HDFS可以产生比S3高6倍的读吞吐量。因此,考虑到S3比HDFS便宜10倍,我们发现S3在每美元的性能上几乎是HDFS的2倍。
但是,使用S3的一大好处是我们可以将存储与计算分开,因此,我们可以在更短的时间内启动一个更大的集群来提高吞吐量,达到允许的物理限制。这种计算和存储的分离也允许不同的火花的应用程序(例如数据工程ETL作业和临时数据科学模型训练集群)在它们自己的集群上运行,从而防止影响多用户固定大小Hadoop集群的并发问题。这种分离(以及灵活地容纳不同的工作负载)不仅降低了成本,而且改善了用户体验。
HDFS相对于S3的一个优势是元数据性能:针对HDFS namenode列出数千个文件相对较快,但对于S3可能需要很长时间。然而,可伸缩的分区处理特性我们在Apache Spark 2.1中实现的,通过S3中的元数据性能缓解了这个问题。
请继续关注在不久的将来DBIO将完全消除此问题的公告。
事务性写入和数据完整性
大多数大数据系统(如Spark、Hive)都依赖于HDFS的原子重命名特性来支持原子写:也就是说,读取器以“全有或全无”的方式观察作业的输出。这对于数据完整性很重要,因为当作业失败时,不应该写出任何破坏数据集的部分数据。
S3缺乏原子目录重命名一直是保证数据完整性的一个关键问题。这导致了复杂的应用程序逻辑,以保证数据的完整性,例如,永远不要追加到现有的数据分区。
今天,我们很高兴地宣布在我们的DBIO构件中支持事务写入,该构件具有到S3(以及未来的其他云存储系统)的高性能连接器,并支持数据完整性的事务写入。更多信息请参见这篇博客文章.
其他运营关注事项
到目前为止,我们已经讨论了持久性、性能和成本考虑因素,但在其他几个领域,像S3这样的系统比HDFS具有更低的运营成本和更强的易用性:
- 加密、访问控制和审计:S3支持多种加密类型,具有AWS和客户管理的密钥,并具有易于配置的审计日志记录和访问控制功能。这些特性可以很容易地满足法规遵从性需求,例如PCI或HIPAA合规.
- 备份和灾难恢复:S3的选择版本控制功能自动维护修改或删除文件的备份,方便从意外数据删除中恢复。区域复制可以用来增强S3已经强大的可用性保证,以承受AWS区域的完全中断。
- 数据生命周期管理:S3可以配置为在可配置的时间段后自动将对象迁移到冷存储。在许多组织中,当数据是新数据时频繁读取,而随着时间的推移读取的频率明显降低。S3的生命周期管理策略可以自动执行旧对象迁移到Infrequent Access存储以节省成本,或迁移到Glacier以实现更大的成本节约;后者对于法规遵从性要求长期存储数据的组织非常有用。
在HDFS上支持这些额外的需求需要系统管理员做更多的工作,并进一步增加操作成本和复杂性。
结论
在这篇博文中,我们以S3为例来比较云存储和HDFS:
S3 | HDFS | S3 vs HDFS | |
---|---|---|---|
弹性 | 是的 | 没有 | S3更有弹性 |
成本/结核/月 | 23美元 | 206美元 | 10倍 |
可用性 | 99.99% | 99.9%(估计) | 10倍 |
耐用性 | 99.999999999% | 99.9999%(估计) | 10 x + |
事务性写 | 是的,用DBIO | 是的 | 类似的 |
总之,S3和云存储提供了弹性,可用性和持久性提高了一个数量级,性能提高了2倍,成本比传统HDFS数据存储集群低10倍。
Hadoop和HDFS通过降低存储和分发大量数据的成本,实现了大数据存储的商品化。然而,在云原生架构中,HDFS的好处是最小的,不值得操作的复杂性。这就是为什么许多组织不在云中操作HDFS,而是使用S3作为存储后端。
有了Databricks的DBIO,我们的客户可以坐下来享受云存储性能连接器的优点,而不会牺牲数据完整性。