您的位置:首页 > 运维架构

Hadoop分布式文件系统——HDFS

2016-02-04 19:56 330 查看



一、HDFS介绍

HDFS为了做到可靠性(reliability)创建了多份数据块(data blocks)的复制(repiicas)

,并将它们放置在服务器群的计算节点中(compute nodes),MapReduce就可以在

它们所在的节点上处理这些数据了。

NameNode

(1)存储元数据
(2)元数据保存在内存中
(3)保存文件,block,datanode之间的映射关系

DataNode

(1)存储文件内容
(2)文件内容保存在磁盘
(3)维护了block id到dataNode本地文件的映射关系

二、HDFS运行机制

一个名字节点和多个数据节点
数据复制(冗余机制)

--存放的位置(机架感知策略)
故障检测

--数据节点

心跳包(检测是否宕机)

块报告(安全模式下检测)

数据完整性检测(校验和比较)

--名字节点

日志文件

镜像文件

空间回收机制

二、HDFS优缺点

HDFS优点

(1)容错性

◆数据自动保存多个副本

◆数据丢失后,自动恢复

(2)适合批处理

◆移动计算而非数据

◆数据位置暴露给计算框架

(3)适合大数据处理

◆GB、TB、甚至PB级数据

◆百万规模以上的文件数量
◆10K+节点

(4)可构建在廉价机器上

◆通过多副本提高可靠性
◆提供了容错和恢复机制

HDFS缺点

(1)低延迟数据访问

◆比如毫秒级

◆低延迟与高吞吐率

(2)小文件存取

◆占用NameNode大量内存

◆寻道时间超过读取时间

(3)并发写入、文件随机修改

◆一个文件只能有一个写者

◆仅支持append

三、HDFS架构



HDFS数据存储单元(block)

———DataNode节点中的彩色方块

(1)文件被切分成固定大小的数据块

默认数据块大小为64MB,可配置。

若文件大小不到64MB,则单独存成一个block。

(2)一个文件存储方式

按大小被切分成若干个block,存储到不同节点上。

默认情况下每个block都有三个副本

(3)Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更



NameNode(NN)

(1)主要功能:接受客户端的读写服务
(2)保存metadate信息包括

文件owership和permission

文件包含哪些块

Block保存在哪些个DataNode(由DataNode启动时上报)

(3)NameNode的metadata信息在启动后会

metadata存储到磁盘文件名为“fsimage”

Block的位置信息不会保存到fsimage

edits记录对metadata的操作日志

注意:当出现更新数据操作时,并不会直接写入fsimage文件,而是在edits中保存记录,
edits和fsimage文件每过一段时间会进行一次合并

SecondaryNameNode(SNN)

(1)它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log ,减少NN启动时间.
(2)SNN执行合并时机

根据配置文件设置的时间间隔 fs.checkpoint.period 默认3600秒
根据配置文件设置 edits log 大小 fs.checkpoint.size 规定edits文件的最大值默认是64M
SNN合并edits文件和 fsimage文件

注意:SNN获取edits的同时创建edits.new文件



DataNode(DN)

(1)存储数据(Block)
(2)启动DN线程的时候会向NN回报block信息
(3)通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,
并copy其上的block到其他DN

Block的副本放置策略

注意

(1)第一个副本:放置在上传文件的DN;

如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点

(2)第二个副本:放置在与第一个部分不同的机架的节点上

(3)第三个副本:与第二个副本相同机架的节点

(4)更多副本:随机节点



四、HDFS读、写数据流程

HDFS读数据流程

(1)客户端发送请求:调用Distributed FileSystem API 的open方法发送请求到 NameNode 获得block的位置信息,
NameNode返回所有的block的位置信息
(2)读取数据: 通过FSData InputStream 并发读取block




HDFS写数据流程

(1)创建文件元信息:调用Distributed FileSystem API 的create方法发送请求到 NameNode 创建文件(文件名,文件大小......)

通过文件大小,NameNode可以算出来文件需要切多少block,这些block分别存储在哪些DataNode

(2)写入数据:首先把第一个block写到其中一个DataNode上,由这个DataNode产生新的线程按照副本放置规则,向其他的

DataNode复制副本,完成复制副本的操作后,向客户端发送反馈信息

(3)向NameNode汇报上传文件操作完成




HDFS文件权限

(1)与Linux文件权限类似

r : read ; w : write ; x : execute , 权限x对于文件忽略,对于文件夹表示是否允许访问其内容

(2)如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件再HDFS中owner就是zhangsan。
(3)HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。
HDFS相信,你告诉我你是谁,我就认为你是谁。

五、Hadoop安全模式

(1)NameNode启动的时候,首先将映射文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。

(2)一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondoryNameNode)和一个空的编辑日志。

(3)此刻NameNode运行在安全模式。即NameNode的文件系统对于客户端来说是只读的。(显示目录,
显示文件内容等。写、删除、重命名都会失败)。

(4)在此阶段NameNode收集各个DataNode的报告,当数据块达到最小副本数以上时,会被认为是“安全”
的,在一定比例(可设置)的数据块被确定为"安全"后,再过若干时间,安全模式结束

(5)当检测到副本数不足的数据块时,该块会呗复制知道达到最小副本数,系统中数据库块的位置并不是
由NameNode维护的,而是以块列表形式存储在DataNode中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息