文档章节

hdfs工作原理

超人学院
 超人学院
发布于 2015/03/11 14:40
字数 1188
阅读 941
收藏 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,以备分数据块的元数据信息,尽可能的避免数据丢失.

© 著作权归作者所有

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

评论(1)

G
GroPGA
不错
分布式并行计算MapReduce

1.用自己的话阐明Hadoop平台上HDFS和MapReduce的功能、工作原理和工作过程。 HDFS,MapReduce功能: 分布式文件系统HDFS主要用于大规模数据的分布式存储,而MapReduce则构建在分布式文件系统上...

osc_u94h44ck
2019/06/06
2
0
面试问题

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

HIVE
2016/07/05
1.1K
2
分布式并行计算MapReduce

分布式并行计算MapReduce 作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce的功能、工作原理和工作过程。 HDFS的...

osc_u94h44ck
2019/06/06
6
0
大数据教程(7.1)客户端向HDFS写数据流程分析

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

em_aaron
2018/11/07
77
0
Hadoop2.7.6_03_HDFS原理

HDFS前言 l 设计思想   分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析; l 在大数据系统中作用:   为各类分布式运算框架...

osc_cnuamvdq
2018/06/18
1
0

没有更多内容

加载失败,请刷新页面

加载更多

Elasticsearch利用快照数据迁移和灾备

面对多集群的企业级复杂架构,准备一套备份集群显得非常重要,备份集群在平时不参与读写操作,但是始终包含业务集群的所有数据,在有业务集群不能使用的时候,可以直接通过切换Elasticsearch...

osc_6jhxf9ab
21分钟前
23
0
Nginx反向代理报504超时错误

nginx+tomcat 后端为tomcat,nginx代理报504超时错误。 问题描述: #错误1.198.17.123 - - [06/Jul/2018:01:48:57 +0000] "POST /mapbj3/getticket HTTP/1.1" 504 537 "https://XX......

osc_3jy89xtf
23分钟前
13
0
如何有效地配对袜子? - How to pair socks from a pile efficiently?

问题: Yesterday I was pairing the socks from the clean laundry and figured out the way I was doing it is not very efficient. 昨天我把干净的洗衣店的袜子配对,弄清楚我做的方式效率......

javail
24分钟前
22
0
最新干货pandownload复活教程

教程 1、首先下载解压软件压缩包,先不要运行软件,我们先修改hosts文件,打开我的电脑,在文件地址栏中输入 C:\Windows\System32\drivers\etc 然后回车,找到hosts文件; 2、找到有,右键h...

osc_mi0kl8ls
24分钟前
21
0
poj 1816 trie树+dfs(强烈推荐,含有通配符的匹配)

// https://www.cnblogs.com/buptLizer/archive/2011/09/18/2180723.html #include <iostream> #include <algorithm> #include <stdio.h> #include <cstring> using namespace std; const in......

osc_5h2xxt0l
25分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部