数据块备份的存放关系着hdfs的可靠性及性能。优化备份存储是hdfs区别于其它分布式文件系统的重要一点。rack aware机制是为了提高hdfs数据可靠性,可用性,网络带宽使用。
大规模的hdfs实例通常运行在跨不同机器不同平台架构的机器上,不同平台的节点之间通信需要经过交换机,同平台之间的带宽通常大于异构平台之间的带宽。
副本选择:
为了减少总体的带宽消耗和读延迟,hdfs尝试通过距离用户最近的副本来提供读服务。同架构节点优先提供服务,本地节点有限提供服务。
安全模式:
NameNode启动时,处于安全模式,此时数据节点不执行数据块复制,NameNode接收心跳及数据块报告,每一个数据块包含过个副本,当数据块副本数量匹配配置的复制因子,则NameNode认定数据块安全,当特定比例数据块被认定安
全后,NameNode离开安全模式,并检查还不满足复制因子的数据块,并进行复制操作。
系统元数据的持久化:
hdfs命名空间存储在NameNode。NameNode使用事务日志(Editlog)持续的记录系统元数据发生的所有变更,每次变更增加一条记录,Editlog存储在本地系统文件。全部的系统命名空间元数据,包括数据块到文件的映射及系统属性存储在文本地系统件FsImage中。
NameNode在内存中保存着一份系统命名空间及数据块映射镜像,当NameNode启动时,或者检测点触发,NameNode读取磁盘Fsimage及Editlog文件,将Editlog文件中的事务应用于内存中的Fsimage镜像,并将应用后的FsImage固化到磁盘生成新的FsImage文件。旧的Editlog即可被删除,这个过程称之为检测点,目的是通过系统元数据快照及固化FsImage来保持hdfs的一致性。FsImage的读取效率很高,但是修改效率低,为了避免FsImage的修改操作,NameNode将变更记录到Editlog,等到检测点触发,Editlog变更被应用固化到FsImage文件。
检测点( checkpoint )配置: dfs.namenode.checkpoint.period s间隔, dfs.namenode.checkpoint.txns 变更数间隔
数据节点将数据块存储在本地系统,数据节点无法识别hdfs文件,存储可能不同文件的不同数据块。数据节点避免将所有的文件数据块存储在同一文件目录下(本地文件系统限制),采用启发式算法来决定文件夹的创建及数据块的存放。
数据节点启动时,扫描本地文件系统产生一系列数据块到本地文件映射(blockreport),发送到NameNode。
通信协议
hdfs通信协议基于TCP/IP,客户端使用客户端协议于NameNode建立连接,数据节点使用数据节点协议(宝库奥客户端协议及数据节点协议)同NameNode建立连接,NameNode不主动发起连接,只回复客户端及数据节点的rpc连接请求。
健壮性:NameNode,数据节点,网络分区
数据节点保持着和NameNode之前的心跳,网络分区因素可能引起数据节点的失联。NameNode通过检测心跳信息识别失联数据节点,并标识节点失效,不再转发IO请求。失效节点存储的数据块将不再为hdfs使用,将会引起特定数据节点的复制因此不再满足,NameNode不间断的检测不满足复制因子的数据块,并在特定条件下(数据节点不可用,副本崩溃,硬盘损坏,文件复制因子变更)的时候启动复制。
数据节点失效判定超时配置:
数据一致性:
hdfs客户端文件实现了hdfs文件校验机制,客户端创建hdfs文件时,同时计算每个数据块校验和(CRC32算法),并将校验和存储在同一个hdfs命名空间的一个独立的隐藏文件中。当客户端接收到hdfs文件内容时,同时计算校验和和相关的校验和文件进行匹配。当某一个数据块不匹配,则执行从其它数据节点请求此数据块备份。
FsImage Editlog磁盘失效会引起hdfs无法工作,因此hdfs支持配置FsImage Editlog备份,备份间异步更新,可能引起吞吐量降低。NameNode重启时,选择最新的FsImage Editlog。
数据组织:
大数据文件,一次写入,多次读取,流式读取,标准大小数据块128m,一个文件会被分割为多个数据块,并尽可能的分配到不同的数据节点上。
当客户端向hdfs写入文件时,NameNode使用相应的目标选择算法获取特定复制因子数量的数据节点。客户端首先将数据写入第一个节点,第一个节点接收数据,写入本地存储,并传输给后续的数据节点,后续节点相应的执行。数据在数据节点间管道式流动复制。
备份因此修改后,只有等到下一次心跳,信息才会传送至数据节点,然后数据节点执行相应的数据块操作,存在操作时间差。
客户端请求NameNode获取文件元数据及修改信息,同数据节点执行实际的数据IO请求。
Secondary NameNode:
FsImage:最新的checkpoint文件。
主节点只在启动时执行FsImage及Editlog相关操作,二级节点运行期间定时管理FsImage及Editlog,控制FsImge在一定的大小范围。二级节点通常运行在不同的节点上。二级节点上最新的checkpoint和主节点上的checkpoint存储在相同的位置。以便可以让主节点使用。
定时与主节点同步(定期合并),并将最新FsImage传递给NameNode,清空Editlog,NameNode失效后,需要手动设置为主机。
checkpoint节点:
checkpoint节点不间断的创建命名空间的checkpoint文件。从活跃NameNode下载FsImage及Editlog,应用Editlog到FsImge,并将最新的FsImage到主NameNode。checkpoint运行在独立的服务器上。
配置地址: dfs.namenode.backup.address dfs.namenode.backup.http-address
配置启动: dfs.namenode.checkpoint.period 默认1h,执行checkpoint间隔; dfs.namenode.checkpoint.txns 间隔任务数
checkpoint节点存储最新checkpoint文件位置和主节点相同。
备份节点:
执行checkpoint节点相同的功能,同时保持一份内存镜像,实时和主节点异步更新,日常流式从主节点接收系统变更,固化到硬盘,同时应用到内存中的镜像。
备份节点不需要从主节点下载FsImage Editlog,因为内存中保存着最新的镜像备份。
配置备份节点可以不配置checkpoint节点。
暂时只支持一个本分节点,
bin/hdfs namenode -backup
配置:dfs.namenode.backup.address and dfs.namenode.backup.http-address
使用本分节点可以配置无持久化存储hdfs存储。
导入checkpoint:
* dfs.namenode.name.dir 配置空文件夹;
* dfs.namenode.checkpoint.dir配置chckepoint文件位置;
* 启动主NameNode -importCheckpoint option.
NameNode上传dfs.namenode.checkpoint.dir文件夹下checkpoint文件,保存到dfs.namenode.name.dir(确保空),。。。
* olicy to keep one of the replicas of a block on the same node as the node that is writing the block.
* Need to spread different replicas of a block across the racks so that cluster can survive loss of whole rack.
* One of the replicas is usually placed on the same rack as the node writing to the file so that cross-rack network I/O is reduced.
* Spread HDFS data uniformly across the DataNodes in the cluster.
数据节点存储热切换:
* If there are new storage directories, the user should format them and mount them appropriately.
* The user updates the DataNode configuration dfs.datanode.data.dir to reflect the data volume directories that will be actively in use.
* The user runs dfsadmin -reconfig datanode HOST:PORT start to start the reconfiguration process. The user can use dfsadmin -reconfig datanode HOST:PORT status to query the running status of the reconfiguration task.
* Once the reconfiguration task has completed, the user can safely umount the removed data volume directories and physically remove the disks.
HDFS两层架构:
命名空间(namespace):
文件夹、文件及数据块的一致性;支持所有和命名空间相关的文件系统操作(创建、删除、修改和文件及文件夹列表)
数据块存储服务:
数据块管理(NameNode)
维护数据节点关系(提供注册,心跳)
处理数据块报告及维护数据块存储位置
支持数据块相关的操作,创建,删除,修改及位置获取
管理数据块复制,复制不满足复制因子( under replicated)的数据块,删除超过复制因子 (over replicated)的数据块备份。
数据块存储(数据节点):
本地存储数据块,提供读写访问。
整个HDFS可存储的文件数受限于NameNode的内存大小
一个block在NameNode中对应一条记录,map task数量由splits决定,mapreduce处理大量小文件时,会产生大量map task,线程管理开销增加作业时间,建议处理大文件。
数据节点:
保存具体的block数据
负责数据的读写
定时向NameNode报告数据块信息,及更新信息
数据节点之前的通信,block复制,保证数据的冗余性。
读取:
配置:
core-site.xml:配置公共属性
hdfs-site.xml: 配置HDFS
yarn-site.xml: 配置YARN
mapred-site.xml: 配置MapReduce
- Hadoop基础入门
一.hadoop是什么? (1)Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式.Hadoop= ...
- 大数据Hadoop基础入门到精通
1.hadoop前世今生: 1) 搜索引擎:网络爬虫+索引服务器(生成索引+检索) 2) Doung Cutting 3) Nutch a.分布式存储 b.分布式计算 4)GFS论文 doung c ...
- Hadoop学习笔记—2.不怕故障的海量存储:HDFS基础入门
一.HDFS出现的背景 随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多 ...
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
- 【原创 Hadoop&Spark 动手实践 5】Spark 基础入门,集群搭建以及Spark Shell
Spark 基础入门,集群搭建以及Spark Shell 主要借助Spark基础的PPT,再加上实际的动手操作来加强概念的理解和实践. Spark 安装部署 理论已经了解的差不多了,接下来是实际动手实 ...
- Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)
Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是c ...
- Hadoop基础-MapReduce的工作原理第一弹
Hadoop基础-MapReduce的工作原理第一弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在本篇博客中,我们将深入学习Hadoop中的MapReduce工作机制,这些知识 ...
- hadoop基础----hadoop理论(四)-----hadoop分布式并行计算模型MapReduce具体解释
我们在前一章已经学习了HDFS: hadoop基础----hadoop理论(三)-----hadoop分布式文件系统HDFS详细解释 我们已经知道Hadoop=HDFS(文件系统,数据存储技术相关)+ ...
- 1.2 Hadoop快速入门
1.2 Hadoop快速入门 1.Hadoop简介 Hadoop是一个开源的分布式计算平台. 提供功能:利用服务器集群,根据用户定义的业务逻辑,对海量数据的存储(HDFS)和分析计算(MapReduc ...
随机推荐
- 小米root
ROOT之前,需要做几个准备工作: 首先,你需要去MIUI官网解锁,解锁教程见MIUI官网(百度搜索 MIUI解锁,第一个就是),然后根据官方指导进行解锁: 然后,因为MAX2的ROOT是卡刷,所以解 ...
- UICollectionViewFlowLayout 的 estimatedItemSize 属性
这个是collectionView的item 自适应fram的属性, 介绍在网上很多, 但是用法没有太多的举例, 其实这个属性的使用也很简单, 随便给它的不为CGSizeZero的值就好, 但是, 但 ...
- 编译nginx错误:make[1]: *** [/pcre//Makefile] Error 127
--with-pcre=DIR 是设置源码目录,而不是编译安装后的目录.
- Oracle下通过EXPDP导出某用户下的所有表,实例
一开始在所数据库表导入,导出的时候,经常发现含有BLOB等大数据类型文件无法简单正常的导入导出(imp/dmp),然后在网上得知oracle 10以后有了(impdp/dmpdp)命令,数据导入导出的 ...
- eclipse手动安装alibaba代码规范插件+取消阿里编码规约插件扫描出来的警告及错误
如果你的开发环境无法访问外网,那么手动安装阿里巴巴的代码规范插件是一个不错的选择.另外,很多教程说该插件需要jdk1.8以上,我试了一下jdk1.7也是可以运行的,更低的版本就不知道了,貌似jdk1. ...
- MySQL架构与引擎初识
一.MySQL逻辑架构 1.连接层: 最上层是一些客户端和连接服务,所包含的服务并不是MySQL所独有的技术.它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等. 2.服 ...
- py基础__socket编程
目录 Python基础__socket编程 1.计算机网络 2.socke编程 3.socketserver模块 4.思考 Python基础__socket编程 1.计算机网络 1.OSI网络七层模型 ...
- C# Redis写入程序
直接贴代码,需要引用ServiceStack.Common.dll,ServiceStack.Interfaces.dll,ServiceStack.Redis.dll,ServiceStack.Te ...
- Error evaluating expression ''xxx''. Cause: org.apache.ibatis.ognl.NoSuchPropertyException:
1.检查实体类相应的字段名以及set,get方法(仔仔细细看) 2.检查mapper.xml取值字段 3.注意实体类中isDelete等类似 isXxx的字段 set get方法会变成GetDelet ...
- [译]C语言实现一个简易的Hash table(6)
上一章中,我们实现了Hash表中的插入.搜索和删除接口,我们在初始化hash表时固定了大小为53,为了方便扩展,本章将介绍如何修改hash表的大小. 设置Hash表大小 现在,我们的hash表是固定大 ...