一、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. jquery总结05-常用事件05-触发事件

    触发事件 .trigger('click')触发浏览器事件,简写等于.click(),还同时支持自定义事件,并且可以传递参数 $('#elem').on('Aaron', function(event ...

  2. python成长之路【第二篇】:列表和元组

    1.数据结构数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在Python中,最基本的数据结构是序列(sequence) ...

  3. [css3]CSS3选择器:nth-child和:nth-of-type之间的差异

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1709 一.深呼吸,直 ...

  4. unindent does not match any outer indentation level

    报错原因: 空格与tab键混用,一般粘贴代码时会出现 解决方法: 把所有缩进取消,然后用tab键来缩进

  5. django"动态网页","动态url","调试方法"

    一.动态网页 其实只是每次刷新时,获取最新时间而已 1.urls.py from django.conf.urls import patterns, url, include urlpatterns ...

  6. SQL Server常用语句

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  7. DIV设置overflow无效的原因

    因为项目需求需要在一个div中添加多个checked 添加的时候使用了 <label><input type="checkbox" value="123 ...

  8. 第九章 企业项目开发--分布式缓存Redis(1)

    注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题 ...

  9. App压力测试整理

    压力测试结果:CRASH:崩溃,应用程序在使用过程中,非正常退出ANR:Application Not Responding MonkeyRunner APIs MonkeyRunner:用来连接设备 ...

  10. iOS开发UI篇—UITableviewcell的性能优化和缓存机制

    iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...