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 ...
随机推荐
- php总结 --- 2.字符串
字符串 恩聪 正则表达式 恩聪 中文验证 if (preg_match("/[\x{4e00}-\x{9fa5}]{2,4}\s{0,}\w{8,15}/u", $keyword) ...
- 高斯混合模型与EM算法
对于高斯混合模型是干什么的呢?它解决什么样的问题呢?它常用在非监督学习中,意思就是我们的训练样本集合只有数据,没有标签. 它用来解决这样的问题:我们有一堆的训练样本,这些样本可以一共分为K类,用z(i ...
- 关于Dagger 2 的使用方式
什么是Dagger2 Dagger是为Android和Java平台提供的一个完全静态的,在编译时进行依赖注入的框架,原来是由Square公司维护,现在由Google维护. 我们知道Dagger是一个依 ...
- sizeof既是关键字,又是运算符(操作符),但不是函数!
sizeof是关键字吗 sizeof是关键字,这一点毋庸置疑.你不能将sizeof定义为任何标识符.查看C语言标准文档里的说明: sizeof是运算符(操作符)吗 C语言中,sizeof是运算符(操作 ...
- Android 四大组件之一(Activity)
Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启 ...
- linux下mysql函数的详细案列
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *pas ...
- Android实现接口方式注册监听器
初学Android,新手大都倾向使用匿名类的方式注册监听器, 如下: public class MainActivity extends Activity { private Button but ...
- ios基础篇(十一)——UINavgationController的使用(二)页面切换
上篇说到了添加UIBarButtonItem,接下来说说界面切换: 1.首先我们在刚才的RootViewController中添加一个按钮用来实现跳转: 打开RootViewController.m( ...
- HDU 1253 胜利大逃亡
Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C ...
- R语言apply函数族笔记
为什么用apply 因为我是一个程序员,所以在最初学习R的时候,当成“又一门编程语言”来学习,但是怎么学都觉得别扭.现在我的看法倾向于,R不是一种通用型的编程语言,而是一种统计领域的软件工具.因此,不 ...