虽然Apache Hadoop以前都是使用HDFS的,但是当Hadoop的文件系统的需求产生时候也能使用S3。Netflix的 Hadoop data warehouse 利用这个特性把数据存储在S3上而不是HDFS上。笔者曾经工作经历的大数据集群存储都是用HDFS,当前工作接触到对象存储S3,在实践中比较两者的不同之处。
1.可扩展性
HDFS 依赖本地的存储只能横向扩展. 增加一个存储区域就意味着不仅要加一个更大的硬盘驱动器来扩充节点,并且还要在集群上面加更多的机器。这是可行的,但是相比S3花费更多并且更加复杂。
S3 能根据存储的数据自动地扩展,根本不需要改变任何东西。甚至可用的空间是几乎无限的(至少对Amazon没有限制)。
S3表现更加优异
2.数据的高可用性
对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%的持久性)他们实际上没有丢失一个对象
此外大数据集群中的HDFS依赖机器,恢复数据者备份数据都强依赖集群机器。S3存储不依赖集群机器,数据存在另外一套单独的体系中。
S3表现更加优异
3.成本价格
为了确保数据的完整性,HDFS默认存储数据的每个块的三个副本。这意味着需要的HDFS存储空间是实际数据的3倍,并花费相应的成本。虽然数据复制不是必须的,只是存储一个拷贝将消除HDFS的耐久性,并可能导致数据丢失。
亚马逊照顾备份数据S3上的,所以该空间的100%是可用的并且只花费相应的价钱。 S3还支持存储压缩文件,这大大减少了所需以及该法案的空间。
S3表现更加优异
4.性能表现(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表现更加优异
5.数据权限
有人认为HDFS是不是安全的,但事实并非如此。Hadoop通过Kerberos提供用户身份认证和通过Hadoop的文件系统权限提供了授权。YARN,Hadoop的最新版本,它能做得更好通过一个称为federations的新功能 - 将集群分成几个命名空间防止用户访问一个不属于他们的数据。数据可以通过SSL安全地被上传到Amazon的实例。
S3内置了安全性。它支持用户身份验证,以控制谁可以访问数据,起初只bucket和objects的所有者能做操作。更多的权限可以通过bucket策略和访问控制列表(ACL)授予用户和组。数据可以被加密,并通过SSL安全地上传
HDFS数据权限比S3控制要好
6.其他限制
尽管HDFS可以存储任何大小的文件,它具有存储非常小的文件(它们应该被连接或统一到Hadoop的档案)的问题。此外,保存的某一集群上的数据仅提供给该集群的机器上,并且不能被集群外的实例使用,S3没有这样的限制。在S3上的文件有一些限制,比如单次上传文件限制在5GB内,不支持Parquet或ORC文件直接读写,HDFS支持Parquet或ORC。
HDFS表现更好