1.HDFS设计基础与目标

1.HDFS设计基础与目标

(1)硬件错误是常态,因此需要冗余。

(2)流式数据访问。即数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理。

(3)大规模数据集

(4)简单一致性模型。为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,即是文件一经写入,关闭,就再也不能修改

(5)程序采用“数据就近”原则分配节点执行。

2.HDFS体系结构

  • Namenode
  • Datanode
  • 事务日志
  • 映像文件
  • SecondaryNameNode

2.1Namenode

  • ○管理文件系统的命名空间
  • ○记录每个文件数据块在各个Datanode上的位置和副本信息
  • ○协调客户端对文件的访问
  • ○记录命名空间内的改动或空间本身属性的改动

    -○Namenode使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。

2.2Datanode

  • ○负责所在物理节点的存储管理
  • ○一次写入,多次读取(不修改)
  • ○文件由数据块组成,典型代表的块大小为64MB
  • ○数据块尽量散步到各个节点

3.读取数据流程

客户端要访问HDFS中的一个文件,

(1)从namenode获得组成这个文件的数据块位置列表,

(2)根据列表知道存储数据块的datanode,

(3)访问datanode获取数据。

namenode并不参与数据实际传输

4.HDFS的可靠性

  • ○冗余副本策略
  • ○机架策略
  • ○心跳机制
  • ○安全模式
  • ○校验和
  • ○回收站
  • ○元数据保护
  • ○快照机制

4.1冗余副本策略

(1)可以在hdfs-site.xml中设置复制因子指定副本数量

(2)所有数据块都有副本

(3)Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表(blockreport)汇报给namenode

4.2机架策略

(1)集群一般放在不同机架上,机架间带宽要比机架内带宽要小

(2)HDFS的“机架感知”

(3)一般在本机架存放一个副本,在其它的机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提高带宽利用率

4.3心跳机制

  • namenode周期性从datanode接收心跳信号和块报告
  • namenode根据块报告验证元数据
  • 没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求
  • 如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重新复制
  • 引发重新复制的原因还包括数据副本本身损坏、磁盘错误、复制因子被增大等等

4.4安全模式

  • namenode启动时会先经过一个“安全模式”阶段
  • 安全模式阶段不会产生数据写
  • 在此阶段namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的
  • 在一定比例(可设置)的数据块被确定为”安全“后,再过若干时间,安全模式结束
  • 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数

4.5校验和

  • 在文件创立时,每个数据块都产生校验和
  • 校验和会作为一个单独隐藏文件保存在命名空间空间下
  • 客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏
  • 如果正在读取的数据块损坏,则可以继续读取其它的副本

4.6回收站

  • 删除文件时,其实是放入回收站/trash
  • 回收站里的文件可以快速恢复
  • 可以设置一个时间阈值,当回收站里的文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块

4.7元数据保护

  • 映像文件刚和事务日志是namenode的核心数据。可以配置为拥有多个副本
  • 副本会降低namenode的处理速度,但增加安全性
  • namenode依然是单点,如果发生故障要手工切换

4.8快照

  • 支持存储某个时间点的映像,需要时可以使数据重返地球这个时间点的状态

5.HDFS文件操作

  • 命令行方式
  • API方式

    (这个具体操作留后再讨论)

hadoop笔记之hdfs的更多相关文章

  1. hadoop笔记之hdfs shell操作

    HDFS命令行操作 HDFS命令行操作 (以下是hadoop 1.x 版本的命令使用) 装好hadoop之前首先要进行一个格式化 hadoop namenode -format 运行之后,可以将文件夹 ...

  2. Hadoop学习笔记(2)-HDFS的基本操作(Shell命令)

    在这里我给大家继续分享一些关于HDFS分布式文件的经验哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程序设计.在前面我已经写了关于如何去搭建hadoop这样一个大数据平 ...

  3. Hadoop集群-HDFS集群中大数据运维常用的命令总结

    Hadoop集群-HDFS集群中大数据运维常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客会简单涉及到滚动编辑,融合镜像文件,目录的空间配额等运维操作简介.话 ...

  4. Hadoop官方文档翻译——HDFS Architecture 2.7.3

    HDFS Architecture HDFS Architecture(HDFS 架构) Introduction(简介) Assumptions and Goals(假设和目标) Hardware ...

  5. hadoop 2.5 hdfs namenode –format 出错Usage: java NameNode [-backup] |

    在 cd  /home/hadoop/hadoop-2.5.2/bin 下 执行的./hdfs namenode -format 报错[hadoop@node1 bin]$ ./hdfs nameno ...

  6. Hadoop 分布式文件系统 - HDFS

    当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...

  7. Hadoop 2.x HDFS新特性

    Hadoop 2.x HDFS新特性 1.HDFS联邦    2. HDFS HA(要用到zookeeper等,留在后面再讲)    3.HDFS快照 回顾: HDFS两层模型     Namespa ...

  8. 何时使用hadoop fs、hadoop dfs与hdfs dfs命令(转)

    hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...

  9. 何时使用hadoop fs、hadoop dfs与hdfs dfs命令

    hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...

随机推荐

  1. SpringMVC中的异步提交表单

    1.前言 近期在做一个项目,前台框架用的是EasyUI+SpringMVC,因为对SpringMVC不太了解,所以刚開始接触的时候有点吃力,在此通过一个EasyUi中的DataGrid表格来总结一下. ...

  2. asp.net 超链接 下载TEXT文件,而不是直接在IE中打开

    问题描述:后台生成了文本文件,用超链接提供给用户下载.点击超链接,下载Excel文件没问题,但文本文件会直接被打开,而不是弹出下载窗口. 解决方法:把HyperLink改为LinkButton,在Cl ...

  3. C#中一个问号和两个问号(a ?? b)的作用

    不卖关子,直接开门见山: C#中两个问号的作用是判断??左边的对象是否为null,如果不为null则使用??左边的对象,如果为null则使用??右边的对象. 比如:a = b ?? c,如果b为nul ...

  4. [树结构]平衡二叉树AVL

    平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度至多等于1,平衡二叉树又称为AVL树. 将二叉树节点的左子树深度减去右子树深度的值称为平衡因子BF,平衡二叉树上所有节点的平衡因子只可能 ...

  5. [C++基础]在构造函数内部调用构造函数

    看下面的面试题: #include <iostream> using namespace std; struct CLS { int m_i; CLS( int i ) : m_i(i){ ...

  6. OC语法10——@protocol协议,

    参考资料:博客 @protocol,协议: OC中protocol的含义和Java中接口的含义是一样的,它们的作用都是为了定义一组方法规范. 实现此协议的类里的方法,必须按照此协议里定义的方法规范来. ...

  7. js函数定时器,定时读取系统实时连接数

    function GetDeviceInfo() {     setInterval(function()         {         GetDeviceRealtimeConnect();  ...

  8. You have not agreed to the Xcode license.

    You have not agreed to the Xcode license. Before running the installer again please agree to the lic ...

  9. jquery学习(2)--选择器

    jquery-李炎恢学习视频学习笔记.自己手写. 简单的选择器    css 写 法: #box{ color:#f00;}    //id选择器    jquery获取:$('#box').css( ...

  10. 手机触屏的js事件

    处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件:     1.touchstart:  // 手指放到屏幕上的时候触发      2.touchmove:  // ...