跳到主要内容
公司博客上

选择S3而不是HDFS的5大原因

成本、弹性、可用性、持久性、性能和数据完整性
分享这篇文章

在Databricks,我们的工程师指导数以千计的组织定义他们的大数据和云战略。当将大数据工作负载迁移到云端时,最常被问到的问题之一是如何评估HDFS与云提供商提供的存储系统之间的差异,例如Amazon的S3微软的Azure Blob存储,谷歌的云存储.在这篇博文中,我们将分享为什么云存储是数据存储的最佳选择。

在本讨论中,我们以Amazon S3为例,但结论可以推广到其他云平台。bob体育客户端下载我们从以下维度比较S3和HDFS:

  1. 成本
  2. 弹性
  3. SLA(可用性和持久性)
  4. 每美元绩效
  5. 事务写入和数据完整性

成本

让我们考虑存储的总成本,这是存储成本和人力成本(维护它们)的组合。

首先,让我们估算每月存储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,我们的客户可以坐下来享受云存储性能连接器的优点,而不会牺牲数据完整性。

免费试用Databricks

相关的帖子

看到所有公司博客上的帖子