一、HDFS概述

1、HDFS设计思想来源于Google的GFS,是GFS的开源实现。

2、HDFS要解决的问题:

-存储超大文件,比如TB级别

-防止文件丢失。

3、HDFS的特点

-可以存储超大文件

-只允许对一个已经打开的文件顺序写入,还可以在现有文件的末尾追加,要想修改一个文件(追加内容除外),只能删除后再重写

-可以使用廉价的硬件平台搭建,通过容错策略来保证数据的高可用,默认存储3份数据,任何一份丢失可以自动恢复

4、HDFS的缺点:

-数据访问延迟比较高,因为它的设计场景是用于大吞吐量数据,HDFS是单master,所有文件都要经过它,当请求数据量很大时,延迟就增加了

-文件数受限,和NameNode有关系

-不支持多用户写入,也不支持文件任意修改

二、HDFS的核心概念

1、数据块(block):大文件会被分割成多个block进行存储,block大小默认为64MB,每一个block会在多个DataNode上存储多份副本,默认是3份。

2、NameNode:NameNode负责管理文件目录、文件和block的对应关系以及block和DataNode的对应关系。

3、SecondaryNameNode:分担NameNode的工作量,它的主要工作是合并fsimage(元数据镜像文件)和fsedits(元数据操作日志)然后在发给NameNode。

4、DataNode:DataNode就负责存储了,大部分容错机制都是在DataNode上实现的。

5、rack是指机柜的意思,一个block的三个副本通常会保存到两个或两个以上的机柜中(当然是机柜中的服务器),这样做的目的是做防灾容错,因为发生一个机柜掉电或者一个机柜的交换机挂了的概率还是有的

三、HDFS写数据流程

1、Client向远程NameNode发起RPC请求

2、NameNode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会向客户端抛出异常

3、当客户端开始写入文件的时候,会将文件切分成多个packets,并向NameNode申请blocks,获取合适的DataNode列表。

4、此时会形成一个pipeline用来传输packet。

5、packet以流的方式写入第一个DataNode,该DataNode把packet存储之后,再将其传递给下一个DataNode,直到最后一个DataNode。

6、最后一个DataNode成功存储之后会返回一个ack传递至客户端,客户端确认ack后继续写入下一个packet

7、如果传输过程中,有某个DataNode出现了故障,那么当前的pipeline会被关闭,出现故障的DataNode会从当前的pipeline中移除,剩余的block会从省下的DataNode中继续以pipeline的形式传输,同时NameNode会分配一个新的DataNode。

四、HDFS读流程

1、Client向远程的NameNode发起RPC请求。

2、NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode都会返回有该block拷贝的DataNode地址。

3、Client会选取离自己最接近的DataNode来读取block。

4、读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode。

5、当读完列表的block后,且文件读取还没有结束,Client会继续想NameNode获取下一批的block列表。

6、读取完block会进行checksum验证,如果读取DataNode时出现错误,客户端会通知NameNode,然后再从下一个拥有该block拷贝的DataNode继续读。

五、推荐几篇文章:

1、HDFS的运行原理

http://blog.csdn.net/weixuehao/article/details/16967485

2、HDFS原理分析(一)—— 基本概念

http://my.oschina.net/shiw019/blog/92771

3、HDFS原理、架构与特性介绍

http://www.open-open.com/lib/view/open1376228205209.html

HDFS介绍的更多相关文章

  1. Hadoop介绍-3.HDFS介绍和YARN原理介绍

    一. HDFS介绍: Hadoop2介绍 HDFS概述 HDFS读写流程   1.  Hadoop2介绍 Hadoop是Apache软件基金会旗下的一个分布式系统基础架构.Hadoop2的框架最核心的 ...

  2. 【原创】HDFS介绍

    一.            HDFS简介 1.    HDFS全称 Hadoop Distributed FileSystem,Hadoop分布式文件系统. Hadoop有一个抽象文件系统的概念,Ha ...

  3. HDFS介绍及简单操作

    目录 1.HDFS是什么? 2.HDFS设计基础与目标 3.HDFS体系结构 3.1 NameNode(NN)3.2 DataNode(DN)3.3 SecondaryNameNode(SNN)3.4 ...

  4. HDFS介绍~超详细

    HDFS(Hadoop Distributed File System)   (1) HDFS--Hadoop分布式文件存储系统   源自于Google的GFS论文,HDFS是GFS的克隆版 HDFS ...

  5. Hadoop之HDFS介绍

    1. 概述 HDFS是一种分布式文件管理系统. HDFS的使用场景: 适合一次写入,多次读出的场景,且不支持文件的修改: 适合用来做数据分析,并不适合用来做网盘应用: 1.2 优缺点 优点: 高容错性 ...

  6. Hadoop之HDFS及NameNode单点故障解决方案

    Hadoop之HDFS 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 H ...

  7. Java+大数据开发——HDFS详解

    1. HDFS 介绍  • 什么是HDFS 首先,它是一个文件系统,用于存储文件,通过统一的命名空间--目录树来定位文件. 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角 ...

  8. java常用的框架介绍

    一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...

  9. Client将数据读写HDFS流程

    HDFS介绍 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的. 什么是分布式文件系统 分布式文件系统(Dist ...

随机推荐

  1. jq 移除包含某个字符串的类名js

    el.removeClass (function (index, css) { return (css.match (/(^|\s)star\S+/g) || []).join(' ');//移除以“ ...

  2. (转)awk实例练习(一)

    文章转自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591822.html 前一篇学习了awk的基本知识,现在来做一些练习加深一下印象. ...

  3. jquery总结04-DOM节点操作

    一般js操作节点 ①创建节点(元素文本)document.createElement  innerHTML ②添加属性 setAttribute ③加入文档 appendChild 操作繁琐还有兼容性 ...

  4. idea 工程添加svn关联

    1.想启用idea的SVN插件还需要在idea配置一下(Ctrl + Alt + S),如下图所示: 2.接下来启用idea的版本控制插件(这里当然是启用Subversion了),打开“VCS”菜单项 ...

  5. Oracle的表空间和数据文件

    一. 概念 表空间:是一个或多个数据文件的逻辑集合 表空间逻辑存储对象: 永久段-->如表与索引 临时段-->如临时表数据与排序段 回滚段-->用于事物回滚或闪回内存的撤销数据 表空 ...

  6. DIV下的DIV居中

    .ParentDIV{ display: -webkit-flex; display: flex; -webkit-align-items: center; align-items: center; ...

  7. The import javax.servlet.http.HttpServletRequest cannot be resolved

    Error: The import javax.servlet cannot be resolved The import javax.servlet.http.HttpServletRequest ...

  8. 【xsy1019】小A的树论

    题意 三种操作: ①区间增值 ②某一个点换父亲 ③求子树和 \(1\leq n\leq 100000\) 分析 Splay维护dfn序. 小结 (1)使用Splay,通常要在Splay的两端各添加一个 ...

  9. 打造高大上的Canvas粒子(一)

    HTML5 Canvas <canvas>标签定义图形,比如图表和其他图像,必须用脚本(javascript)绘制图形. 举例:绘制矩形 <script> var c = do ...

  10. debian开机启动管理

    debian开机启动管理(转文) linux下,services的启动.停止等通常是通过/etc/init.d的目录下的脚本来控制的.在启动或改变运行级别是在/etc/rcX.d中来搜索脚本.其中X是 ...