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--大数据应用的基石的更多相关文章
- Hadoop第三天---分布式文件系统HDFS(大数据存储实战)
1.开机启动Hadoop,输入命令: 检查相关进程的启动情况: 2.对Hadoop集群做一个测试: 可以看到新建的test1.txt和test2.txt已经成功地拷贝到节点上(伪分布式只有一个节 ...
- 大数据计算的基石——MapReduce
MapReduce Google File System提供了大数据存储的方案,这也为后来HDFS提供了理论依据,但是在大数据存储之上的大数据计算则不得不提到MapReduce. 虽然现在通过框架的不 ...
- 【NLP】大数据之行,始于足下:谈谈语料库知多少
大数据之行,始于足下:谈谈语料库知多少 作者:白宁超 2016年7月20日13:47:51 摘要:大数据发展的基石就是数据量的指数增加,无论是数据挖掘.文本处理.自然语言处理还是机器模型的构建,大多都 ...
- [大数据面试题]hadoop核心知识点
* 面试答案为LZ所写,如需转载请注明出处,谢谢. * 这里不涉及HiveSQL和HBase操作的笔试题,这些东西另有总结. 1.MR意义. MR是一个用于处理大数据的分布式离线计算框架,它采用”分而 ...
- BAT推荐免费下载JAVA转型大数据开发全链路教程(视频+源码)价值19880元
如今随着环境的改变,物联网.AI.大数据.人工智能等,是未来的大趋势,而大数据是这些基石,万物互联,机器学习都是大数据应用场景! 为什么要学习大数据?我们JAVA到底要不要转型大数据? 好比问一个程序 ...
- AI加持的阿里云飞天大数据平台技术揭秘
摘要:2019云栖大会大数据&AI专场,阿里云智能计算平台事业部研究员关涛.资深专家徐晟来为我们分享<AI加持的阿里云飞天大数据平台技术揭秘>.本文主要讲了三大部分,一是原创技术优 ...
- 大数据系列4:Yarn以及MapReduce 2
系列文章: 大数据系列:一文初识Hdfs 大数据系列2:Hdfs的读写操作 大数据谢列3:Hdfs的HA实现 通过前文,我们对Hdfs的已经有了一定的了解,本文将继续之前的内容,介绍Yarn与Yarn ...
- 有必要了解的大数据知识(一) Hadoop
前言 之前工作中,有接触到大数据的需求,虽然当时我们体系有专门的大数据部门,但是由于当时我们中台重构,整个体系的开发量巨大,共用一个大数据部门,人手已经忙不过来,没法办,为了赶时间,我自己负责的系统的 ...
- 大数据理论篇HDFS的基石——Google File System
Google File System 但凡是要开始讲大数据的,都绕不开最初的Google三驾马车:Google File System(GFS), MapReduce,BigTable. 为这一切的基 ...
- 腾讯云 CHDFS — 云端大数据存算分离的基石
随着网络性能提升,云端计算架构逐步向存算分离转变,AWS Aurora 率先在数据库领域实现了这个转变,大数据计算领域也迅速朝此方向演化. 存算分离在云端有明显优势,不但可以充分发挥弹性计算的灵活,同 ...
随机推荐
- react 传递非state给子元素的注意事项
我们是使用react的时候,其实很多情况都不需要使用state去存储值,如果不涉及页面渲染的值,我们往往可以使用 this.xxx的方式:这样可以提高组件的性能,避免不必要的 re_render 带来 ...
- 图像阈值化-threshold、adaptivethreshold
在图像处理中阈值化操作,从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体).这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割.open ...
- VS2008 试图运行未注册64位调试器组件
安装即可
- WebSocket实现web即时通信(后端nodejs实现)
WebSocket实现web即时通信 一.首先看一下,HTTP.ajax轮询.long poll和WebSocket的区别: 1.HTTP 协议(短连接):一个 Request 一个 Response ...
- 标准JSF的生命周期
JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架.它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器端应用程序的开发.它的生命 ...
- Python字符串和编码
在最早的时候只有127个字符被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码被成为ASCII编码. 但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突 ...
- IIS日志导致磁盘被占满
某服务器只部署了个IIS,应用目录都在D盘,可C盘97.5GB空间却被占满了. 将系统文件,隐藏文件全部显示,再选中所有的C盘文件及文件夹查看容量只有19GB. 既然只部署了IIS,那自然就怀疑到了I ...
- form表单中使用a标签代替button或commit进行数据提交
1.申明form的id:xxx 2.在<a>标签内书添加属性 onclick="document:xxx.submit()"
- python: 用pygments给markdown文档染色
首先你需要一个markdown解析器 比如有常见的markdown和markdown2,其他的可以参考这个网站的评价 我选择了mistune,自己继承写一个渲染的Renderer mistune的do ...
- DevExpress05、TileControl、AlertControl
TileControl控件 该控件是根据Windows 8的用户界面设计的,可以轻松地把各个控制块集成到窗体上. 1. IndertBetweenGroups属性 控制两个Group之间的间距: ...