zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    区间dp体会
    P1083借教室 noip提高组复赛2012
    P2678跳石头体会 noip2015提高组
    tarjan求LCA的体会
    P1006 传纸条
    P1140 相似基因 详解
    UVA1025 城市里的间谍 A Spy in the Metro 题解
    DAG上的动规嵌套矩形问题(含思考题)
    洛谷P1030c++递归求解先序排列
    Test 2019.7.22
  • 原文地址:https://www.cnblogs.com/fansik/p/5725793.html
Copyright © 2011-2022 走看看