HDFS 和MapReduce 是离线大数据处理背后的主要技术。

1.简介

HDFS 的英文全称是Hadoop Distributed File System ,即Hadoop 分布式文件系统,它是Hadoop 的核心子项目。实际上, Hadoop 中有一个综合性的文件系统抽象,它提供了文件系统实现的各类接口,而HDFS 只是这个抽象文件系统的一种实现,但HDFS 是各种抽象接口实现中应用最为广泛和最广为人知的一个。

2.优势

( 1 ) 处理超大文件

这里的超大文件通常指的是GB 、TB 乃至PB 大小的文件。通过将超大文件拆分为小的Split ,并分配给数以百计乃至千计、万计的节点, Hadoop 可以很容易地扩展并处理这些超大文件。

( 2 )运行于廉价的商用机器集群上

HDFS 设计对硬件需求比较低,只须运行在低廉的商用硬件集群上,而无须使用昂贵的高可用性机器。廉价的商用机也就意味着大型集群中出现节点故障情况的概率非常高,这就要求设计HDFS 时充分考虑数据的可靠性、安全性及高可用性。

( 3 )高容错性和高可靠性

HDFS 设计中就考虑到了低廉硬件的不可靠性, 一份数据会自动保存多个副本(具体可以设置, 通常三个副本),通过增加副本的数量来保证了它的容错性。如果某一个副本丢失,HDFS 机制会自动复制其他机器上的副本。当然,有可能多个副本都会出现问题,但是HDFS 保存的时候会自动跨节点和跨机架,因此此种概率非常低, HDFS 同时也提供了各种副本放置策略来满足不同级别的容错需求。

( 4 )流式的访问数据

HDFS 的设计建立在更多地响应」次写人、多次读写”任务的基础上,这意味着一个数据集一旦由数据源生成,就会被复制分发到不同的存储节点中,然后响应各种各样的数据分析任务请求。在多数情况下,分析任务都会涉及数据集的大部分数据,也就是说,对HDFS 来说, 请求读取整个数据集比请求读取单条记录会更加高效。

3.局限

( 1 )不适合低延迟数据访问

如果要处理一些用户要求时间比较短的低延迟应用请求(比如毫秒级、秒级的响应时间),则HDFS 不适合。HDFS 是为了处理大型数据集而设计的,主要是为达到高的数据吞吐量而设计的,延迟时间通常实在分钟乃至小时级别。对于那些有低延时要求的应用程序, HBase 是一个更好的选择,尤其适用于对海量数据集进行访问并要求毫秒级响应时间的情况,但HBase 的设计是对单行或者少量数据集的访问,对HBase 的访问必须提供主键或者主键范围。

( 2 )无法高效存储大量小文件

在HDFS 中,需要用NameNode (名称节点)来管理文件系统的元数据,以响应客户端请求返回文件位置等,而这些元数据放置在内存中,所以文件系统所能容纳的文件数目是由NameNode 的内存大小来决定。一般来说,每一个文件、文件夹和Block (数据块) 需要占据150 字节左右的空间,所以,如果有100 万个文件,每一个占据一个Block ,就至少需要300MB 内存。当前来说,数百万的文件还是可行的,当扩展到数十亿时, NameNode 的工作压力会很大,检索处理元数据的时间就不可接受了,而当前的硬件水平也无法实现。要想让HDFS 处理好小文件,有不少方法。例如,利用SequenceFile 、MapFile 、Har等方式归档小文件。这个方法的原理就是把小文件归档起来管理, HBase 就是基于此的。对于这种方法,如果想找回原来的小文件内容,就必须得知道与归档文件的映射关系。此外,也可以横向扩展, 一个NameNode 不够,可以多Master 设计, 将NameNode 用一个集群代替, Alibaba DFS 的设计,就是多Master 设计,它把Metadata 的映射存储和管理分开了,由多个Metadata 存储节点和一个查询Master 节点组成。

( 3 )不支持多用户写入和随机文件修改

在HDFS 的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作。目前HDFS 还不支持多个用户对同一文件的写操作,也不支持在文件任意位置进行修改。

4.基本框架

HDFS 采用了主从( Master/Slave )的结构模型,一个HDFS 集群是由一个NameNode 和若干个DataNode 组成的,其中NameNode 作为主服务器,管理文件系统的命名空间(即文件有几块,分别存储在哪个节点上等)和客户端对文件的访问操作;集群中的DataNode 管理存储的数据。HDFS 允许用户以文件的形式存储数据。从内部来看,文件被分为若干数据块,而且这若干个数据块存放在一组DataNode 上。NameNode 执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录等,它也负责数据块到具体DataNode 的映射。DataNode 负责处理文件系统客户端的文件读写请求,并在NameNode 的统一调度下进行数据块的创建、删除和复制工作

常用的大数据hadoop数据源_Hadoop

NameNode 和DataNode 都被设计成可以在普通商用计算机上运行,而且这些计算机通常运行的是Linux 操作系统。HDFS 采用Java 语言开发因此任何支持Java 的机器都可以部署NameNode 和DataNode。