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中。
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 单机版搭建Hadoop环境图文教程详解
- hadoop常见错误以及处理方法详解
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- Apache Hadoop版本详解
- linux下搭建hadoop环境步骤分享
- java连接hdfs ha和调用mapreduce jar示例
- java实现将ftp和http的文件直接传送到hdfs
- hadoop client与datanode的通信协议分析
- hadoop中一些常用的命令介绍
- Hadoop单机版和全分布式(集群)安装
- 用PHP和Shell写Hadoop的MapReduce程序
- hadoop map-reduce中的文件并发操作
- Hadoop1.2中配置伪分布式的实例
- java结合HADOOP集群文件上传下载