HDFS介绍~超详细
- 先通过客户端调用FileSyStem对象的.open()方法打开HDFS中需要读取的文件
- FileSyStem通过远程协议调用NameNode,确定要访问的文件的数据块的位置;NameNode返回一个含有数据块的“元数据”信息(即文件的基本信息);然后,DataNode按照NameNode定义的距离值进行排序,如果客户端本身就是一个DataNode,那么会优先从本地的DataNode节点上进行数据读取返回一个InputStream给客户端,让其从FSDataInputStream中读取数据,FSDataInputStream接着包装一个DInputStream,用来用来管理DataNode和NameNode的I/O
- NameNode向客户端返回一个包含数据块信息的地址,客户端会根据创建一个FSDataInputStream,开始对数据进行读取
- FSDataInputStream根据开始时候存放的位置,连接到离它最近的DataNode,对其上数据进行从头读取操作。读取过程中客户端会反复调 用.read()方法,以I/O的(流式方式)从DataNode上访问读取数据
- 当读取到Block的最后一块时,FSDataInputStream会关闭掉当前DataNode的连接,然后查找能够读取的下一个Block所在的距离当前最近的DataNode
- 读取完之后调用.close()方法,关闭FSDataInputStream8
- 客户端调用FileSyStem的.create()方法来请求创建文件
- FileSyStem通过NameNode发送请求,创建一个新文件,但此时并不关联其它任何数据块。NameNode进行很多检查保证不存在要创建文件已经在与HDFS系统当中,同时检查是否有相应的权限来创建这个文件。如果这些检查都已完成,那么NameNode就会记录下来这个新建的文件的信息。FileSyStem就返回一个FSDataOutputStream给客户端让他来写数据。和读的情况一样,FSDataOutputStream将会包装一个DFSOutputStream用于和DataNode和NameNode进行通讯的。一旦文件创建失败,客户端会接收到一个IOException,表示文件创建失败,停止后续的所有任务
- 客户端开始写数据。FSDataOutputStream把要写入的数据分成块的形式,将其写入到队列中。其中的数据有DataStream读取(DataStream的职责:让NameNode分配新的块--通过找到合适的DataNode来存储备份的副本数据)这些DataNode组成一条流水线,假设是一个三级流水线,那么里面含有三个节点。此时DataStream把数据首先写入到离他最近的DataNode上(第一个节点);然后由第一个节点将数据块写入到第二个节点,第二个节点继续把数据块传送到第三个节点上
- FSDataOutputStream维护了一个内部关于write packet的队列,里面存放了等待DataNode确认无误的packets信息。这个队列称为等待队列。一个packet的信息被移出本队列并且当packet流水线中的所有节点确认无误
- 当完成数据写入操作后,客户端会调用.close()方法,在通知NameNode它些数据完成之前,这个方法将Flush(刷新)残留的packets,并且等待信息确认,NameNode已经知道了文件由哪些数据块,通过DataStream询问数据块的分配,所以它在返回成功之前必须要完成配置文件中配置的最小副本数的复制操作
- NameNode启动过程中进入
- 手动进入 hdfs dfsadmin -safemode enter
- 阀值计算公式:已经启动的DataNode节点数 / 总数、

HDFS介绍~超详细的更多相关文章
- 超详细,多图文介绍redis集群方式并搭建redis伪集群
超详细,多图文介绍redis集群方式并搭建redis伪集群 超多图文,对新手友好度极好.敲命令的过程中,难免会敲错,但为了截好一张合适的图,一旦出现一点问题,为了好的演示效果,就要从头开始敲.且看且珍 ...
- 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数
超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...
- 原来你是这样的BERT,i了i了! —— 超详细BERT介绍(一)BERT主模型的结构及其组件
原来你是这样的BERT,i了i了! -- 超详细BERT介绍(一)BERT主模型的结构及其组件 BERT(Bidirectional Encoder Representations from Tran ...
- MyCat安装与测试教程 超详细!
MyCat安装与测试教程 超详细! MyCat基础知识 一.什么是MYCAT? 1. 一个彻底开源的,面向企业应用开发的大数据库集群 2. 支持事务.ACID.可以替代MySQL的加强版数据库 3. ...
- (转)超详细单机版搭建hadoop环境图文解析
超详细单机版搭建hadoop环境图文解析 安装过程: 一.安装Linux操作系统 二.在Ubuntu下创建hadoop用户组和用户 三.在Ubuntu下安装 ...
- 超强、超详细Redis数据库入门教程
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...
- GitHub超详细图文攻略
GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git 分类: 转载2014-03-25 21:10 10641人阅读 评论(2) 收藏 举报 GitHubbr ...
- 超详细的Xcode代码格式化教程,可自定义样式。
超详细的Xcode代码格式化教程,可自定义样式. 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题.在之前,我们可能会写完代码后,再 ...
- 超全超详细的HTTP状态码大全(推荐抓包工具HTTP Analyzer V6.5.3)
超全超详细的HTTP状态码大全 本部分余下的内容会详细地介绍 HTTP 1.1中的状态码.这些状态码被分为五大类: 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. ...
随机推荐
- python课堂整理15---map, filter,reduce函数
一.map函数 处理序列(可迭代对象)中的每一个元素,得到的结果是一个‘列表’(其实是个迭代器),该‘列表’元素个数及位置与原来一样 理解下面这段代码: num_l = [1, 2, 4, 6] de ...
- 入门训练-1.A+B问题
问题描述 输入A.B,输出A+B. 说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标. 输入格式 输入的第一行包括两个整数,由空格分隔,分别表示A.B. 说明:“输入格式”是描述在测试你 ...
- Number() 与 parseInt()解析
在 Python 中,将字符串转为整型变量的函数是 int() ,直接使用 int("123")就可以得到 123的输出结果,这样可以比较快速的得到我们想要的结果,在 js 中将 ...
- PHP与ECMAScript_3_常用字符串函数
PHP ECMAScript 长度 strlen($str) str.length 查找类 $str[n] ...
- Python解释器安装教程和环境变量配置
Python解释器安装教程和环境变量配置 Python解释器安装 登录Python的官方网站 https://www.python.org/ 进行相应版本的下载. 第一步:根据电脑系统选择软件适 ...
- Java 内存模型详解
概述 Java的内存模型(Java Memory Model )简称JMM.首先应该明白,Java内存模型是一个规范,主要规定了以下两点: 规定了一个线程如何以及何时可以看到其他线程修改过后的共享变量 ...
- 【iOS】PrefixHeader.pch
还不太理解,暂且记下.
- 面试必问之ArrayList
ArrayList概述 (1)ArrayList 是一种变长的集合类,基于定长数组实现. (2)ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时, ...
- 动态开内存(malloc与calloc)
malloc与calloc 1.函数原型 #include<stdlib.h> void *malloc(unsigned int size); //申请size字节的内存 voi ...
- 【POJ - 3104 】Drying(二分)
Drying 直接上中文 Descriptions 每件衣服都有一定单位水分,在不使用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分,但是遗憾是只有1台 ...