美文网首页我爱编程
Hadoop(二)HDFS集群详解

Hadoop(二)HDFS集群详解

作者: currynie | 来源:发表于2018-05-24 11:08 被阅读0次

    原文地址:http://www.cnblogs.com/zhangyinhua/p/7657937.html
    注:本系列为Hadoop学习笔记,非原创

    HDFS概述

    一、HDFS概述

    (1)HDFS集群分为两大角色:Namenode和datanode;
    (2)Namenode负责管理整个文件系统的元数据;
    (3)Datanode负责管理用户的文件数据块;
    (4)文件会按照固定的大小(blocksize)切分成若干块分布式存储在若干台datanode上;
    (5)每个文件可以有多个副本,并存放在不同的datanode上;
    (6)Datanode会定期向Namenode汇报自身保存的block信息,而Namenode则会负责保持文件的副本数量;
    (7)HDFS的内部工作机制对于客户端透明,客户端的请求访问HDFS都是通过Namenode申请进行的。

    二、HDFS的概念

    (1)HDFS采用主从式(master\Slave)的体系结构,其中Namenode(NN)、Datanode(DN)和Client是HDFS中三个重要的角色;
    (2)在一个HDFS中,有一个NN,一个SNN(Secondary Namenode)和众多的DN,Client也可以有很多个;
    (3)NN管理HDFS中两个重要的关系:目录文件数结构和文件与数据块的对应关系(会持续化到物理内存,文件名叫fsimage);DN和数据块的对应关系,即数据块存储在哪些DN上(在DN启动时会上报NN它所维护的数据块,这个过程是动态建立的,不会持久化,所以集群启动需要较长时间);
    (4)总之,HDFS是一个文件系统,用于存储文件,通过统一命名空间--目录树来定位文件。其次,它是分布式的,由很多服务器联合实现其功能,集群中的服务器有各自的角色。

    三、HDFS的特性

    (1)HDFS中的文件在物理上是分块存储(Block),块的大小可以通过参数配置(df.blocksize)来规定默认大小。在hadoop2.x默认为128M,以前版本为64M;
    (2)HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径访问文件;
    (3)目录结构及文件分块信息(元数据)的管理由namenode节点承担,namenode节点是HDFS集群的主节点,负责维护整个HDFS文件系统的目录结构以及每一个路径对应的block块信息(block的id,以及所在的datanode服务器);
    (4)文件的各个block的存储管理由datanode节点承担,datanode是HDFS集群的从节点,每个block都可以在多个datanode上存储多个副本(副本参数可以通过dfs.replication设置);
    (5)HDFS适应一次写入,多次读出的场景,不支持文件的修改;
    (6)总之,hdfs的特点:保存多个副本,且提供容错机制,副本丢失或者宕机自动恢复(默认3备份),运行在廉价的机器上,适合大数据的处理。

    HDFS集群特点.png

    四、HDFS的局限性

    (1)低延时数据访问。由于HDFS为了高吞吐率做了设计,牺牲了快速响应。对于低延时的应用,可以考虑使用HBase或者Cassandra;
    (2)大量的小文件。存储大量小文件不会浪费实际存储空间,但增加了在Namenode中元数据,大量小文件会影响整个集群的性能(Btrfs为小文件做了优化-inline file);
    (3)多用户写入,修改文件。HDFS的文件只能有一个写入者,而且写操作智能在文件结尾追加。不支持多个写入者,不支持任意位置的修改。

    五、HDFS可靠性措施

    (1)冗余备份
    (2)副本存放:采用机架感知(Rak-aware)的策略改进数据可靠性、高可用和网络带宽的利用率;
    (3)心跳检测:Namenode周期从每个datanode接收心跳包和块报告,收到说明Datanode工作正常;
    (4)安全模式:系统启动时,Namenode进入一个安全模式,此时不会出现数据块的写操作;
    (5)数据完整性检测:HDFS客户端实现对HDFS文件内容的校验和(Checksum)检查(dfs.bytes-per-checksum)。


    HDFS基本概念

    一、HDFS主从结构体系

    HDFS主从机构体系.png

    二、数据块(DataBlock)

    (1)HDFS将每个文件存储成一系列的数据块,每块大小相同;
    (2)文件的所有数据块都存在备份,每个文件的数据块大小和副本系数都是可以配置的(dfs.blocksize、dfs.replication);
    (3)HDFS的文件都是一次写入的,且任何时候只能有一个写入者。

    三、名字节点(主节点:Namenode)

    NameNode.png

    四、数据节点(从节点:Datanode)

    (1)概述:
    1、DN是HDFS中硬盘IO最忙碌的部分:将HDFS的数据块写到Linux本地文件系统,或者从这些数据块中读取数据。DN作为从节点,会不断向NN发送心跳;
    2、初始化时,每个DN将当前节点的数据块上报给NN。DN也会接受来自NN的指令,比如创建、移动或删除本地数据块,并将本地的更新报告返回给NN;
    (2)作用:接受客户端或Namenode的调度;存储和检索数据块;在Namenode统一调度下进行数据块的创建、删除和复制;定期向Namenode发送自身存储的数据块列表。

    五、Secondary Namenode

    (1)定期合并edits和fsimage(如果没有配置Secondary Namenode则由Namenode完成),并按照集群配置的时间将合并后新的fsimage,上传到NN替换旧的fsimage;
    (2)防止edits日志文件过大,SNN配合NN,为NN的第一关系提供简单的Checkpoint机制,并避免出现edits过大,导致NN启动时间过长问题;
    (3)提供Namenode的fsimage文件的检查点,以实现Namenode故障恢复。


    SecondaryNamenode.png

    单点故障问题

    一、单点故障问题

    (1)描述:Namenode失效,导致客户端或MapReduce作业均无法读写查看文件;
    (2)解决方法:
    1、启动一个拥有文件系统元数据的新Namenode(一般采用,因为复制元数据非常耗时);
    2、配置一对活动-备用(Active-Sandby)Namenode,活动Namenode失效时,备用Namenode立即接管,用户不会有明显的中断(借助NFS、Zookeeper等共享编辑日志文件;Datanode同时向两个Namenode汇报数据块信息;客户端采用特殊处理对用户透明)


    HDFS高可用性(HA:High-Availability)

    一、HA

    (1)原理:为了应对“单点失败”问题,减少问题处理时间和对用户的影响,Hadoop2.x引入active-standby模式的一对namenodes。当active的Namenode发生故障时,standby的机器会替代active的机器,成为新的Namenode。
    (2)active-standby架构
    1、两个Namenode之间共享同一块存储空间,一边共享编辑日志(edit log)。早期实现采用高可用的NFS,现在可以使用Zookeeper解决;
    2、Datanode必须向两个Namenode同时汇报存储情况;
    3、客户端配置成自动处理Namenode失败的情况,对用户透明。
    (3)判断active的Namenode的是否还正常,主要通过心跳请求来确认的。当故障发生时,切换到standby的Namenode提供服务时,但原来的active的Namenode可能由于网络慢等原因导致当时不能提供服务,后续又可以提供服务,这时需要阻止它再次加入系统,比如杀掉进程等。


    HDFS的客户端操作

    一、HDFS的Shell操作

    (1)查看命令帮助:hdfs -help
    (2)查看文件系统命令帮助:hdfs dfs -help

    二、HDFS DFS命令详解

    (1)创建目录:
    hadoop dfs -mkdir /input --->创建指定目录
    hadoop dfs -mkdir -p /user/hdfs --->递归创建指定目录
    (2)查看文件或目录:
    hdfs dfs -ls ---> 查看目录结构
    hdfs dfs -ls /input ---> 查看指定目录结构
    hdfs dfs -ls -R ---> 递归显示当前目录
    hdfs dfs -ls -R /input ---> 递归显示指定目录
    (3)文件上传:
    hdfs dfs -put local_file input ---> 将本地文件local_file上传到input
    (4)下载文件或目录到本地:
    hdfs dfs -get input . ---> 下载文件到当前目录
    (5)浏览hdfs中的文件:
    hdfs dfs -cat input/local_file ---> 浏览hdfs中的 文件
    (6)删除文件:
    hdfs dfs -rm input/local_file ---> 删除文件
    (7)在hdfs中复制文件:
    hdfs dfs -cp input/local_file input/local_file.bak 复制文件
    (8)修改权限:
    hdfs dfs -chmod 777 /input/somewords.txt 修改权限

    三、HDFS管理命令

    (1)系统目录检查
    hdfs fsck /user/xxx 系统目录详细检测
    (2)检查Datanode报告
    hdfs dfsadmin -report
    (3)权限管理
    hdfs fs -chmod 666 /user/xxx
    (4)hdfs空间目录配额设置
    hdfs dfsadmin -setSpaceQuota [N] /user/xxx
    (5)hdfs空间目录配额清除
    hdfs dfsadmin -clrSpaceQuota /user/xxx
    (6)查看目录配额设置
    hdfs fs -count q /user/xxx
    (7)删除Datanode
    hdfs dfsadmin -refreshNodes

    相关文章

      网友评论

        本文标题:Hadoop(二)HDFS集群详解

        本文链接:https://www.haomeiwen.com/subject/wylhjftx.html