大数据存储系统HDFS和对象存储(OOS/S3)的比较

  虽然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 StorageAmazon S3
Read350 mbps/node120 mbps/node
Write200 mbps/node100 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表现更好

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实验三:HDFS操作方法和基础编程实验 1. 实验目的 了解HDFS的基本操作方法和基础编程实验,掌握Hadoop文件系统的操作。 2. 实验环境 - 操作系统:Windows 10 - 虚拟机软件:VMware Workstation 15 Pro - 虚拟机操作系统:CentOS 7 - Hadoop版本:2.7.7 3. 实验步骤 3.1 HDFS操作方法 3.1.1 启动HDFS服务 在CentOS 7中打开终端,输入以下命令启动HDFS服务: ``` start-dfs.sh ``` 3.1.2 创建文件夹 HDFS中的文件夹称为目录,使用以下命令在HDFS中创建一个目录: ``` hadoop fs -mkdir /test ``` 3.1.3 上传文件 使用以下命令将本地文件上传到HDFS中的目录: ``` hadoop fs -put /opt/test.txt /test ``` 3.1.4 下载文件 使用以下命令将HDFS中的文件下载到本地: ``` hadoop fs -get /test/test.txt /opt ``` 3.1.5 查看文件 使用以下命令查看HDFS中的文件: ``` hadoop fs -ls /test ``` 3.1.6 删除文件 使用以下命令删除HDFS中的文件: ``` hadoop fs -rm /test/test.txt ``` 3.2 基础编程实验 3.2.1 实验要求 编程实现一个完整的Hadoop MapReduce程序,实现词频统计功能。 3.2.2 实验步骤 3.2.2.1 编写Mapper类 在Eclipse中新建一个Java项目,创建Mapper类,代码如下: ``` public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } } } ``` 3.2.2.2 编写Reducer类 创建Reducer类,代码如下: ``` public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } ``` 3.2.2.3 编写Driver类 创建Driver类,代码如下: ``` public class WordCount { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(WordCountMapper.class); job.setCombinerClass(WordCountReducer.class); job.setReducerClass(WordCountReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` 3.2.2.4 打包 右键项目,选择Export,选择JAR file,点击Next,选择要导出的项目和要导出的类,点击Next,选择要导出的JAR文件路径和文件名,点击Finish,即可生成JAR文件。 3.2.2.5 运行 使用以下命令在Hadoop集群上运行程序: ``` hadoop jar /opt/wordcount.jar WordCount /input /output ``` 其中,/input是输入文件所在的目录,/output是输出文件所在的目录。 4. 实验结果与结论 经过以上步骤,我们可以成功地完成HDFS操作方法和基础编程实验,从而掌握了Hadoop文件系统的操作。同时,我们还通过编写MapReduce程序实现了词频统计功能,进一步加深了对Hadoop的理解和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值