数据块备份的存放关系着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 ...
随机推荐
- 如何异步的处理restful服务(基础)
1.使用Runnable 2.使用DeferredResult 3.异步处理的一些配置 正常请求方式 package com.nxz.controller; import lombok.extern. ...
- FLV封装格式分析
FLV官方文档:https://github.com/jiayayao/DataSheet/tree/master/media%20format/flv 一.FLV格式 FLV包括文件头(FLV he ...
- e2fsprogs
开源文件系统ext2/ext3/ext4管理工具e2progs包含的工具组件: 1.debugfs: ext2/ext3/ext4文件系统调试工具.debugfs是一个交互式的文件系统调试工具,可以用 ...
- Python装饰器高级用法
在Python中,装饰器一般用来修饰函数,实现公共功能,达到代码复用的目的.在函数定义前加上@xxxx,然后函数就注入了某些行为,很神奇!然而,这只是语法糖而已. 场景 假设,有一些工作函数,用来对数 ...
- 修改 Hue 默认数据库
Hue 更改默认数据 1. 需要安装 mysql 一下包 mysql-server mysql-devel mysql-shared mysql-client mysql-python shared ...
- vue中的slot(插槽)
vue中的插槽----slot 什么是插槽? 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性. ...
- MySQL学习【第十一篇存储引擎之事务解释】
一.innodb的核心特点------事务 1.什么是事务 在一组数据操作执行步骤,这些步骤被视为一个单元,主要针对dml语句(update.delete.insert) 2.事务ACID特性 Ato ...
- MySQL无法启动重启竟是因为改了Linux主机名
MySQL无法重启.无法关闭.无法启动.无法使用,如果是因为修改了主机名,可以这样解决:关闭掉所有mysql进程,然后在启动一些mysql! 有时候,只要执行如下MySQL初始化命令即可解决:/usr ...
- shell习题第10题:打印每个单词的字数
[题目要求] 用shell打印下面这句话中字母数小于6的单词. Bash also interprets a number of multi-character options. [核心要点] for ...
- 使用babel插件集
1).打开配置文件".babelrc",配置插件集,代码如下: { "presets":["latest"] } 2).安装babel插件集 ...