1.hdfs概述
1.介绍
在现代的企业环境中,单机容量往往无法存储大量数据。统一管理分布在集群上的文件系统统称为分布式文件系统。
HDFS(Hadoop Distributed File System)是Apache Hadoop项目的一个子项目。Hadoop非常适合于存储大型数据(比如TB和PB),其就是使用HDFS作为存储系统。HDFS使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。
2 历史
2. HDFS应用场景
1. 适合的应用场景
2. 不适合的应用场景
3. HDFS的架构
HDFS是一个主/从(Master/Slave)体系结构
HDFS由四部分组成:
- HDFS Client(HDFS客户端)
- NameNode(HDFS主节点)
- DataNode(从节点)
- Secondary NameNode(对namenode做一些辅助性管理)
Client:就是客户端
NameNode:就是master,它是一个主管、管理者
DataNode:就是Slave。NameNode下达命令,DataNode执行实际操作
Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
4. NameNode和DataNode
1. Namenode作用
- NameNode在内存中保存着整个文件系统的名称、空间和文件数据块的地址映射
- 整个HDFS可存储的文件数受限于NameNode的内存大小
2. DataNode作用
提供真实文件数据的存储服务
- DataNode以数据块的形式存储HDFS文件
- DataNode响应HDFS客户端读写请求
- DataNode周期性向NameNode汇报心跳信息
- DataNode周期性向NameNode汇报数据块信息
- DataNode周期性向NameNode汇报缓存数据块信息
5. HDFS的副本机制和机架感知
1. HDFS文件副本机制
一个数据块一般放3个副本,在hdfs-site.xml中可以设置
2. 机架(rack)感知
HDFS分布式文件系统的内部有一个副本存放策略:以默认的副本数=3为例:
如果客户端和当前主机在同一个机架里面,会在客户端所在机架挑选一台主机,存放block作为第一个副本;然后在同一个机架上挑选另一台主机存放第二个副本;第三个会在本机架以外再挑选一个机架和服务器,存放第三个副本
6. hdfs的命令行使用
- hadoop:hadoop前一个是指的用户名,后一个是所属用户组
7.hdfs的高级使用命令
HDFS文件限额配置
数量限额
空间大小限额
注意:在给空间设置大小时,数字必须是一个block_size的大小乘以3(1283=384),所以至少是384M;129M的文件需要768M,因为129M会被切成两个block,每个block又需要三个副本,1286=768
- hdfs的安全模式
8. hdfs基准测试
实际生产环境当中,hadoop的环境搭建完成之后,第一件事情就是进行压力测试,测试我们的集群的读取和写入速度,测试我们的网络带宽是否足够一些基准测试
- 测试写入速度
- 测试读取速度
- 清除测试数据
清除的是hdfs上benchmarks的内容
9. hdfs的文件写入过程
- 客户请求上传文件
- namenode检测上传权限,看看文件是否已存在
- namenode给client发送信息,可以上传
- 将文件切分block,请求上传blk1
- 根据集群dn上的block信息和机架感知,选出可以上传的三个主机
- 返回datanode列表
- client和datanode之间建立管道,dn之间建立管道
- client向dn传递数据,传递的单位:packet(64k)
- datanode收到packet后会进行缓存
- 发送应答ack,告诉已收到(3->2, 2->1, 1->client)
- 回到4,上传blk2
10. hdfs文件的读取过程
- client想namenode请求下载文件
- namenode权限检查,文件block列表检查,检查那个datanode上有对应的blk,选出每一个block对应的主机列表
- 返回block主机列表
- client和对应的主机建立管道
- 开始数据的读取,读取的单位:packet(64k),三个读操作可以并行进行
- 将block进行合并,合并成一个完整的文件
11. HDFS的元数据辅助管理
1.
- fsimage是NameNode的完整的镜像,如果每次都加载到内存生成树装拓扑结构,这是非常耗内存和cpu,所以一般开始时对NameNode的操作都放在edits中
- fsimage内容包含了NameNode管理下的所有DataNode文件及文件block及block所在的DataNide的元数据信息
- 随着edits内容增大,就需要在一定时间点和faimage合并
2. SecondaryNameNode如何辅助管理fsimage与edits文件
SecondaryNameNode定期合并fsimage和edits,把edits控制在一个范围内
触发条件(可以通过core-site.xml设置):
- 时间:1小时
- 文件大小:64M
合并完会将原来的日志文件清空,得到新的fsimage,替换旧的fsimage
12. HDFS的高可用机制
- 组件介绍
ZKfailoverController
是基于zookeeper