为什么会存在这篇文章,是因为我产生了以下问题,为了理清关系并解决疑惑。
什么是hdfs?
需要搭建什么样的环境?
hdfs只是一个名词,还是需要人为的去搭建环境?
很多文章都在说hdfs的原理,我就想知道需不需要我去搭建?
来自hadoop官网的截图:
简单点,hadoop处理大数据,那么必然面对数据的存储问题,所以有了hdfs(分布式文件存储系统)。
hdfs是hadoop的重点组件之一,提供对数据存储的接口访问。
须知:
a.
分布式。
如果一个文件非常大,单台服务器无法处理
第一步,分割成小文件
第二步,将小文件分散到多台服务器之上。服务器并行计算,提高效率。
这就是一个分布式的存储。
b.
副本。
为防止因为各种原因造成的文件丢失(比如,由某台机器损坏而导致的文件丢失),对一个文件,我们应该存储几个副本,备份。
c.
hdfs的原理与hdfs的实现
1.hdfs的原理
(1)先解释NameNode与DateNode:什么是?&&存在的原因
由一台服务器到多台服务器
服务器集群:将很多服务器集中起来一起进行同一种服务,集群可以利用多个计算机进行并行计算从而获得很高的计算速度。
HDFS部署在一个比较大的服务器集群上。
为了可以更好的提高效率,我们从众多的服务器中选择一台,让她作为一个中心服务器,负责调度 、对其他服务器是否正常工作以及存储了哪些数据进行一个记录。
想想,当你要查找一个文件时,通过在中心服务器中的相应记录中查找确定文件位置快,还是在海量的数据中逐一对比查找快,必然是前者效率更高。
这台中心服务器,我们称她为NameNode。其他服务器,称之为DateNode。
NameNode:一个中心服务器。主节点 ,管理结点 , 知道DateNode的存活状态 存储数据的元数据信息。
DateNode :从节点 ,要告诉NameNode她上块的位置 ,利用系统本身的文件系统存储真实的文件块。
NameNode | DateNode | |
存储 | 基于内存存储(不会和磁盘发生交换) | 本地磁盘目录存储数据,文件形式 |
主要功能 | (1)接受客户端的读写服务 (2)知道DateNode的存活状态 (3)存储数据的元数据信息 (2)收集DateNode汇报的Block列表信息 | (1)启动DateNode时会向NameNode汇报block信息 (2)通过向NameNode发送心跳保持与其联系(3秒一次),如果NameNode10分钟没有收到DateNode的心跳,则认为其已经lost,并copy其上的block到其他的DateNode |
(2)以上传a.txt为例。
图解:
当客户端上传存储文件a.txt时, 如默认以128M大小分割文件,200M的a.txt文件分割成两个数据块进行存储,128M与72M。
1.客户端向NameNode发送上传文件a.txt的请求
2.NameNode返回客户端允许上传的信息
3.客户端将数据块上传到元数据中
4.NameNode根据请求,并结合DateNode的信息,返回DateNode的ip
5.客户端与DateNode1建立连接。与此同时,DateNode1与DateNode3之间也建立传输数据的通道,直到最后一个为止。依次返回传输数据通道建立完毕信息 , 直到响应给客户端。dn*把接收到的packet保存到指定的目录中 , 并且把packet继续往后发 , 直到最后一个。发送完毕后反方向追个返回ack应答 , 保证packet的安全稳定 , 直到返回给客户端。
待第一块上传完毕 , 客户端按照上述流程走一遍 , 上传第二个块 , 从第3步开始 , 重新发起请求 , 寻找可用的dn位置
待所有块上传完毕 , 客户端把信息告知NameNode , NameNode把信息同步到文件系统的元数据中。
在说HDFS的原理时,只谈NameNode与DateNode是浅尝辄止的,还可以深入的谈一谈NameNode持久化(fsimage、edits、redis)、secondary NameNode、副本放置策略、hdfs读取或写入文件的过程详解等。
2.hdfs的环境搭建
(1)hadoop多节点集群安装配置,环境配置成功。
(2)修改配置文件。(这一步,指定NameNode与DateNode)
(3)启动hdfs。
(2)(3)可以参考HDFS环境搭建及命令演示