【技术】HDFS存储原理

根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS存储机制与运行原理,非常适合Hadoop/HDFS初学者理解。

一、角色出演


如上图所示,HDFS存储相关角色与功能如下:

Client:客户端,系统使用者,调用HDFS API操作文件;与NN交互获取文件元数据;与DN交互进行数据读写。

Namenode:元数据节点,是系统唯一的管理者。负责元数据的管理;与client交互进行提供元数据查询;分配数据存储节点等。

Datanode:数据存储节点,负责数据块的存储与冗余备份;执行数据块的读写操作等。

二、写入数据


1、发送写数据请求

HDFS中的存储单元是block。文件通常被分成64或128M一块的数据块进行存储。与普通文件系统不同的是,在HDFS中,如果一个文件大小小于一个数据块的大小,它是不需要占用整个数据块的存储空间的。

2、文件切分

3、DN分配

4、数据写入

5、完成写入

6、角色定位

三、HDFS读文件


1、用户需求

HDFS采用的是“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。

2、先联系元数据节点

3、下载数据

前文提到在写数据过程中,数据存储已经按照客户端与DataNode节点之间的距离进行了排序,距客户端越近的DataNode节点被放在最前面,客户端会优先从本地读取该数据块。

4、思考

四、HDFS容错机制——第一部分:故障类型及监测方法


1、三类故障

(1)第一类:节点失败

(2)第二类:网络故障

(3)第三类:数据损坏(脏数据)

2、故障监测机制

(1)节点失败监测机制

(2)通信故障监测机制

(3)数据错误监测机制

3、回顾:心跳信息与数据块报告

HDFS存储理念是以最少的钱买最烂的机器并实现最安全、难度高的分布式文件系统(高容错性低成本),从上可以看出,HDFS认为机器故障是种常态,所以在设计时充分考虑到单个机器故障,单个磁盘故障,单个文件丢失等情况。

五、容错第二部分:读写容错


1、写容错

2、读容错

六、容错第三部分:数据节点(DN)失效


七、备份规则


1、机架与数据节点

2、副本放置策略

数据块的第一个副本优先放在写入数据块的客户端所在的节点上,但是如果这个客户端上的数据节点空间不足或者是当前负载过重,则应该从该数据节点所在的机架中选择一个合适的数据节点作为本地节点。

如果客户端上没有一个数据节点的话,则从整个集群中随机选择一个合适的数据节点作为此时这个数据块的本地节点。

HDFS的存放策略是将一个副本存放在本地机架节点上,另外两个副本放在不同机架的不同节点上。

这样集群可在完全失去某一机架的情况下还能存活。同时,这种策略减少了机架间的数据传输,提高了写操作的效率,因为数据块只存放在两个不同的机架上,减少了读取数据时需要的网络传输总带宽。这样在一定程度上兼顾了数据安全和网络传输的开销。


本文转自京东大数据微信公众号。

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

原文发表时间:2016-06-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链

CVE-Python webbrowser.py 命令执行漏洞分析

今日惊闻Python出现了CVE,问题出在Lib/webbrowser.py模块,看描述还十分严重。Python容易产生远程命令执行漏洞。攻击者可以利用此问题,...

25670
来自专栏安斌的专栏

再说TCP神奇的40ms

本文结合具体的 tcpdump 包,分析触发 delay ack 的场景,相关的内核参数, 以及规避的方案。

11.4K70
来自专栏CSDN技术头条

Java 程序员必备的 IntelliJ IDEA 插件

IntelliJ 在业界被公认为最好的 java 开发工具之一,尤其在智能代码助手、代码自动提示、重构、CVS 整合、代码审查、 创新的 GUI 设计等方面的功...

24450
来自专栏闵开慧

Hadoop功能性能

1 支持的语言 Java/SHELL/Python/ruby等各种支持标准输入输出的语言。 2 能够处理的文件大小 它支持比NFS大得多的文件大小。 3 支持的...

30380
来自专栏自动化测试实战

Robotframework第1课--安装RF

41060
来自专栏散尽浮华

Redis+TwemProxy(nutcracker)集群方案部署记录

Twemproxy 又称nutcracker ,是一个memcache、Redis协议的轻量级代理,一个用于sharding 的中间件。有了Twemproxy,...

496100
来自专栏hadoop学习

DKhadoop安装包下载与监控参数说明

前阶段用了差不多两周的时间把DKhadoop的运行环境搭建以及安装的各个操作都介绍了一遍。关于DKhadoop安装包下载也只是顺带说了一下,但好像大快搜索的服务...

11920
来自专栏一个默默无闻的工程师的日常

RabbitMQ Network Partition

19620
来自专栏后端技术探索

再说TCP神奇的40ms

TCP是一个复杂的协议,每个机制在带来优势的同时也会引入其他的问题。 Nagel算法和delay ack机制是减少发送端和接收端包量的两个机制, 可以有效减少网...

13030
来自专栏快乐八哥

安装Ubuntu时分区选择

最近购买来一台二手笔记本。型号是:Dell Latitude D520。回来之后就装上来Ubuntu12.04,开始是安装的UbuntuKylin 13.04。...

23580

扫码关注云+社区

领取腾讯云代金券