原文地址: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的局限性
(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
网友评论