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

来源:互联网 发布:淘宝客联盟社区 编辑:程序博客网 时间:2024/06/05 19:25

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

一:HDFS概述

 1.1HDFS来源
          HDFS源自于Google 2003年发表的GFS论文。HDFS是GFS的克隆版。
 1.2HDFS的优点
         (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的设计思想就是将大文件分成若干个小块
(默认块文件大小是64M)分别存储在不同的磁盘上。

2.2:HDFS架构
Namenode:主Master(只有一个),管理数据块映射信息,处理客户端读写请求。
Datanode:存储实际的数据块,执行数据块读/写。

三:HDFS文件读写

3.1:Hdfs数据块
(1):默认数据块大小为64MB,可配置
(2):文件不到64M。则单独占用一个block。
(3):数据传输时间超过寻道时间(高吞吐率),所以数据块比较大
(4):默认情况下每个block有3个副本。
3.2: HDFS写流程

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读流程

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


3.4:副本放置策略
为了提高HDFS的可靠性,副本并不是随机乱放的,而是有一定的策略。
副本1: 同Client的节点上
副本2: 不同机架中的节点上
副本3: 与第二个副本同一机架的另一个节点上
其他副本:随机挑选

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一样。




1 0
原创粉丝点击