原文链接:HDFS架构及原理

引言

  进入大数据时代,数据集的大小已经超过一台独立物理计算机的存储能力,我们需要对数据进行分区(partition)并存储到若干台单独的计算机上,也就出现了管理网络中跨多台计算机存储的文件系统:分布式文件系统(distributed filesystem)。基于hadoop分布式文件系统HDFS(Hadoop Distributed Filesystem)具备高容错、高吞吐量等特性,在大数据和AI时代得以广泛应用。

HDFS设计

HDFS设计初衷:

  • 低成本:HDFS可以部署在廉价的PC机上,装机成本和故障恢复成本都比较低。

  • 高容错:数据默认保存三份,如果有多个机架的话,同一机架的机器上保存两份,不同机架的机器上保存一份,如果副本丢失,会自动创建;

  • 高吞吐:HDFS是“一次写入多次读写”的访问模型,除了在文件末尾追加或直接阶段文件,HDFS是不允许修改文件的,这就简化了数据一致性的问题,并且实现了高吞吐数据访问。

  • 易扩展:HDFS可以简单的通过增加节点,实现水平扩展,存储容量可随着节点数量线性增长。

HDFS虽然有很多优点,但是在某些领域目前还是不适合的,如:

  • 低时间延迟的数据访问:有该种需求的,建议用HBase;

  • 大量的小文件;

  • 多用户写入,任意修改文件。

HDFS存储架构

HDFS采用Master/Slave架构存储数据,主要由client、namenode、datanode、secondary namenode,四部分组成,其中

  • client:客户端,代表用户通过与namenode和datanode交互来访问整个文件系统,与namenode交互获取文件的位置信息,与datanode交互进行数据的读写。

  • NameNode(管理者):HDFS集群有两类节点,并以管理者-工作者模式运行,namenode(管理者,也称master节点或元数据节点)用来管理文件系统的命名空间,记录每个文件中各个块所在的数据节点信息(并不永久保存块的位置信息,这些信息会在系统启动时由数据节点进行重建),配置副本,处理客户端请求。

  • Datanode(工作者):数据存储节点,也称slave节点,是文件系统的工作节点。主要是根据需要存储并检索数据块(受客户端或namenode调度),并定期向namenode发送所存储的块的列表。

  • Secondary NameNode:分担namenode工作量,是namenode的冷备份,合并fsimage和fsedits然后再发给namenode。它不是HA,它只是阶段性的合并fedits和fsimage,以缩短集群启动的时间。当namenode失效的时候,Secondary namenode并无法立刻提供服务,Secondary namenode甚至无法保证数据完整性:如果namenode数据丢失的话,在上一次合并后的文件系统的改动会丢失(在hadoop2.x版本,当启用hdfs ha时,不在存在这一项)

HDFS构建原则:

  • 元数据与数据分离:文件本身的属性(即元数据)与文件所持有的数据分离;

  • 主/从架构:一个HDFS集群是由一个NameNode和多个DataNode组成;

  • 一次写入多次读取:HDFS中的文件在任何时间只能有一个Writer。当文件被创建,接着写入数据,最后,一旦文件被关闭,就不能再修改;

  • 移动计算比移动数据更划算:数据运算,越靠近数据,执行运算的性能就越好,由于hdfs数据分布在不同机器上,要让网络的消耗最低,并提高系统的吞吐量,最佳方式是将运算的执行移到离它要处理的数据更近的地方,而不是移动数据。

HDFS写文件

操作场景

为便于理解HDFS写文件的过程,我们假设,有一个文件FileA,100M大小。Client将FileA写入到HDFS上,HDFS按默认配置(写文件参考博客地址:http://www.cnblogs.com/laov/p/3434917.html)。

写操作流程

HDFS分布在三个机架上Rack1,Rack2,Rack3。

  • Client将FileA按64M分块。分成两块,block1和Block2;

  • Client向nameNode发送写数据请求,如图蓝色虚线①——>。

  • NameNode节点,记录block信息。并返回可用的DataNode,如粉色虚线②———>。

Block1: host2,host1,host3

Block2: host7,host8,host4

 原理:NameNode具有RackAware机架感知功能,这个可以配置。若client为DataNode节点,那存储block时,规则为:副本1,同client的节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选。若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同副本1,机架上;副本3,同副本2相同的另一个节点上;其他副本随机挑选。

  • client向DataNode发送block1;发送过程是以流式写入,过程如下:

  1. 将64M的block1按64k的package划分;

  2. 然后将第一个package发送给host2;

  3. host2接收完后,将第一个package发送给host1,同时client想host2发送第二个package;

  4. host1接收完第一个package后,发送给host3,同时接收host2发来的第二个package;

  5. 以此类推,如图红线实线所示,直到将block1发送完毕;

  6. host2,host1,host3向NameNode,host2向Client发送通知,说“消息发送完了”。如图粉红颜色实线所示;

  7. client收到host2发来的消息后,向namenode发送消息,说我写完了。这样就真完成了。如图黄色粗实线;

  8. 发送完block1后,再向host7,host8,host4发送block2,如图蓝色实线所示;

  9. 发送完block2后,host7,host8,host4向NameNode,host7向Client发送通知,如图浅绿色实线所示;

  10. client向NameNode发送消息,说我写完了,如图黄色粗实线,这样就完毕了。

HDFS读文件

  HDFS读取文件的主要顺序:

  • 客户端调用FileSystem对象的open()方法打开希望读取的文件,即获取DistributedFileSystem的实例;

  • DistributedFileSystem通过RPC调用namenode,用于确定文件起始块(block)的位置,对于每一个block,namenode返回存有该块复本的datanode地址,这些datanode是根据他们与客户端的距离进行排序的;

  • 前2步返回一个FSDataInputStream对象(一个支持文件定位的输入流)给client客户端并读取数据,该对象会封装为DFSInputStream对象,该对象管理datanode和namenode的I/O。客户端对这个输入流调用read()方法,DFSInputStream找出距离最近的datanode;

  • 对数据流反复调用read()方法,将数据从datanode传输到客户端;

  • 到达第一个block的末端时,DFSInputStream会关闭与datanode的连接,寻找下一个block的最佳datanode;

  • 客户端从流中读取数据时,block是按照打开DFSInputStream与datanode新建连接的顺序读取的,一旦客户端完成读取,就会对FSDataInputStream调用close()方法,关闭掉所有的流。

Hadoop2.x新特性:HDFS

  Hadoop2.x由HDFS、MapReduce和Yarn三个分支构成,在hadoop2.x版本中,引入NameNode Federation和HA。

  在hadoop1.x时,存在单namenode容量和性能限制,一方面受制于java内存管理能力,另一方面,由于所有元数据信息的读取和操作都要与namenode进行通信,当集群规模变大后,namenode将成为性能瓶颈。

于是,在hadoop2.x时,引入了NameNode Federation和HA,NameNode Federation由多个nameservice组成,每个nameservice由一个或两个namenode组成,每个namenode分管一部分目录,多个namenode共用集群datanode的存储资源。这样当namenode内存受限时就能够方便的扩展内存,而且每个namenode独立工作,一个namenode的挂掉并不会影响其他namenode提供服务。同时,使用HA来解决特定namenode因为缺少热备存在的单点故障问题。

图5 NameNode Federation

全文详细内容,请点击链接:http://mp.weixin.qq.com/s/QyOyIIb5SFKSHxVIUBrqlw

更多精彩内容,欢迎扫码关注以下微信公众号:大数据技术宅。大数据、AI从关注开始

HDFS架构及原理的更多相关文章

  1. HDFS架构与原理

    HDFS HDFS 全称hadoop分布式文件系统,其最主要的作用是作为 Hadoop 生态中各系统的存储服务 特点 优点 • 高容错.高可用.高扩展 -数据冗余多副本,副本丢失后自动恢复 -Name ...

  2. 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理

    这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著  机械工业出版社2013年5月出 ...

  3. 2、Hdfs架构设计与原理分析

    文章目录 1.Hadoop架构 2.HDFS体系架构 2.1NameNode 2.1.1元数据信息 2.1.2NameNode文件操作 2.1.3NameNode副本 2.1.4NameNode心跳机 ...

  4. HBase的基本架构及其原理介绍

    1.概述:最近,有一些工程师问我有关HBase的基本架构的问题,其实这个问题仅仅说架构是非常简单,但是需要理解.在这里,我觉得可以用HDFS的架构作为借鉴.(其实像Hadoop生态系统中的大部分组建的 ...

  5. 大数据技术hadoop入门理论系列之二—HDFS架构简介

    HDFS简单介绍 HDFS全称是Hadoop Distribute File System,是一个能运行在普通商用硬件上的分布式文件系统. 与其他分布式文件系统显著不同的特点是: HDFS是一个高容错 ...

  6. HDFS 架构简述

    HDFS 架构简述 Hadoop分布式文件系统(HDFS)是一个分布式的文件系统,运行在廉价的硬件上.它与现有的分布式文件系统有很多相似之处.然而与其他的分布式文件系统的差异也是显着的.HDFS是高容 ...

  7. Hbase架构与原理

    Hbase架构与原理 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就 ...

  8. Spark基本架构及原理

    Hadoop 和 Spark 的关系 Spark 运算比 Hadoop 的 MapReduce 框架快的原因是因为 Hadoop 在一次 MapReduce 运算之后,会将数据的运算结果从内存写入到磁 ...

  9. storm架构及原理

    storm 架构与原理 1 storm简介 1.1 storm是什么 如果只用一句话来描述 storm 是什么的话:分布式 && 实时 计算系统.按照作者 Nathan Marz 的说 ...

随机推荐

  1. 用java从0生成一个简单的excel

    用java从0生成一个简单的excel 目标 用代码实现对一个excel的基础操作,包括创建,插入文字,(好像就这些了),生成的excel可以用wps打开,如果直接用c++的文件流会生成假的xls表格 ...

  2. web 基础设置

    1.设置代码格式为UTF-8 2.运行jsp文档 3.设置自己喜欢的浏览器运行,设置为默认的 找到自己的浏览器位置 点ok Name是名字的意思 为这个浏览器娶一个名字 是什么浏览器就写什么名字 4. ...

  3. 马昕璐 201771010118《面向对象程序设计(java)》第十八周学习总结

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  4. C++ 初步

    c++新特性: 1. 初始化方法: 复制初始化 int x=1024; 直接初始化 int x (1024); 2.变量随用随定义 3.增加bool数据类型 输入输出: cout<<x; ...

  5. Nginx的虚拟主机配置

    虚拟主机技术能够让同一台服务器.同一组Nginx进程上运行多个网站,降低了资金和服务器资源的损耗.Nginx可以配置三种类型的虚拟主机,本文就是主要介绍这三种虚拟主机配置方式. 配置基于IP的虚拟主机 ...

  6. Super Jumping! Jumping! Jumping! ---HDU - 1087

    Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...

  7. 二分(HDU2289 Cup)

    贴代码: 题目意思:已知r水的下半径,R水的上半径,H为圆台高度,V为水的体积,求水的高度,如图: 水的高度一定在0-100,所以在这个区间逐步二分,对每次二分出的水的高度,计算相应的体积,看看计算出 ...

  8. 学用HBuilder开发App的看过来

    自己的呕心沥血之作吧,花了一年时间,系统介绍HTML5 App开发的相关技术. 越来越多的公司采用HTML5来快速开发移动跨平台App,它支持当前市场流行的移动设备. 本书主要介绍了HTML5在移动A ...

  9. App功能测试

    App功能测试 1.  运行 1)App安装完成后的试运行,可正常打开软件. 2)App打开测试,是否有加载状态进度提示. 3)App页面间的切换是否流畅,逻辑是否正确. 4)注册 同表单编辑页面 用 ...

  10. SUSE12SP3-Mysql5.7安装

    1.将以下安装包复制到服务器 mysql-community-client-5.7.24-1.sles12.x86_64.rpm mysql-community-server-5.7.24-1.sle ...