hadoop的分布式文件系统HDFS

1.HDFS性能介绍

HDFS(Hadoop Distributed File System)是一个分布式文件系统。它具有高容错性并提供了高吞吐量的数据访问,非常适合大规模数据集上的应用,它提供了一个高度容错性和高吞吐量的海量数据存储解决方案。

1)高吞吐量访问:HDFS的每个Block分布在不同的Rack上,在用户访问时,HDFS会计算使用最近和访问量最小的服务器给用户提供。由于Block在不同的Rack上都有备份,所以不再是单数据访问,所以速度和效率是非常快的。另外HDFS可以并行从服务器集群中读写,增加了文件读写的访问带宽。

2)高容错性:系统故障是不可避免的,如何做到故障之后的数据恢复和容错处理是至关重要的。HDFS通过多方面保证数据的可靠性,多份复制并且分布到物理位置的不同服务器上,数据校验功能、后台的连续自检数据一致性功能都为高容错提供了可能。

3)线性扩展:因为HDFS的Block信息存放到NameNode上,文件的Block分布到DataNode上,当扩充的时候仅仅添加DataNode数量,系统可以在不停止服务的情况下做扩充,不需要人工干预。

2.hadoop主从结构图

HDFS是Master和Slave的结构

如上图所示HDFS是Master和Slave的结构,分为NameNode、Secondary NameNode和DataNode三种角色。

1)NameNode:在Hadoop1.X中只有一个Master节点,管理HDFS的名称空间和数据块映射信息、配置副本策略和处理客户端请求;

2)Secondary NameNode:辅助NameNode,分担NameNode工作,定期合并fsimage和fsedits并推送给NameNode,紧急情况下可辅助恢复NameNode;

3)DataNode:Slave节点,实际存储数据、执行数据块的读写并汇报存储信息给NameNode;

3.HDFS读操作流程图详解

读操作流程

1)客户端通过调用FileSystem对象的open()方法来打开希望读取的文件,对于HDFS来说,这个对象是分布文件系统的一个实例;

2)DistributedFileSystem通过使用RPC来调用NameNode以确定文件起始块的位置,同一Block按照重复数会返回多个位置,这些位置按照Hadoop集群拓扑结构排序,距离客户端近的排在前面;

3)前两步会返回一个FSDataInputStream对象,该对象会被封装成DFSInputStream对象,DFSInputStream可以方便的管理datanode和namenode数据流,客户端对这个输入流调用read()方法;

4)存储着文件起始块的DataNode地址的DFSInputStream随即连接距离最近的DataNode,通过对数据流反复调用read()方法,可以将数据从DataNode传输到客户端;

5)到达块的末端时,DFSInputStream会关闭与该DataNode的连接,然后寻找下一个块的最佳DataNode,这些操作对客户端来说是透明的,客户端的角度看来只是读一个持续不断的流;

6)一旦客户端完成读取,就对FSDataInputStream调用close()方法关闭文件读取。

4.HDFS写操作流程图详解

写操作流程图

1)客户端通过调用DistributedFileSystem的create()方法创建新文件;

2)DistributedFileSystem通过RPC调用NameNode去创建一个没有Blocks关联的新文件,创建前NameNode会做各种校验,比如文件是否存在、客户端有无权限去创建等。如果校验通过,NameNode会为创建新文件记录一条记录,否则就会抛出IO异常;

3)前两步结束后会返回FSDataOutputStream的对象,和读文件的时候相似,FSDataOutputStream被封装成DFSOutputStream,DFSOutputStream可以协调NameNode和Datanode。客户端开始写数据到DFSOutputStream,DFSOutputStream会把数据切成一个个小的数据包,并写入内部队列称为“数据队列”(Data Queue)

4)DataStreamer会去处理接受Data Queue,它先问询NameNode这个新的Block最适合存储的在哪几个DataNode里,比如重复数是3,那么就找到3个最适合的DataNode,把他们排成一个pipeline.DataStreamer把Packet按队列输出到管道的第一个Datanode中,第一个DataNode又把Packet输出到第二个DataNode中,以此类推;

5)DFSOutputStream还有一个对列叫Ack Quene,也是有Packet组成,等待DataNode的收到响应,当Pipeline中的所有DataNode都表示已经收到的时候,这时Akc Quene才会把对应的Packet包移除掉;

6)客户端完成写数据后调用close()方法关闭写入流;

7)DataStreamer把剩余的包都刷到Pipeline里然后等待Ack信息,收到最后一个Ack后,通知NameNode把文件标示为已完成。

5.HDFS中常用到的命令

#查看hdfs上的目录结构

hadoop fs -ls /    

# 递归查看hdfs上的目录结构           

hadoop fs -lsr

#在hdfs上创建目录

hadoop fs -mkdir /user/hadoop

#将本地文件上传到hdfs,保留本地文件:

hadoop fs -put a.txt /user/hadoop/

#将文件从HDFS下载到本地文件系统

hadoop fs -get /user/hadoop/a.txt /

#复制hdfs中的src为dst

hadoop fs -cp src dst

##移动/改名hdfs中的src为dst

hadoop fs -mv src dst

#查看hdfs上文件a.txt的内容

hadoop fs -cat /user/hadoop/a.txt

#删除目录下的文件

hadoop fs -rm /user/hadoop/a.txt

#删除目录

hadoop fs -rmr /user/hadoop/a

#为了避免误删数据,加了一个确认

hadoop fs -rmi /user/hadoop/a.txt

#将源文件输出为文本格式。允许的格式是zip和TextRecordInputStream

hadoop fs -text /user/hadoop/a.txt

#将本地文件上传到hdfs,保留本地文件:

hadoop fs -copyFromLocal localsrc dst 与hadoop fs -put功能类似。

#将本地文件上传到hdfs,同时删除本地文件:

hadoop fs -moveFromLocal localsrc dst    

#显示目录中所有文件大小,或者指定一个文件时,显示此文件大小

hadoop fs -du  /user/hadoop/a.txt

#计数文件个数及所占空间的详情

hadoop fs -count  /

5.1HDFS中常用到的命令

# 报告文件系统的基本信息和统计信息 

hadoop dfsadmin -report 

文件系统的基本信息

hadoop dfsadmin -safemode enter | leave | get | wait

# 安全模式维护命令。安全模式是 Namenode 的一个状态,这种状态下,Namenode  

# 1. 不接受对名字空间的更改(只读) 

# 2. 不复制或删除块 

# Namenode 会在启动时自动进入安全模式,当配置的块最小百分比数满足最小的副本数条件时,会自动离开安全模式。安全模式可以手动进入,但是这样的话也必须手动关闭安全模式。

5.2HDFS中常用到的命令

#运行 HDFS 文件系统检查工具

hadoop fsck

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先,我们在使用前先看看HDFS是什麽?这将有助于我们是以后的运维使用和故障排除思路的获得。 HDFS采用mast...
    W_Bousquet阅读 4,223评论 0 2
  • HDFS的设计 HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上。 超大文件:指的是几百MB、几百G...
    Vechace阅读 853评论 0 1
  • HDFS的设计目标 通过上一篇文章的介绍我们已经了解到HDFS到底是怎样的东西,以及它是怎样通过多副本机制来提供高...
    陌上疏影凉阅读 1,459评论 0 3
  • 对于一个长期有意识训练学庄子基本功的人来说,最显著的效果就是能很快察觉到自己的状态不对,并能迅速找到原因。 在这短...
    西班牙蜗牛阅读 420评论 0 4
  • 13年我们相识,当时我们互不了解对方,通过电话一点点变成相知,异地恋的爱情,在别人眼里是那样的异样,我相信...
    A俭丹阅读 201评论 0 0