HDFS介绍
一、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介绍的更多相关文章
- Hadoop介绍-3.HDFS介绍和YARN原理介绍
一. HDFS介绍: Hadoop2介绍 HDFS概述 HDFS读写流程 1. Hadoop2介绍 Hadoop是Apache软件基金会旗下的一个分布式系统基础架构.Hadoop2的框架最核心的 ...
- 【原创】HDFS介绍
一. HDFS简介 1. HDFS全称 Hadoop Distributed FileSystem,Hadoop分布式文件系统. Hadoop有一个抽象文件系统的概念,Ha ...
- HDFS介绍及简单操作
目录 1.HDFS是什么? 2.HDFS设计基础与目标 3.HDFS体系结构 3.1 NameNode(NN)3.2 DataNode(DN)3.3 SecondaryNameNode(SNN)3.4 ...
- HDFS介绍~超详细
HDFS(Hadoop Distributed File System) (1) HDFS--Hadoop分布式文件存储系统 源自于Google的GFS论文,HDFS是GFS的克隆版 HDFS ...
- Hadoop之HDFS介绍
1. 概述 HDFS是一种分布式文件管理系统. HDFS的使用场景: 适合一次写入,多次读出的场景,且不支持文件的修改: 适合用来做数据分析,并不适合用来做网盘应用: 1.2 优缺点 优点: 高容错性 ...
- Hadoop之HDFS及NameNode单点故障解决方案
Hadoop之HDFS 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 H ...
- Java+大数据开发——HDFS详解
1. HDFS 介绍 • 什么是HDFS 首先,它是一个文件系统,用于存储文件,通过统一的命名空间--目录树来定位文件. 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角 ...
- java常用的框架介绍
一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...
- Client将数据读写HDFS流程
HDFS介绍 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的. 什么是分布式文件系统 分布式文件系统(Dist ...
随机推荐
- jq 移除包含某个字符串的类名js
el.removeClass (function (index, css) { return (css.match (/(^|\s)star\S+/g) || []).join(' ');//移除以“ ...
- (转)awk实例练习(一)
文章转自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591822.html 前一篇学习了awk的基本知识,现在来做一些练习加深一下印象. ...
- jquery总结04-DOM节点操作
一般js操作节点 ①创建节点(元素文本)document.createElement innerHTML ②添加属性 setAttribute ③加入文档 appendChild 操作繁琐还有兼容性 ...
- idea 工程添加svn关联
1.想启用idea的SVN插件还需要在idea配置一下(Ctrl + Alt + S),如下图所示: 2.接下来启用idea的版本控制插件(这里当然是启用Subversion了),打开“VCS”菜单项 ...
- Oracle的表空间和数据文件
一. 概念 表空间:是一个或多个数据文件的逻辑集合 表空间逻辑存储对象: 永久段-->如表与索引 临时段-->如临时表数据与排序段 回滚段-->用于事物回滚或闪回内存的撤销数据 表空 ...
- DIV下的DIV居中
.ParentDIV{ display: -webkit-flex; display: flex; -webkit-align-items: center; align-items: center; ...
- The import javax.servlet.http.HttpServletRequest cannot be resolved
Error: The import javax.servlet cannot be resolved The import javax.servlet.http.HttpServletRequest ...
- 【xsy1019】小A的树论
题意 三种操作: ①区间增值 ②某一个点换父亲 ③求子树和 \(1\leq n\leq 100000\) 分析 Splay维护dfn序. 小结 (1)使用Splay,通常要在Splay的两端各添加一个 ...
- 打造高大上的Canvas粒子(一)
HTML5 Canvas <canvas>标签定义图形,比如图表和其他图像,必须用脚本(javascript)绘制图形. 举例:绘制矩形 <script> var c = do ...
- debian开机启动管理
debian开机启动管理(转文) linux下,services的启动.停止等通常是通过/etc/init.d的目录下的脚本来控制的.在启动或改变运行级别是在/etc/rcX.d中来搜索脚本.其中X是 ...