一、HDFS文件存储系统

1、产生背景
传统的单机式本地存储,在数据量增长过快,数据备份,安全性,操作便捷性上严重不足
2、特点
高容错高可用:
数据不丢失,服务不中断,有成熟的自检系统并且不会因为一处错误影响整体运行
流失数据访问:
HDFS更关注数据访问的高吞吐量
弹性存储,支持大规模数据集
简单一致性模型:
HDFS使用一次写多次读的模式,文件在创建,写入,关闭后就不在更改,提高数据的吞吐量
移动计算而非移动数据:
相比之下移动代码的代价要比移动数据小得多,也可以减少网络拥堵和提高吞吐量。
协议和接口多样性
多样的数据管理功能

二、HDFS架构设计

1、HDFS组件角色
1.1NameNode
管理数据的元数据,记录如何分割的以及存储位置。
1.2DataNode
是文件系统的工作节点,根据客户端或者NameNode发出的指令进行读写和检索。
有心跳检测机制
1.3Client
开发人员面对Client API编程。
2、HDFS架构设计
图片.png
3、读文件流程
第一步:客户端向NameNode发送读取数据请求
第二步:NameNode做出响应并发送给客户端要访问数据的存放位置。
第三步:客户端直接与DataNode进行交互,得到数据。注意数据是并发处理的。
4、写文件流程
第一步:客户端发送写请求,并且寻找可以存放数据的空间。数据是被划分为多个block块来存储的。
第二步:客户端开始写操作。
第三步:写完之后会接收到ack答复,关闭socket流。

三、HDFS高可用性措施

1、冗余备份
为避免数据存放的节点宕机而导致不可用,数据会在多个节点进行备份。
2、跨机架存放副本6\
例如备份的个数为三个,则会在同机架备份一哥,别的机架备份一个。前者保证某个节点宕机,后者保证某个机架宕机。
3、心跳检测机制
NameNode会定期向DataNode发送心跳包,确保自己的可用性。如果已经宕机则采用其他措施。
4、数据完整性检测
NameNode在存贮数据之前会获取数据的信息,在用户从DataNode取出时进行对比。
5、安全模式
HDFS在启动时会自动进入安全模式,在确认无误之后会退出。
6、核心文件备份
HDFS的核心文件是映像文件和事务日志,如果损坏则导致HDFS不可用。
7、空间回收
在删除之后不会真的删除,而是放入、treach文件夹下。

四、HDFS常用命令

hdfs dfs -ls
hdfs dfs -cat / 查看某目录某文件内容
hdfs dfs -mkdir /*
创建目录
hdfs dfs -rm -r / 删除
hdfs dfs -copyToLocal /
从hdfs向本地下载文件
hdfs dfs -copyFromLocal / 在本地向hdfs上传文件
hdfs dfs -text /
查看压缩的文件内容
hdfs dfs -du -h 查看文件大小
hdfs dfs -touchz /* 创建文件

五、HDFS Java API应用

pom依赖

4.0.0
com.tianliangedu.course
TlHadoopCore
0.0.1-SNAPSHOT


UTF-8




nexus-aliyun
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public





org.apache.hadoop
hadoop-client
2.7.4
provided



TlHadoopCore


maven-compiler-plugin
2.3.2

1.8
1.8
UTF-8



maven-assembly-plugin


jar-with-dependencies



com.tl.job009.hdfs.HdfsFileRead





make-assembly
package

assembly






六、HDFS经典面试题

1、HDFS为何要将文件分成block块储存?
减少操作系统进行io寻址的时间,更方便流式读取,提高吞吐量
2、HDFS block的默认大小是多少?
Hadoop 2.2以后均为128M
3、HDFS block块的大小是否可以更改
可以更改,但是参数修改对以前的不起作用,只对以后的起作用,也可以针对上传的文件临时指定一次。
4、一个 block 块是否可以存储多个文件数据
不可以,只会存储一个文件,不会跨文件存储
5、如果一个文件的大小小于 blocksize(128M)的大小,那么他实际占用的空间大小是多少?
文件大小是多少实际就占了多少。但是会占了一个block块的元数据空间大小。
6、HDFS block 越大越好 还是越小越好?
越大则分块越少,减少NameNode压力,但io和处理能力降低
越小则分块越多,NameNode压力变大,但寻址时间太久,不利高吞吐量
所以适中即可,一般采用128M