注:文中涉及的文件路径或配置文件中属性名称是针对hadoop2.X系列,相对于之前版本,可能有改动。

附:

HDFS用户指南官方介绍:

http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html

HDFS体系结构官方介绍:

http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

HDFS

Hadoop Distributed Filesystem(hadoop分布式文件系统)

假设及设计目标

  • 硬件故障很常见:HDFS集群可能包含成百上千台机器,每台机器都非常有可能发生故障。检测故障并快速、自动的恢复是HDFS体系的一个核心目标。
  • 流式的访问数据:HDFS是为批处理而设计,不是为了交互式用户使用。
  • 存储超大文件
  • 一次写入,多次读取是最高效的访问模式
  • 移动计算比移动数据更便宜:移动计算到接近于数据存储的地方,比移动数据到应用运行的地方更好。
  • 可移植性
  • 运行于商用硬件

不擅长的领域

  • 低时间延迟的数据访问
  • 存储大量的小文件
  • 多用户写入,任意修改文件

数据块

  

  存储于HDFS中的文件被分割为1个或多个块。

  

  hadoop中文件块默认为64M(hdfs-default.xml中dfs.blocksize属性定义),小于一个块大小的文件不会占用整个块的空间。

  HDFS中块如此之大,其目的是为了最小化寻址开销:如果块设置的足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需时间。

  但也不宜设置过大,map任务通常一次只处理一个块的数据,如果任务数太少,作业运行速度就比较慢。

  块非常适合用于数据备份进而提供数据容错能力和提高可用性。HDFS默认为块保存3个副本(hdfs-default.xml中dfs.replication属性定义)。

HDFS体系结构

  HDFS中运行着2类节点namenode、datanode。一个namenode、多个datanode,namenode和datanode以主从(master-slave)模式运行与HDFS集群中。

  namenode为管理节点,执行对文件系统命名空间的操作,如:打开、关闭和重命名文件或目录;并且决定文件块与datanode之间的映射关系。

  datanode为工作节点,存储并检索数据块,并定期向namenode发送它们存储的块的列表,接收来自namenode的文件块创建、删除和复本改进等命令。

  

namenode

  namenode管理文件系统的命名空间,维护着文件系统树及整棵树内所有的文件和目录的元数据,这些信息以两个文件形式保存在本地磁盘上:命名空间镜像和编辑日志。

  对于文件来说,其元数据信息可能包含复本级别、修改时间和访问时间、访问许可、块大小、组成一个文件的块等;

  对于目录来说,可能包含信息有修改时间、访问许可和配额元数据等。

  

  namenode运行时,文件系统的元数据是维护在内存中的(这是为什么运行namenode的机器需要较大的内存,也是为什么HDFS不适合存储大量小文件的原因:创建大量的小文件会急速的消耗掉namenode的内存)。

  而命名空间镜像是文件系统元数据的一个永久性检查点,将元数据序列化保存于本地磁盘。并不是每次操作都会更新该文件,因为fsimage是一个大型文件,频繁操作会使系统极为缓慢。

  对文件系统和其属性的修改会先记录在编辑日志中。

  进入namenode数据本地保存目录 {dfs.namenode.name.dir},{dfs.namenode.name.dir}/current 下,可以查看到如下类型的文件:edits文件为编辑日志,fsimage文件为命名空间镜像。

  

HDFS Federation

  因为namenode在内存中保存元数据,这意味着对于一个拥有大量文件的超大集群来说,内存将成为限制系统横向扩展的瓶颈。

  Hadoop2.x系列中引入了联邦HDFS,允许系统通过添加namenode实现扩展,每个namenode管理文件系统命名空间中的一部分。

  

  

  块池(block pool):属于某一命名空间(NS)的一组文件块。

  联邦环境下,每个namenode维护一个命名空间卷(namespace volume),包括命名空间的元数据和在该空间下的文件的所有数据块的块池。

  namenode之间是相互独立的,两两之间并不互相通信,一个失效也不会影响其他namenode。

  datanode向集群中所有namenode注册,为集群中的所有块池存储数据。

datanode

  datanode使用本地文件系统保存集群中的文件块信息,进入datanode数据本地保存目录{dfs.datanode.data.dir}

  {dfs.datanode.data.dir}/current/BP-xxx表示某一命名空间的块池,因未配置联邦HDFS,只有一个namenode,所以只有一个块池目录。

  {dfs.datanode.data.dir}/current/BP-xxx/current/finalized是存储数据的目录,包含两类文件:包含文件原始数据的HDFS块和块的元数据(.meta后缀的文件)。当目录中数据块的数量增加到一定规模时,datanode会创建一个新的子目录来存放新的数据块及其元数据信息,目的是设计一颗高扇出的目录树,即使文件系统中块的数量非常多,目录树的层数也不多,同时避免很多文件都放在同一个目录之中。

  

HDSF启动及安全模式

  从启动脚本/sbin/start-dfs.sh中可以看出,HDFS启动时,先启动namenode,后启动datanode,再启动secondarynamenode(介绍在下面)。

  

  

  namenode启动时首先将fsimage载入内存,并执行编辑日志中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。

  系统中数据块的位置不是由namenode维护的,而是以块列表的形式存储在datanode中。系统启动时由datanode向namenode发送最新的块列表信息,从而在namenode内存中构建一份块位置的映射信息。也就是说,namenode启动后的一段时间里,namenode可能还不了解或了解很少的数据块和datanode之间的映射信息,但这并不意味着系统中的文件块复本数不足(不足时会进行文件块的复制)。

  所以namenode启动时首先运行于安全模式,即对于客户端是只读的。安全模式下namenode不会向datanode发出任何块复制或删除指令,这时是没有必要的,namenode只需等待更多的datanode发送块列表信息即可,当接收到足够多的块位置信息,满足“最小复本条件”后,namenode会在30秒后退出安全模式。

  最小复本条件是指:整个文件系统中有99.9%(由dfs.namenode.safemode.threshold-pct指定)的块满足最小复本级别(默认值是1,由dfs.namenode.replication.min指定)。

  另外也可以手动进入或离开安全模式,命令:

[hadoop@localhost sbin]$ hdfs dfsadmin -safemode
Usage: java DFSAdmin [-safemode enter | leave | get | wait]

secondarynamenode

  在业务繁忙的集群中,编辑日志可能会随时间推移变得很大,这会造成下次namenode启动时用时过长。

  SecondaryNameNode定期地合并fsimage和Edits日志文件,并保持Edits日志文件的大小在一个上限值内,由于它的内存需求与NameNode的一致,所以它通常运行在NameNode以外的一台机器上。Secondary NameNode以NameNode目录结构的相同方式存储合并后的命名空间镜像的副本,以备在namenode发生故障时使用。

  但secondarynamenode已过时,可以考虑使用Checkpoint Node或Backup Node替代之。

Checkpoint Node

  Checkpoint Node周期性的创建namespace的检查点,它从活动的namenode下载fsimage和edit日志,在本地合并,并把合并后新的fsimage上传到活动的namenode。

  Checkpoint Node以与NameNode相同的目录结构存储最新的Checkpoint。新的检查点时刻准备好在namenode需要时对其进行读取。

Backup Node

  Backup Node 不但提供了同checkpoint node一样的checkpoint功能,而且还通过同步活动namenode的状态,在内存中维护了一份文件系统命名空间的最新拷贝。                       Backup node从namenode接收文件系统Edits流并持久化到磁盘,同时还应用那些Edits到自己内存中的Namespace复本,如此就建立了Namespace的备份。

  Backup node不需要像checkpoint node或secondary namenode一样,为了创建检查点,需要从活动的namenode上下载fsimage和edits文件,因为在它的内存中已经有了命名空间的最新状态。Backup Node的Checkpoint处理效率很高,因为它只需要保存Namespace到本地fsimage并重设Edits文件。

hadoop2.5.2学习及实践笔记(三)—— HDFS概念及体系结构的更多相关文章

  1. hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse

    生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...

  2. hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览

    对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...

  3. hadoop2.5.2学习及实践笔记(五)—— HDFS shell命令行常见操作

    附:HDFS shell guide文档地址 http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/FileSy ...

  4. hadoop2.5.2学习及实践笔记(六)—— Hadoop文件系统及其java接口

    文件系统概述 org.apache.hadoop.fs.FileSystem是hadoop的抽象文件系统,为不同的数据访问提供了统一的接口,并提供了大量具体文件系统的实现,满足hadoop上各种数据访 ...

  5. hadoop2.5.2学习及实践笔记(一)—— 伪分布式学习环境搭建

    软件 工具:vmware 10 系统:centOS 6.5  64位 Apache Hadoop: 2.5.2  64位 Jdk:  1.7.0_75  64位 安装规划 /opt/softwares ...

  6. 【后台管理系统】—— Ant Design Pro入门学习&项目实践笔记(三)

    前言:前一篇记录了[后台管理系统]目前进展开发中遇到的一些应用点,这一篇会梳理一些自己学习Ant Design Pro源码的功能点.附:Ant Design Pro 在线预览地址. Dashboard ...

  7. Vue学习计划基础笔记(三)-class与style绑定,条件渲染和列表渲染

    Class与style绑定.条件渲染和列表渲染 目标: 熟练使用class与style绑定的多种方式 熟悉v-if与v-for的用法,以及v-if和v-for一起使用的注意事项 class与style ...

  8. Hadoop学习笔记(三) ——HDFS

    参考书籍:<Hadoop实战>第二版 第9章:HDFS详解 1. HDFS基本操作 @ 出现的bug信息 @-@ WARN util.NativeCodeLoader: Unable to ...

  9. 《JavaScript 高级程序设计》读书笔记三 基本概念

    一   语法 区分大小写,驼峰式书写方式: 严格模式:“use strict”: 二  数据类型 a. 基本数据类型: undefined 声明变量未初始化 null 空指针,可以释放内存 Boole ...

随机推荐

  1. 第44章 MPU6050传感器—姿态检测—零死角玩转STM32-F429系列

    第44章     MPU6050传感器—姿态检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  2. quartz的持久化任务调度使用应用的dataSource

    Quartz提供两种基本作业存储类型--->第一种类型叫做RAMJobStore:     最佳的性能,因为内存中数据访问最快     不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所 ...

  3. Python测量时间,用time.time还是time.clock

    在计算机领域有多种时间.第一种称作CPU时间或执行时间,用于测量在执行一个程序时CPU所花费的时间.第二种称作挂钟时间,测量执行一个程序时的总时间.挂钟时间也被称作流逝时间或运行时间.与CPU时间相比 ...

  4. C语言结构体排序

    定义学生信息结构体和结构体数组,包括学号.两门百分制成绩和姓名;键盘输入 学生不多于 30 人的信息,以输入成绩为负数或大于 100 作为输入结束;按照学号和平均成绩排序,并输出学生信息 //输入学生 ...

  5. 协议:Http Https TCP/IP

    Http协议 1.1 Http概述 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则.HTTP就是一个通 ...

  6. ubuntu修改IP地址和网关的方法

    一.使用命令设置Ubuntu IP地址 1.修改配置文件blacklist.conf禁用IPV6 sudo vi /etc/modprobe.d/blacklist.conf 表示用vi编辑器(也可以 ...

  7. h5页面苹果端浮动问题

    最近在开发一个h5的app端,前端同事写好页面,我们后端java动态化页面,测试的时候发现安卓端什么浏览器都正常如下图1,可是苹果端无论什么浏览器都出现了底部菜单缺少了两个下图2图一:正常显示 图2, ...

  8. [BZOJ1927]星际竞速(费用流)

    Description 题意:给定n个点m条边的无向图,只能从编号小的到编号大的,且要求经过所有点刚好一次,而且可以从任意点瞬移到i号点并花费代价Ai,求最小代价. n<=800,m<=1 ...

  9. Echarts 解决饼图文字过长重叠的问题

    之前在网上查找了很多关于解决饼图文字描述过长导致重叠的问题,找了很多一直没有一个合适的解决方案,最后自己只能花时间研究echarts文档,功夫不负有心人,终于解决了文字重叠展示不全等问题. 废话不多说 ...

  10. [bzoj3071]N皇后

    哈哈哈水题~ 但是不能一眼看出来的..我想了一个小时?! 题面 Description “国际象棋中,一方的皇后数不能超过5个” 一个N*N的棋盘,任意摆放皇后,最坏情况下最少需要多少个皇后才能保证所 ...