zoukankan      html  css  js  c++  java
  • HDFS 核心原理

    HDFS 核心原理

    HDFS(Hadoop Distribute File System)是一个分布式文件系统

    文件系统是操作系统提供的磁盘空间管理服务,只需要我们指定把文件放到哪儿,从哪个路径读取文件句可以了,不用关心文件在磁盘上是如何存放的

    当文件所需空间大于本机磁盘空间时,如何处理呢?

    一是加磁盘,但加到一定程度就有限制了

    二是加机器,用远程共享目录的方式提供网络化的存储,这种方式可以理解为分布式文件系统的雏形,可以把不同文件放入不同的机器中,空间不足了可以继续加机器,突破了存储空间的限制

    但这个方式有多个问题

    (1)单机负载可能极高

    例如某个文件是热门,很多用户经常读取这个文件,就使此文件所在机器的访问压力极高

    (2)数据不安全

    如果某个文件所在的机器出现故障,这个文件就不能访问了,可靠性很差

    (3)文件整理困难

    例如想把一些文件的存储位置进行调整,就需要看目标机器的空间是否够用,并且需要自己维护文件位置,如果机器非常多,操作就极为复杂

    HDFS的解决思路

    HDFS是个抽象层,底层依赖很多独立的服务器,对外提供统一的文件管理功能,对于用户来讲,感觉就想在操作一台机器,感受不到HDFS下面的多台服务器

    例如用户访问HDFS中的 /a/b/c.mpg 这个文件,HDFS负责从底层相应服务器中读取,然后返回给用户,这样用户只需和HDFS打交道,不关心这个文件是怎么存储的


    写文件示例

    例如用户需要保存一个文件 /a/b/xxx.avi 

    HDFS首先会把这个文件进行分割,例如分为4块,然后分别放到不同服务器上


    这样做有个好处,不怕文件太大,并且读文件的压力不会全都集中在一台服务器上

    但如果某台服务器坏了,文件就读不全了

    HDFS为保证文件可靠性,会把每个文件块进行多个备份

    块1 : A B C 
    块2 : A B D
    块3 : B C D 

    块4 : A C D


    这样文件的可靠性就大大增强了,即使某个服务器坏了,也可以完整读取文件

    同时还带来一个很大的好处,就是增加了文件的并发访问能力,比如多个用户读取这个文件时,都要读块1,HDFS可以根据服务器的繁忙程度,选择从哪台服务器读块1

    元数据的管理

    HDFS中存了哪些文件?

    文件被分成了哪些块?

    每个块被放在哪台服务器上?

    ……

    这些都叫做元数据,这些元数据被抽象为一个目录树,记录了这些复杂的对应关系

    这些元数据由一个单独的模块进行管理,这个模块叫做 NameNode

    存放文件块的真实服务器叫做 DataNode

    所以用户访问HDFS的过程可以理解为:

    用户 -> HDFS -> NameNode -> DataNode

    HDFS 优点

    (1)容量可以线性扩展

    (2)有副本机制,存储可靠性高,吞吐量增大

    (3)有了NameNode后,用户访问文件只需指定HDFS上的路径

  • 相关阅读:
    上周热点回顾(11.2912.5)
    上周热点回顾(11.1511.21)
    上周热点回顾(11.2211.28)
    上周热点回顾(12.1312.19)
    Bambook程序达人赛报名公告
    HTML5技术专题上线啦!
    “博客无双,以文会友”活动公告
    上周热点回顾(12.612.12)
    [转]Java RMI之HelloWorld篇
    中国现代远程与继续教育网 统考 大学英语(B)考试大纲
  • 原文地址:https://www.cnblogs.com/jun1019/p/6260599.html
Copyright © 2011-2022 走看看