HDFS--大数据应用的基石

Posted 数据未来之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS--大数据应用的基石相关的知识,希望对你有一定的参考价值。

    近些年,由于智能手机的迅速普及推动移动互联网技术的蓬勃发展,全球数据呈现爆发式的增长。2018年5月企鹅号的统计结果:互联网每天新增的数据量达2.5*10^18字节,而全球90%的数据都是在过去的两年间创造出来的。随着5G技术的商用,未来连接万物的物联网设备必将带来更大量级的数据。大胆预期,我们即将走进数据大爆炸的时代。诚如吴军博士所说:谁懂得数据的重要性,谁会在工作中善用数据,就更有可能获得成功。

    从人类活动开始,数据一直不断在产生,区别仅在于数据的存储方式是否取得了进步。从古老的壁画、纸张到现代的硬盘,存储能力跨数量级地增长。尽管如此,在大数据时代,单纯通过增加硬盘个数来扩展计算机文件系统存储容量的方式,在容量大小、容量增长速度、数据备份、数据安全等方面的表现都差强人意。分布式文件存储系统应运而生。


    HDFS主要解决传统方式难以解决或者成本太高的问题,它被设计成适合运行在通用硬件上的分布式文件系统,具有高容错性,适合部署在廉价的机器上运行,能提供高吞吐量的数据访问。

    HDFS可能由成百上千的服务器构成,错误监测、快速自恢复是其核心架构目标。HDFS上的典型文件大小一般在GB至TB量级,适用于一次写入多次读取的场景。相较于数据访问的低延时,HDFS在高吞吐量的表现更优异。


    HDFS采用Java语言编写,典型架构如下图示,使用master/slave架构,一个HDFS集群由一个NameNode和一定数目的DataNodes组成。NameNode是一个中心服务器,负责管理文件系统的名称空间(namespace)以及客户端对文件的访问。集群中的DataNode一般是一个节点一个,负责管理所在节点的数据存储。HDFS向外暴露文件系统的名称空间,用户能以文件形式在上面存储数据。文件在HDFS上以数据块为单位存储,一个文件被分成一个或多个数据块存储在一组DataNode上。DataNode负责处理文件系统客户端的读写请求,在NameNode的统一调度下进行数据块的创建、删除和复制。


NameNode的作用

1. 维护文件系统的名称空间

    执行文件系统名称空间的操作,如创建、删除、移动或重命名文件。任何对文件系统名称空间或属性的修改都会被NameNode记录。

2. 管理数据块的复制

    为了保证数据安全,HDFS上文件的所有数据块都有副本,文件的数据块大小和副本数目可配置。NameNode管理数据块的复制,周期性地从集群中的每个DataNode接收心跳信息和块状态报告(Blockreport),监测DataNode节点的工作状态和同步该节点的数据块列表。

3. 管理数据块副本

    用户往HDFS上传数据,只需上传一次,由HDFS自动实现数据的备份。HDFS采用机架感知策略(rack-aware)来改进数据的可靠性、可用性和性能。

    由于网络传输的性能低于本地传输,一般情况HDFS副本系数为3,通过机架感知过程确定DataNode所属的机架id,将第二个副本存放在第一副本同机架的不同节点上,第三副本存放在不同机架的节点上。以此减少机架间的数据传输,提高写操作效率,同时保证数据的可靠性。

4. 安全模式

    NameNode启动后会进入安全模式,接收所有DataNode的心跳信号和块状态报告,检测数据块的副本数量是否达到最小副本数,确保数据块的安全性。如果一定数量的数据块(比例)确认安全,NameNode退出安全模式。

5. 元数据(MetaData)持久化

    元数据可分为内存元数据和元数据文件两种。其中NameNode在内存中维护整个文件系统的元数据镜像,用于HDFS的管理;元数据文件则用于持久化存储。元数据有三类重要信息:

    a. 文件和目录自身的属性信息,例如文件名、目录名、父目录信息、文件大小、创建时间、修改时间等。

    b. 记录文件内容存储相关信息,例如文件块情况、副本个数、每个副本所在的Data Node 信息等。

    c. 记录HDFS中所有Data Node信息,用于Data Node管理。

    NameNode使用EditLog的事物日志记录对元数据的修改操作,使用FsImage文件存储文件系统的名称空间(包含数据块到文件的映射、文件的属性等)。NameNode在启动时从硬盘中读取Editlog和FsImage,将所有Editlog中的事物作用在内存中的FsImage上,并将新版本的FsImage保存到本地磁盘,删除旧的Editlog,此过程即为一个检查点(checkpoint)。内存中保存着整个文件系统的名称空间和文件数据块映射(BlockMap)的映像,内存大小通常设置为4G。

    DataNode将数据以文件形式存储在本地文件系统中,它在启动时扫描本地文件系统生成一个本地文件对应的数据块列表,并将此块状态报告发送给NameNode。

6. 通讯协议

    HDFS的通讯协议都是建立在TCP/IP协议之上,客户端通过TCP端口连接到NameNode,通过ClientProtocol协议与NameNode交互,DataNode使用DataNodeProtocol协议与NameNode交互。ClientProtocol和DataNodeProtocol是对远程调用(RPC:Remote Procedure Protocol)模型的封装,NameNode不会主动发起RPC,而是响应客户端或DataNode的RPC请求。

7. 健壮性

    即在出错的情况下保证数据存储的可靠性,常见的问题场景有:NameNode出错,DataNode出错和网络割裂(network partitions)。NameNode通过ZooKeeper实现高可用,避免单点故障的问题,通过NameNode联盟扩展NameNode保存元数据的能力。DataNode通过周期性心跳信号报告本节点状态,在心跳异常时,NameNode会停止向问题节点派发读写数据的请求,并在当前活跃的DataNode保存的数据块副本系数低于指定值时触发数据块的复制,保证数据可靠性。

8. 集群均衡

    当DataNode上空闲空间低于临界点时,系统会自动将此节点的数据转移到其他空闲的DataNode。

9. 数据完整性

    HDFS会计算并保存每个数据块的校验和,客户端获取文件时会检查DataNode获取的数据是否与系统名称空间保存的校验和一致,若不一致则从其他节点获取该数据块。


SecondaryNameNode(SNN)的作用

    SNN不是NameNode的备份,但可以做备份,辅助恢复NameNode。其主要工作是帮助NameNode定期合并Editlog和FsImage,防止文件过大,并将新的文件拷贝回NameNode,NameNode在下次重启时会使用这个新的文件,从而减少重启的时间 。

    SNN一般在另一台独立的机器上运行,它需要占用大量CPU时间来与NameNode进行合并操作,通常单独开一个线程执行合并操作。SNN保存的信息永远是滞后于NameNode,在NameNode失效时,会丢失部分数据。

    SNN执行合并的时机:

1. 到达配置文件设置的时间间隔fs.checkpoint.period,默认为3600s;

2. 文件大小达到设置的大小fs.checkpoint.size,默认是64MB。


    如上介绍了HDFS各节点的作用,那么部署在不同机器上的节点具体是如何通讯的?敬请期待下篇“RPC--HDFS节点间的沟通桥梁”。

以上是关于HDFS--大数据应用的基石的主要内容,如果未能解决你的问题,请参考以下文章

大数据计算的基石——MapReduce

HDFS 为何在大数据领域经久不衰?

大数据基石之Hadoop的读写流程与2.X架构

大数据基石-Hadoop3.x学习教程-大数据场景介绍

大数据基石-Hadoop3.x学习教程-大数据场景介绍

大数据HDFS应用开发