hadoop核心之分布式文件系统HDFS

Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)是Hadoop的核心模块之一,它主要解决Hadoop的大数据存储问题,其思想来源于Google的文件系统GFS.HDFS的主要特点:
    1) 保存多个副本,且提供容错机制,副本丢失或者宕机自动恢复.默认保存3份.
    2) 运行在廉价的机器上.
    3) 适合大数据的处理.HDFS默认会将文件分割成block,128M为1个block.然后将block按键值对存储在HDFS上,并将键值对的映射存在内存中.如果小文件太多,那内存的负担会很重.
    
    HDFS中的两个重要角色:
    [NameNode]
        1) 管理文件系统的命名空间.
        2) 记录每个文件数据块在各个DataNode上的位置和副本信息.
        3) 协调客户端对文件的访问.
        4) 记录命名空间内的改动或者空间本省属性的改动.
        5) NameNode使用事务日志记录HDFS元数据的变化.使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等.
    [DataNode]
        1) 负责所在的物理节点的存储管理
        2) 一次写入,多次读取(不修改)
        3) 文件由数据库组成,一般情况下,数据块的大小为128MB.
        4) 数据尽量散布在各个节点.
        从社会学的角度来看,DataNode是HDFS的工作者,发挥按着NameNode的命令干活,并且把干活的进展和问题反馈到NameNode的作用.
        
     客户端如何访问HDFS中一个文件呢?具体流程如下:
         1) 首先从NameNode获取组成这个文件的数据块位置列表.
         2) 接下来根据位置列表知道存储数据块的DataNode.
         3) 最后访问DateNode获取数据
         注意: NameNode并不参与数据实际传输.
         
     数据存储系统,数据存储的可靠性至关重要.HDFS是如何保证其可靠性呢?它主要采用如下机理:
         1) 冗余副本策略,即所有数据都有副本,副本的数且可以在hdfs-site.xml中设置相应的复制因子.
         2) 机架策咯,即HDFS的"机架感知",一般在本机架存放一个副本,且其他机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提供带框利用率.
         3) 心跳机制,即NameNode周期性从DataNode接受心跳信号和块报告,没有按时发送心跳的DataNode会被标记为宕机,不会再给任何I/O请求,若是DataNode失效造成副本数量下降,并且低于预先设置的阈值,NameNode会检测出这些数据块,并且在合适的时机进行重新复制.
         4) 安全模式,NameNode启动时会先经过一个"安全模式"阶段.
         5) 校验和,客户端获取数据通过检查检验和,发现数据块是否损坏,从而确定是否要读取副本.
         6) 回收站,删除文件,会先到回收站/trash,其里面可以快速恢复.
         7) 元数据保护,映像文件和事务日志是NameNode的核心数据,可以配置为拥有多个副本.
         8) 快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态.
    如上图所示,HDFS也是按照Master和Slave的结构.分NameNode,SecondaryNameNode,DataNode这几个角色.
    NameNode: 是Master节点,是大领导.管理数据块的映射;处理客户端的读写请求;配置副本策咯;管理HDFS的名称空间.
    SecondaryNameNode: 是一个小弟,分担大哥NameNode的工作量;是NameNode的冷备份;合并fsimage和fsidits然后再发给NameNode.
    DataNode: Slave节点,奴隶,干活的.负责存储client发开的数据块block;执行数据块的读写操作.
    热备份: b是a的热备份,如果a坏掉了,那么b马上运行代替a的工作.
    冷备份: b是a的冷备份,如果a坏掉了,那么b不能马上代替a工作,但是b上存储了a的一些信息,减少a坏掉之后的损失.
    fsimage: 元数据镜像文件(文件系统的目录树) 
             $>hdfs oiv -p XML -i xxx -o ~/xxx.xml
    edits: 元数据的操作日志(针对文件系统做的修改操作记录)
            $>hdfs oev -p XML -i xxx -o ~/xxx.xml
    
    NameNode内存中存储的就是 = fsimage + edits.
    SceondaryNameNode负责定时(默认1小时),从NameNode上获取fsimage和edits来进行合并,然后再发送给NameNode,减少NameNode的工作量.
    
    
    
    
hdfs api:
    1.Configuration
        配置对象,加载配置文件.
        addDefaultResource();从classpath加载.

    2.FileSystem
        DistributedFileSystem,是FileSystem的一个实现,用于和hadoop的hdfs进行交互.
    
    3.Path
        文件或者目录的名称. /是路径分隔符,有绝对路径和相对路径之分.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值