Ken 和 Ryu 既是最好的朋友也是《街头霸王》系列游戏的最大竞争对手。当Hadoop数据存储在云上的问题出现时,HDFS(Hadoop Distributed File System )和S3(Amazon’s Simple Storage Service)的竞争就开始了。
虽然Apache Hadoop以前都是使用HDFS的,但是当Hadoop的文件系统的需求产生时候也能使用S3。Netflix的 Hadoop data warehouse 利用这个特性把数据存储在S3上而不是HDFS上。为什么 Netflix 选择这种数据体系? 为了了解他们的动机让我们来看看HDFS和S3是怎么做的吧,战斗开始!
Round 1 - 扩展性(Scalability)
HDFS 依赖本地的存储只能横向扩展. 增加一个存储区域就意味着不仅要加一个更大的硬盘驱动器来扩充节点,并且还要在集群上面加更多的机器。这是可行的,但是相比S3花费更多并且更加复杂。
S3 能根据存储的数据自动地扩展,根本不需要改变任何东西。甚至可用的空间是几乎无限的(至少对Amazon没有限制)。
First round goes to S3
Round 2 - 高持久性(Durability)
对HDFS数据持久性的统计模型表明,在一个很大的4000个节点的集群(16PB的总存储
250,736,598个block副本)上面,丢失一个block的数据(默认是64MB)的概率是24小时内
5.7x10-7,365天内是2.1 x10-4。然而,对于仅仅只含有几十个实例的大多数集群来说,丢失数据的概率要高得多。
S3为每个对象提供99.999999999%的年持久性,意味着每10,000,000年每10,000个对象中只有一个会丢失。(详情见 S3 FAQ). 它甚至可以更好,差不多一年半以前我的一个在Xplenty的大学同学在Amazon使用了AWS workshop.他们的代表声称,在默认的S3存储上(一个便宜的选择是RRS,只有99.99%的持久性)他们实际上没有丢失一个对象。
大集群拥有优异的持久性,但是在大多数情况下S3比HDFS更耐用。
S3 wins again
Round 3 - 保留(Persistence)
当停止EC2和EMR实例时,数据不会保留。尽管如此,昂贵的EBS卷能够用来把数据保留在EC2上。
在S3上数据始终存在。
S3 wins
Round 4 - 价格(Price)
为了确保数据的完整性,HDFS默认存储数据的每个块的三个副本。这意味着需要的HDFS存储空间是实际数据的3倍,并花费相应的成本。虽然数据复制不是必须的,只是存储一个拷贝将消除HDFS的耐久性,并可能导致数据丢失。
亚马逊照顾备份数据S3上的,所以该空间的100%是可用的并且只花费相应的价钱。 S3还支持存储压缩文件,这大大减少了所需以及该法案的空间。
Winner - S3
Round 5 - 表现(Performance)
HDFS的表现是非常棒的。数据被存储和运行在提高存取和处理速度相同的机器上面。
不幸的是S3还比不上HDFS。等待时间是明显更高和数据吞吐量较低。然而,Hadoop作业通常是由chains的mapreduce作业和中间数据存储到HDFS和本地文件系统比读写亚马逊S3你能够得到的节点的本地磁盘的吞吐量。
我们最近进行了一些测试,TestDFSIO,一个hadoop的读/写测试程序,在一个有m1.xlarge实例,每个节点有四个短暂的磁盘设备集群上。结果证实,HDFS性能更好。
HDFS on Ephemeral Storage | Amazon S3 | |
---|---|---|
Read | 350 mbps/node | 120 mbps/node |
Write | 200 mbps/node | 100 mbps/node |
HDFS takes the round
Round 6 - 安全性(Security)
有人认为HDFS是不是安全的,但事实并非如此。Hadoop通过Kerberos提供用户身份认证和通过Hadoop的文件系统权限提供了授权。YARN,Hadoop的最新版本,它能做得更好通过一个称为federations的新功能 - 将集群分成几个命名空间防止用户访问一个不属于他们的数据。数据可以通过SSL安全地被上传到Amazon的实例。
S3内置了安全性。它支持用户身份验证,以控制谁可以访问数据,起初只bucket和objects的所有者能做操作。更多的权限可以通过bucket策略和访问控制列表(ACL)授予用户和组。数据可以被加密,并通过SSL安全地上传。
It’s a tie
Round 7 - (限制)Limitations
尽管HDFS可以存储任何大小的文件,它具有存储非常小的文件(它们应该被连接或统一到Hadoop的档案)的问题。此外,保存的某一集群上的数据仅提供给该集群的机器上,并且不能被集群外的实例使用。
这不是与S3的情况。该数据是独立Hadoop集群的,并且可以通过任何数量的集群的同时处理。然而,在S3上的文件有一些限制。它们只能有5GB和Hadoop的存储格式,如Parquet或ORC,不能在S3中使用。这是因为Hadoop的需要访问在这些文件中的特定字节,S3并没有提供这样的能力。
Another tie
Tonight’s Winner(今晚的胜利者)
具有更好的可扩展性,内置的持久性,以及较低的价格,S3是今晚的赢家!尽管如此,为了有更好的表现,没有文件大小或存储格式的限制,这HDFS要努力改进的方向。