近些年,由于智能手机的迅速普及推动移动互联网技术的蓬勃发展,全球数据呈现爆发式的增长。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--大数据应用的基石的更多相关文章

  1. Hadoop第三天---分布式文件系统HDFS(大数据存储实战)

    1.开机启动Hadoop,输入命令:  检查相关进程的启动情况: 2.对Hadoop集群做一个测试:   可以看到新建的test1.txt和test2.txt已经成功地拷贝到节点上(伪分布式只有一个节 ...

  2. 大数据计算的基石——MapReduce

    MapReduce Google File System提供了大数据存储的方案,这也为后来HDFS提供了理论依据,但是在大数据存储之上的大数据计算则不得不提到MapReduce. 虽然现在通过框架的不 ...

  3. 【NLP】大数据之行,始于足下:谈谈语料库知多少

    大数据之行,始于足下:谈谈语料库知多少 作者:白宁超 2016年7月20日13:47:51 摘要:大数据发展的基石就是数据量的指数增加,无论是数据挖掘.文本处理.自然语言处理还是机器模型的构建,大多都 ...

  4. [大数据面试题]hadoop核心知识点

    * 面试答案为LZ所写,如需转载请注明出处,谢谢. * 这里不涉及HiveSQL和HBase操作的笔试题,这些东西另有总结. 1.MR意义. MR是一个用于处理大数据的分布式离线计算框架,它采用”分而 ...

  5. BAT推荐免费下载JAVA转型大数据开发全链路教程(视频+源码)价值19880元

    如今随着环境的改变,物联网.AI.大数据.人工智能等,是未来的大趋势,而大数据是这些基石,万物互联,机器学习都是大数据应用场景! 为什么要学习大数据?我们JAVA到底要不要转型大数据? 好比问一个程序 ...

  6. AI加持的阿里云飞天大数据平台技术揭秘

    摘要:2019云栖大会大数据&AI专场,阿里云智能计算平台事业部研究员关涛.资深专家徐晟来为我们分享<AI加持的阿里云飞天大数据平台技术揭秘>.本文主要讲了三大部分,一是原创技术优 ...

  7. 大数据系列4:Yarn以及MapReduce 2

    系列文章: 大数据系列:一文初识Hdfs 大数据系列2:Hdfs的读写操作 大数据谢列3:Hdfs的HA实现 通过前文,我们对Hdfs的已经有了一定的了解,本文将继续之前的内容,介绍Yarn与Yarn ...

  8. 有必要了解的大数据知识(一) Hadoop

    前言 之前工作中,有接触到大数据的需求,虽然当时我们体系有专门的大数据部门,但是由于当时我们中台重构,整个体系的开发量巨大,共用一个大数据部门,人手已经忙不过来,没法办,为了赶时间,我自己负责的系统的 ...

  9. 大数据理论篇HDFS的基石——Google File System

    Google File System 但凡是要开始讲大数据的,都绕不开最初的Google三驾马车:Google File System(GFS), MapReduce,BigTable. 为这一切的基 ...

  10. 腾讯云 CHDFS — 云端大数据存算分离的基石

    随着网络性能提升,云端计算架构逐步向存算分离转变,AWS Aurora 率先在数据库领域实现了这个转变,大数据计算领域也迅速朝此方向演化. 存算分离在云端有明显优势,不但可以充分发挥弹性计算的灵活,同 ...

随机推荐

  1. Expo大作战(二十三)--expo中expo kit 高级属性(没干货)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. python基础一数据类型之列表

    摘要: python基础一中写到列表,那么这篇主要讲列表. 1,定义列表 2,列表.元祖.字符串都属于序列,都可以用用索引和切片. 3,列表的方法 1,定义列表 list1 = ['a','b',1, ...

  3. mysql的又一个让人捉摸不透的bug?

    这次就不说很多没有写博客了,因为前几天已经写过了.\^o^/ 昨天我们刚讨论了关于自动化运维工作的实现方式,如果批量执行,中间出错怎么办?突然有人提出mysql支持--force,可以跳过出错继续执行 ...

  4. YYYY-mm-dd HH:MM:SS大小写解释

    d               月中的某一天.一位数的日期没有前导零.    dd             月中的某一天.一位数的日期有一个前导零.    ddd           周中某天的缩写名 ...

  5. Android图形显示之硬件抽象层Gralloc【转】

    https://blog.csdn.net/yangwen123/article/details/12192401 FrameBuffer驱动程序分析文中介绍了Linux系统下的显示驱动框架,每个显示 ...

  6. windows中VirtualBox调整扩大VMDK格式的磁盘空间

    今日为了学习(zhuangX),在家中电脑上安装了VirtualBox的虚拟机,为了兼容性,选择了VMDK磁盘格式,想起办公室的电脑,在系统配置完成后,一直提示磁盘空间不足,尴尬了,重新装?环境啥的都 ...

  7. Django有关的所有命令

    1. Django的安装 pip install django ==1.11.11 pip install -i yuan django==1.11.11 2. 创建项目 django-admin s ...

  8. 3.1Python的判断选择语句

    返回总目录 目录: 1.if单分支语句 2.if else 双分支语句 3.if elif ...else多分支语句 4.if 嵌套语句 判断语句总览: (一)if单分支语句: 语法: if 条件: ...

  9. Local policy - User rights assignment 对照表

    "SeCreateTokenPrivilege"  --> "Create a token object" "SeAssignPrimaryTo ...

  10. 4星|《行为设计学:掌控关键决策》:影响决策质量的四大思维陷阱及WRAP应对法

    行为设计学:掌控关键决策 两位作者认为,有四大思维陷阱让人做出错误的决策:思维狭隘.证实倾向.短期情绪.过度自信.两位作者提出WRAP决策流程来应对:Widen your options(拓宽选择空间 ...