1.定义
HDFS是Hadoop Distribute File System的缩写,它是Google公司的GFS分布式文件系统的开源实现,是Apache Hadoop项目的一个子项目。支持海量数据的存储,成百上千的计算机组成存储集群,HDFS可以运行在低成本的硬件之上,具有的高容错、高可靠性、高可扩展性、高吞吐率等特征,非常适合大规模数据集上的应用。
1.1优点
- 数据冗余 ,高容错性 数据自动保存多个副本 副本丢失后,自动恢复 可构建在廉价机器上
- 流式文件访问 一次性写入,多次读取 保证数据一致性
- 适合大数据处理 GB、TB、甚至PB级数据
- 适合批处理 吞吐量高
1.2缺点
- 不适合低延迟数据访问 比如毫秒级 低延迟与高吞吐率
- 不适合小文件存取 占用NameNode大量内存 寻道时间超过读取时间
- 不适合并发写入、文件随机修改 一个文件只能有一个写入者 仅支持append
2.HDFS组成与架构
1.NameNode的职责(Master)
管理维护HDFS
接收客户端的请求:上传、下载、创建目录等
维护了两个非常重要的文件:edits日志文件和fsimage镜像文件
HDFS的元信息:fsimage文件
就跟edits文件在一起
记录:数据块的位置、冗余信息、文件属性等
二进制-Protobuf编码格式
HDFS提供一个 image viewer ----> 文本或者xml
edits记录了HDFS的操作日志
最新的操作日志:edits_inprogress****
都是二进制
HDFS提供一个工具:edits viewer 日志查看器 ----> XML
2.Secondary NameNode的职责
工作:把edits中最新的状态信息合并到fsimage文件中
目的:防止edits过大
1)每隔60分钟 2)当edits文件达到100万条事务,即进行合并。
3.DataNode的职责(Slave)
职责:保存文件内容(数据块,默认128M块大小)
例子:上传一个大于128M的文件(例子为206M)
hdfs dfs -put hadoop-2.7.3.tar.gz
上传完成,打印文件的Block报告
hdfs fsck /user/hadoop/hadoop-2.7.3.tar.gz -files -blocks
为什么分块?
- 一个巨大的文件一块磁盘空间不够
- 利于备份
- 提高吞吐量
数据块冗余存储
DataNode选择机制:
- 第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点
- 第二个副本:放置在与第一个副本相同的机架的节点上
- 第三个副本:与第二个副本不同机架的其他节点上
- 更多副本:随机节点
3.HDFS读写文件流程
3.1读文件流程
3.2写文件流程
3.3HDFS容错
HDFS具有较高的容错性,可以兼容廉价的硬件,它把硬件出错看作一种常态,而不是异常,并设计了相应的机制检测数据错误和进行自动恢复,主要包括以下几种情形:
名称节点出错 数据节点出错 数据出错
1、NameNode出错:用Secondary NameNode备份的fsimage恢复
2、DataNode出错:DataNode与NameNode通过“心跳”报告状态(每个数据节点会定期向名称节点发送“心跳”信息,向名称节点汇报自己的状态;当数据节点发生故障或者网络断网,名称节点就无法收到来自数据节点的心跳信息),失效后会启动数据冗余复制。 3、数据出错:采用md5和sha1对数据块进行校验。
4.安全模式-Safe Mode
4.1安全模式下:
文件系统只接受读数据请求
不能对数据进行修改、删除等写的操作
NameNode 主节点启动进入安全模式
离开安全模式,需要满足以下条件:
1. 达到副本数量要求的block比例满足要求;
2. 可用的datanode节点数满足配置的数量要求;
3. 1、2 两个条件满足后维持的时间达到配置的要求
command | 功能 |
get | 查看当前状态 |
enter | 进入安全模式 |
leave | 强制离开安全模式 |
wait | 一直等待直到安全模式结束 |
4.2回收站
HDFS为每一个用户都创建了回收站,这个类似操作系统的回收站。
位置是/user/用户名/.Trash/。
操作演示:
1、列出某目录下的文件:hdfs dfs -ls
2、把其中的一个文件file1删除:hdfs dfs -rm file1
3、到回收站可看到刚才删除的file1 hdfs dfs -ls /user/hadoop/.Trash/Current/tmp
4、把file1从回收站移动到/home/haoop/目录下
hdfs dfs -mv /user/hadoop/.Trash/Current/tmp/file1 /home/hadoop/
5、到/home/hadoop/查看即可看到恢复的文件file1 hdfs dfs -ls /tmp/sqoop1
4.3快照
快照:基于某时间点的数据的备份复制
作用:数据损坏时恢复到过去一个正确的时间点
4.4HA(High Availability高可用)
NameNode是集群的主,有单点失效的问题。
配置两个NameNode,一个为活跃状态,一个为备用状态。故障时马上切换
4.5联邦Federation
使用联邦的原因:
(1) 系统扩展性方面,元数据存储在NN内存中,受内存上限的制约。
(2) 整体性能方面,吞吐量受单个NN的影响。
(3) 隔离性方面,一个程序可能会影响其他运行的程序,如一个程序消耗过多资源导致其他程序无法顺利运行。HDFS HA本质上还是单名称节点。