ZAKER汽车|HDFS设计思想和相关概念

一、HDFS简介
1、简单介绍
HDFS(HadoopDistributedFileSystem) , 是Hadoop项目的两大核心之一 , 源自于Google于2003年10月发表的GFS论文 , 是对GFS的开源实现 。 HDFS在最开始是作为ApacheNutch搜索引擎项目的基础架构而开发的 。
HDFS在设计之初 , 就是要运行在通用硬件(commodityhardware)上 , 即廉价的大型服务器集群上 , 因此 , 在设计上就把硬件故障作为一种常态来考虑 , 可以保证在部分硬件发生故障的情况下 , 仍然能够保证文件系统的整体可用性和可靠性 。
HDFS有一下特点:
HDFS是一个高度容错性的系统 , 适合部署在廉价的机器上的分布式文件系统 。 HDFS能提供高吞吐量的数据访问 , 非常适合大规模数据集上的应用 。 HDFS放宽了一部分POSIX约束 , 来实现流式读取文件系统数据的目的 。 HDFS也是一个易于扩展的分布式文件系统
2、HDFS设计目标
a、大规模数据集
HDFS用来处理很大的数据集 。 HDFS上的文件 , 大小一般都在GB至TB 。 因此同时 , HDFS应该能提供整体较高的数据传输带宽 , 能在一个集群里扩展到数百个节点 。 一个单一的HDFS实例应该能支撑千万计的文件 。 目前在实际应用中 , HDFS已经能用来存储管理PB级的数据了 。
b、硬件错误
我们应该知道 , 硬件组件发生故障是常态 , 而非异常情况 。 HDFS可能由成百上千的服务器组成 , 每一个服务器都是廉价通用的普通硬件 , 任何一个组件都有可能一直失效 , 因此错误检测和快速、自动恢复是HDFS的核心架构目标 , 同时能够通过自身持续的状态监控快速检测冗余并恢复失效的组件 。
c、流式数据访问
流式数据 , 特点就是 , 像流水一样 , 不是一次过来而是一点一点“流”过来 , 而处理流式数据也是一点一点处理 。
HDFS的设计要求是:能够高速率、大批量的处理数据 , 更多地响应"一次写入、多次读取"这样的任务 。 在HDFS上一个数据集 , 会被复制分发到不同的存储节点中 。 而各式各样的分析任务多数情况下 , 都会涉及数据集中的大部分数据 。 为了提高数据的吞吐量 , Hadoop放宽了POSIX的约束 , 使用流式访问来进行高效的分析工作
d、简化一致性模型
HDFS应用需要一个“一次写入多次读取”的文件访问模型 。 一个文件经过创建、写入和关闭之后就不需要改变了 。 这一假设简化了数据一致性问题 , 并且使高吞吐量的数据访问成为可能 。 MapReduce应用或网络爬虫应用都非常适合这个模型 。 目前还有计划在将来扩充这个模型 , 使之支持文件的附加写操作 。
e、移动计算代价比移动数据代价低
一个应用请求的计算 , 离它操作的数据越近就越高效 , 这在数据达到海量级别的时候更是如此 。 将计算移动到数据附近 , 比之将数据移动到应用所在之处显然更好 , HDFS提供给应用这样的接口 。
f、可移植性
HDFS在设计时就考虑到平台的可移植性 , 这种特性方便了HDFS作为大规模数据应用平台的推广 。
3、HDFS的优缺点
通过上述的介绍 , 我们可以发现HDFS的优点是:
a、高容错性:数据自动保存多个副本 , 副本丢失后 , 会自动恢复 。 b、适合批处理:移动计算而非数据、数据位置需要暴露给计算框架 。 c、适合大数据处理:GB、TB、甚至PB级数据、百万规模以上的文件数量 , 1000以上节点规模 。 d、流式文件访问:一次性写入 , 多次读取;保证数据一致性 。 e、可构建在廉价机器上:通过多副本提高可靠性 , 提供了容错和恢复机制 。
而HDFS同样有自己的缺点:
1)不适合低延迟数据访问
HDFS的设计目标有一点是:处理大型数据集 , 高吞吐率 。 这势必要以高延迟为代价的 。 因此HDFS不适合处理一些用户要求时间比较短的低延迟应用请求 。
2)不适合小文件存取
一是因此存取大量小文件需要消耗大量的寻地时间(比如拷贝大量小文件与拷贝同等大小的一个大文件) 。


推荐阅读