Hadoop核心组件:

  1. 分布式文件系统(HDFS):以流式数据访问模式来存储超大文件,运行于商用硬件集群,是管理网络中跨多台计算机存储的文件系统
  2. 分布式运算框架(MapReduce)
  3. 分布式调度引擎(YARN)

HDFS的设计特点:

概括:分(分块)、余(冗余)、展(动态扩展)的大硬盘!

  1. 分块:HDFS的存储文件被划分为块,作为独立的存储单元,称为数据块,默认大小是:Hadoop1.x:64MB;Hadoop1.x:128MB。
  2. 冗余:HDFS文件分块,且每块默认备份3份;
  3. 动态扩展:存储空间可以动态扩展;

HDFS的关键元素:

  1. Block(块)
  2. NameNode(名称节点):HDFS的守护进程,管理文件系统的命名空间,负责记录文件数据块、管理数据块被存储的节点,它的主要功能是对内存及IO进行集中管理。
  3. DataNode(数据节点):文件实际存储的位置;
  4. SecondaryNameNode(CheckPoint节点):辅助程序,与NameNode进行通信,以便定期保存HDFS元数据的快照;

HDFS运行原理:

  1. NameNode和DataNode初始化完成后,采用RPC进行信息交换,采用的机制是心跳机制;
  2. 心跳机制:DataNode节点定时向NameNode反馈状态信息,反馈信息如:是否正常、磁盘空间大小、资源消耗情况等信息,以确保NameNode知道DataNode的情况;
  3. NameNode负责存储fsImage和edits元数据信息;
  4. fsImage和edits元数据文件需要定期进行合并;
  5. SecondNameNode进程对fsImage和edits文件进行定期合并,合并好的文件再交给NameNode存储;

HDFS数据合并原理:

1、NameNode初始化时会产生一个edits文件和一个fsimage文件:

edits:记录操作日志,比如对文件删除或添加等操作信息;

fsImage用于存储文件与目录对应的信息以及edits合并进来的信息,即相当于fsimage文件在这里是一个总的元数据文件,记录着所有的信息;

2、随着edits文件不断增大,当达到设定的阀值时,SecondaryNameNode会将edits文件和fsImage文件通过采用Http的方式进行复制到SecondaryNameNode,同时NameNode会产生新的edits文件替换旧的edits文件,以保证数据不会出现冗余;

3、SecondaryNameNode拿到这两个文件后,会在内存进行合CheckPoint操作生成fsImage.ckpt文件,合并完成后,再通过http的方式将fsImage.ckpt复制到NameNode,NameNode得到fsImage.ckpt后,将旧的fsimage文件替换,并且改名成fsimage。

HDFS数据流

HDFS写数据:

  • HDFS客户端提交写操作到NameNode,NameNode收到请求后,先判断此客户端是否有写权限,如果有,然后进行查看哪些DataNode适合存放,再给客户端返回存放数据块的节点信息,即告诉客户端可以把文件存放到相关的DataNode节点;
  • 客户端获取到存放数据的节点信息后,和对应的DataNode节点进行直接交互,进行数据写入,由于数据块具有副本Replication,在数据写入时采用的方式是先写第一个副本,写完后再从第一个副本的节点将数据拷贝到其它节点,依次类推,直到所有副本都写完,才算数据成功写入到HDFS,副本写入采用的是串行,每个副本写的过程中都会逐级向上反馈写进度,以保证实时知道副本的写入情况;
  • 随着所有副本写完后,客户端会收到数据节点反馈回来的一个成功状态,成功结束后,关闭与数据节点交互的通道,并反馈状态给NameNode,告诉NameNode文件已成功写入到对应的DataNode。

过程描述:

(1) 客户端通过对DistributedFileSystem对象调用create()函数新建文件。

(2) 分布式文件系统对namenod创建一个RPC调用,在文件系统的命名空间中新建一个文件。

(3)Namenode对新建文件进行检查无误后,分布式文件系统返回给客户端一个FSDataOutputStream对象,        FSDataOutputStream对象封装一个DFSoutPutstream对象,负责处理namenode和datanode之间的通信,客户端开始写入数据。

(4)FSDataOutputStream将数据分成一个一个的数据包,写入内部队列"数据队列",DataStreamer负责将数据包依次流式传输到由一组namenode构成的管线中。

(5)FSDataOutputStream维护着确认队列来等待datanode收到确认回执,收到管道中所有datanode确认后,数据包从确认队列删除。

(6)客户端完成数据的写入,对数据流调用close()方法。

(7)namenode确认完成。

HDFS读数据:

  • HDFS客户端提交读操作到NameNode,NameNode收到客户端提交的请求后,会先判断此客户端在此目录下是否有读权限,如果有,则给客户端返回存放数据块的节点信息,即告诉客户端可以到相关的DataNode节点下去读取数据块;
  • 客户端获取到块位置信息后,会和相关的DataNode直接构建读取通道,读取数据块,当所有数据块都读取完成后关闭通道,并给NameNode返回状态信息,告诉NameNode已经读取完毕。

过程描述:

(1)客户端调用FileSyste对象的open()方法在分布式文件系统中打开要读取的文件。

(2)分布式文件系统通过使用RPC(远程过程调用)来调用namenode,确定文件起始块的位置。

(3)分布式文件系统的DistributedFileSystem类返回一个支持文件定位的输入流FSDataInputStream对象,FSDataInputStream对象接着封装DFSInputStream对象(存储着文件起始几个块的datanode地址),客户端对这个输入流调用read()方法。

(4)FSDataInputStream连接距离最近的datanode,通过反复调用read方法,将数据从datanode传输到客户端。

(5) 到达块的末端时,FSDataInputStream关闭与该datanode的连接,寻找下一个块的最佳datanode。

(6)客户端完成读取,对FSDataInputStream调用close()方法关闭连接。

Hadoop原理——HDFS原理相关推荐

  1. Hadoop基础-Hdfs各个组件的运行原理介绍

    Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...

  2. hadoop之hdfs及其工作原理

    hadoop之hdfs及其工作原理 (一)hdfs产生的背景 随着数据量的不断增大和增长速度的不断加快,一台机器上已经容纳不下,因此就需要放到更多的机器中,但这样做不方便维护和管理,因此需要一种文件系 ...

  3. Hadoop分布式文件系统——HDFS原理简介

    阅读前必看 这篇文章与其说是一篇文章,不如说是一篇在家学习的笔记,其中大部分内容来自于github上一个大神的开源笔记,在此附上链接,表达版权所属以及敬意:github源地址 一.介绍 HDFS(Ha ...

  4. Hadoop之深入HDFS原理<一>

    1.HDFS原理 1.三大组件(NameNode.DataNode.SecondaryNameNode) 2.NameNode a.作用:存储元数据(文件名.创建时间.大小.权限.文件与block块映 ...

  5. HDFS 原理、架构与特性介绍--转载

    原文地址:http://www.uml.org.cn/sjjm/201309044.asp 本文主要讲述 HDFS原理-架构.副本机制.HDFS负载均衡.机架感知.健壮性.文件删除恢复机制 1:当前H ...

  6. 漫画讲解HDFS原理

    HDFS简介 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式 ...

  7. (转载)深入分析HDFS原理及读写流程

    一.架构体系 1.1.什么是HDFS? HDFS即Hadoop Distributed File System的简称,采用Master/Slave主从结构模型来管理数据.在设计上采用了分而治之的思想, ...

  8. HDFS原理 | 一文读懂HDFS架构与设计

    1 前言 HDFS(Hadoop Distributed File System)是我们熟知的Hadoop分布式文件系统,是一个高容错的系统,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.H ...

  9. Hadoop系列文章 Hadoop架构、原理、特性简述

    Hadoop系列文章 Hadoop架构.原理.特性简述 Hadoop HDFS HDFS介绍 HDFS架构图 HDFS写入数据流程图 HDFS读取数据流程图 数据块的副本集 Hadoop YARN Y ...

  10. Cloudera Hadoop架构及Hadoop Common实现原理

    目录: 1.Cloudera Hadoop架构 2.Hadoop RPC 2.1Hadoop IPC源码解析 2.2Hadoop IPC调用过程详解 1.Cloudera Hadoop架构 cloud ...

最新文章

  1. python 判断字典是否包含某个key,以及对应的value 值
  2. 《3ds Max疯狂设计学院》——1.5节怎样才能学好3ds Max,你要听好
  3. sgolayfilt函数_Matlab中Savitzky-Golay filtering(最小二乘平滑滤波)函数sgolayfilt的使用方法...
  4. MySql某一列累计查询
  5. 【C语言】构建一个校园交通查询系统程序。能够规划出任意出发地和目的地之间的最短路径。...
  6. Kubernetes Scheduler Deep Dive
  7. [每日一题] 11gOCP 1z0-053 :2013-10-1 persistent lightweight jobs...........................11
  8. Spring Framework 4.0 M1: WebSocket 支持
  9. JAVA集合系列(3):ArrayList扩容原理分析
  10. 三年经验前端社招面经——朴朴科技
  11. 0.96寸OLED 的驱动原理及代码(IIC模式)
  12. Redis下载部署并加入idea应用(详细笔记)
  13. win7如何显示文件扩展名?
  14. 快速注册认证小程序,三分钟学会免300元认证企业小程序
  15. 读周爱民《javascript语言精髓与编程实践》有感
  16. 最适合十二星座的那些表白方式!
  17. python识别人脸多种属性_9种人脸情绪识别、22类人脸属性、 15类皮肤质量识别,竹间智能要让情感机器人更理解人...
  18. 【3dsMax】如何用VSocde写最简单的MaxScript脚本
  19. HNUST--2187 最小生成树(邻接矩阵或邻接表)
  20. ZLG 发布开源 GUI 引擎 AWTK

热门文章

  1. (原创)十大危险cmd命令代码总结
  2. win10怎么打开计算机树形,win10系统中显示树形目录文件夹的两种方法
  3. python游戏编程入门百度云-《Python游戏编程快速上手》PDF下载|百度云盘
  4. 台达A2/B2伺服电机编码器改功率软件
  5. java怎么模拟查询账户余额_spring boot + mybatis 模拟银行系统余额查询、转账、存取钱功能实现...
  6. java 铁路管理信息系统_java多线程之铁路售票系统
  7. Maple学习笔记——基础
  8. 方正台式计算机保护卡密码忘记了,方正电脑E系列忘记还原卡密码处理方法
  9. E 帮 SeSe 的一篇示例
  10. 中国计算机学会推荐国际学术会议和期刊目录(2015 年)