Hadoop学习笔记--3.Hdfs分布式文件系统

一:HDFS概述










          (1):高容错性



                    数据自动保存多个副本(可以设置副本的数量,默认为3个)



                    副本丢失后,系统会自动恢复



         (2):适合批处理



                    移动计算而非数据



                    数据位置暴露给计算框架



         (3): 适合大数据处理



                    GB、 TB、甚至PB级数据



                    百万规模以上的文件数量



                    10K+节点规模



  (4):流式文件访问



               一次性写入,多次读取



               保证数据一致性



   (5):可构建在廉价机器上



               通过多副本提高可靠性



                      提供了容错和恢复机制






1.3HDFS的缺点



(1): 不合适低延迟数据访问



因为HDFS是设计用于大吞吐量数据的,这是以一定延时为代价的。



对于那些有低延时要求的应用程序,HBase是一个更好的选择。使用缓存或多master设计



可以降低client的数据请求压力,以减少延时。还有就是对HDFS系统内部的修改,这就得权衡大



吞吐量与低延时了,HDFS不是万能的银弹。



(2):小文件存取



占用NameNode大量内存



寻道时间超过读取时间



3):不支持并发写入、文件随机修改



一个文件只能有一个写者



仅支持append




二:HDFS设计思想与架构



2.1设计思想



hdfs文件保留表头 hdfs中的文件默认保存几份_服务器



找了 一个百度上的图片,HDFS的设计思想就是将大文件分成若干个小块



(默认块文件大小是64M)分别存储在不同的磁盘上。





2.2:HDFS架构

hdfs文件保留表头 hdfs中的文件默认保存几份_hdfs文件保留表头_02



Namenode:主Master(只有一个),管理数据块映射信息,处理客户端读写请求。



Datanode:存储实际的数据块,执行数据块读/写。




三:HDFS文件读写



3.1:Hdfs数据块



(1):默认数据块大小为64MB,可配置



(2):文件不到64M。则单独占用一个block。



(3):数据传输时间超过寻道时间(高吞吐率),所以数据块比较大



(4):默认情况下每个block有3个副本。




3.2: HDFS写流程



hdfs文件保留表头 hdfs中的文件默认保存几份_数据块_03



1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在

2、namenode返回是否可以上传

3、client请求第一个 block该传输到哪些datanode服务器上

4、namenode返回3个datanode服务器ABC

5、client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),

A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端

6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,

A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答

7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。









3.3:HDFS读流程






hdfs文件保留表头 hdfs中的文件默认保存几份_hdfs文件保留表头_04



1、跟namenode通信查询元数据,找到文件块所在的datanode服务器
2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
4、客户端以packet为单位接收,现在本地缓存,然后写入目标文件









3.4:副本放置策略



为了提高HDFS的可靠性,副本并不是随机乱放的,而是有一定的策略。



副本1: 同Client的节点上



副本2: 不同机架中的节点上



副本3: 与第二个副本同一机架的另一个节点上



其他副本:随机挑选






hdfs文件保留表头 hdfs中的文件默认保存几份_HDFS_05






3.5:文件完整性



HDFS采用CRC32校验来验真数据的完整性。CRC校验和是4个字节,存放在DataNode中。



如果检查到错误,就会向客户端抛出CheckSumException。DataNode在后台中也会运行DataBlockScanner线程,



检查到错误,会通知nameNode,namenode会标记为已损坏,然后从别的副本中复制到新的DataNode,最后删除这个



已损坏的DataNode。










四:HDFS shell常用命令





将本地文件上传到HDFS上:bin/hadoop fs -copyFromLocal /local/data /hdfs/data(等同于put)



将HDFS下载到本地:bin/hadoop fs -copytoLocal /hdfs/data /local/data (等同于get)


删除文件/目录:bin/hadoop fs -rmr /hdfs/data


创建目录:bin/hadoop fs -mkdir /hdfs/data



显示一个文件或文件夹的元信息:-stat



显示一个文件的末尾:-tail




基本很多命令与Linux一样。