文档章节

hdfs工作原理

超人学院
 超人学院
发布于 2015/03/11 14:40
字数 1188
阅读 938
收藏 41

一,当用client向hdfs中写入数据的时候.

           当我们向hdfs 写数据的时候,客户端要做两件事.首先,将数据文件划分不同的数据块,划分的标准默认是64MB或128MB,这个是可以配置的.其次是向namenode请求一批(实际上就是默认的3个)datanode以存放数据块.当然namenode不是随便的选出三个datanode给client,它会选择三个最靠近client的三个datanode,那么这个距离是怎么计算的呢,是这样的,它会去计算两个节点与父节点带宽之和来计算两个节点的距离,在得到三个最近的datanode之后,namenode会先按与client的距离对datanode排下序,然后返回给客户端.

           下面client要做的就是向namenode返回的3个datanode中传输数据了.当它在写第一个数据块时,它会先向离它最近的那个datanode写数据.那么client如何知道它向第一个datanode写入数据是否成功了呢?是这样的,client在向datanode传数据的同时,会计算下数据快的校验和,这个校验和也会传给datanode,datanode 在存储完数据后,会对数据块取下校验和与client的校验和进行比对,如果一致的话说明数据保存成功,然后它会向client进行ack,告诉client数据已经成功保存了,同时它也会告诉namenode数据块保存成功了.剩下的数据块保存到下两个datanode的过程和第一个过程是相似的,只是数据的传输不是都是client去传递的,而是datanode之间进行传递的,每个datanode成功保存完数据后都会向client进行ack并通知namenode保存数据完毕.当client接受到所有的datanode的ack后,client会告诉namenode数据块全部写入完毕.当namenode接受到client的消息后,namenode要做的就是维护两张表,一张表是每个数据块对应的datanode地址,另一张表是存储数据副本的时候经过了那些管线.

      二,当从hdfs中读数据的时候.

             当client要从hdfs中读取数据的时候,首先客户端要知道数据存储在哪吧,怎么才能知道啊,谁知道啊?当然是namenode啊,namenode存储了所有的数据块元数据信息.client会给namenode请求数据的文件地址,namenode会返回给client关于数据块的相关信息即数据块存放在哪些datanode上了,每个datanode存放了哪些数据块,当然这些datanode也是按照与client距离排过序的.当client拿到这些信息后,它会先到离它最近的那个datanode上下载数据.

         三,故障的规避.

              因为是分布式文件系统,网路中什么事情都有可能发生,如datanode挂掉,datanode不能返回客户端想要的数据,datanode在保存数据的时候数据损毁,或者最严重的namenode挂掉.

              下面看看这个四个问题,hadoop是如何规避的呢。

              首先是datanode挂掉,当hdfs启动后每个datanode节点会定期上报自己的健康状况,每个datanode会每三秒向namenode发送心跳,证明自己还或者,假如namenode是秒钟没有收到datanode发送的心跳,namenode会认为这个datanode已经挂掉了.

              下一个问题datanode不能返回客户端想要的数据,当客户端datanode请求数据或写入数据的时候,datanode无相应怎么办呢,当客户端长时间没有接收到datanode的ack后,client也为认为这个datanode已经挂掉了,于是会跳过这个datanode,请求下个datanode.    

              第三个问题,datanode保存的数据发生损坏,这个该怎么办呢,datanode会定期上报自己所存的数据快健康状况,健康状况是通过校验和来判断的,当nomenode收到datanode发送的数据块健康状况的报告后它就知道那些数据块损毁,然后它就会去更新它维护的两张表,即数据块在哪些datanode上存着,每个datanode上存放了哪些数据块,如果namenode发现哪个数据块的副本没有达到标准,它会通知其它的datanode从已有数据块的datanode上copy相应的数据块.

              第四个问题,namenode挂掉,这个问题是最严重的,目前的最好的解决办法就是加一个辅助namenode即secondNamenode,以备分数据块的元数据信息,尽可能的避免数据丢失.

© 著作权归作者所有

共有 人打赏支持
下一篇: 查询文件系统
超人学院
粉丝 110
博文 335
码字总数 388917
作品 0
昌平
CTO(技术副总裁)
私信 提问
加载中

评论(1)

G
GroPGA
不错
面试问题

358、你们的集群规模? 开发集群:10台(8台可用)8核cpu 359、你们的数据是用什么导入到数据库的?导入到什么数据库? 处理之前的导入:通过hadoop命令导入到hdfs文件系统 处理完成之后的导...

HIVE
2016/07/05
464
2
大数据教程(7.1)客户端向HDFS写数据流程分析

上一章为大家分享了hadoop入门的基础知识,本章博主将带领大家一起升入了解hadoop的HDFS底层原理以及hadoop内部rpc框架的原理和使用。 一、本节目的 HDFS工作机制的学习主要是为了加深大家对...

em_aaron
11/07
0
0
大数据Hadoop需要了解哪些内容?

一、Hadoop环境搭建 1. Hadoop生态环境介绍 2. Hadoop云计算中的位置和关系 3. 国内外Hadoop应用案例介绍 4. Hadoop概念、版本、历史 5. Hadoop核心组成介绍及hdfs、mapreduce体系结构 6. H...

mo默瑶
05/05
0
0
HDFS-1.x、2.x的RPC接口

HDFS中的主要RPC接口。 架构图参考前文HDFS1.x、2.x架构图。 HDFS 1.x image.png ClientProtocol:客户端与名字节点间的接口。客户端通过这个接口访问名字节点,操作文件或目录的元数据信息(...

猴子007
01/22
0
0
Hadoop基础之HA(高可用)

1.Hadoop2.0产生背景 早期的hadoop版本,NN(namenode)是HDFS集群的单点故障点,每一个集群只有一个NN,如果这个机器或进程不可用,整个集群就无法 使用。为了解决这个问题,出现了一堆针对HDF...

landy8530
2017/11/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

让天下没有难用的搜索:阿里搜索如何成长为贴心“暖男”?

摘要: 阿里搜索技术体系演进至今天,基本形成了由offline、nearline、online三层体系,分工协作,保证电商平台上,既能适应日常平稳流量下稳定有效的个性化搜索及推荐,也能够去满足电商平台...

阿里云官方博客
14分钟前
3
0
(一)spring cloud互联网分布式微服务云平台规划分析--spring cloud平台整体规划

1. 导语 近期公司孵化了一个互联网产品,随着业务发展,产品运营后用户数据量(过亿)、业务数据量(过100亿)较大,技术团队配合产品、运营快速定制化开发, 还要考虑产品涉及的资金安全、消...

明理萝
15分钟前
0
1
linux 下对于jvm的监测

在看阿里巴巴开源项目的时候,发现了alibaba/arthas ,之前出现会员卡的时候,需要只能去看日志。但是日志又不能有效的知道当时的问题情况。一种方法就是去监测出现问题的情况下,去查看jvm...

miaojiangmin
23分钟前
0
0
大数据就业前景分析的太到位了,想学习大数据的可以看看

大数据广泛应用于电网运行、经营管理及优质服务等各大领域,并正在改变着各行各业,也引领了大数据人才的变革。大数据专业就业前景怎么样?这对于在就业迷途中的我们是一个很重要的信息。 随...

董黎明
56分钟前
3
0
如何利用Photoshop进行快速切图

在UI设计中我们常常使用Ai来进行矢量图的绘制,然后导入Ps中进行设计、排版和导出。 在以前的版本中,切图一直是个很麻烦的事情,要么依托于脚本,要么手动一张张导出,很不方便,这种窘况在...

mo311
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部