东莞常平做网站精准客户资源购买
一、HDFS高级命令
1.HDFS文件限额配置
HDFS文件限额配置可以限制一个目录的文件数量,空间大小
1.1 文件数量限制
我们新建一个目录,使用hdfs dfs -count -q -h查看这个目录的原始限额信息
当设置目录上限为n个文件时,实际上只能存储n-1个文件,因为目录也算一个
1.2 空间大小限额
给目录空间限额有一个原则,即限额必须大于Block容量3
文件上传到被限额的目录时,目录空间限额量必须大于 文件大小/block容量3,否则会上传失败。
2.HDFS的安全模式
安全模式是hadoop的一种保护机制,用于保护数据块的安全性。当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性,即检查副本率(实际副本数/默认副本数)如果副本率小于0.999,hadoop会增加副本,如果副本数大于默认副本的个数,则会删除多余的副本。
默认配置下如果没有问题,30秒之后会退出安全模式
在安全模式下,文件系统只能读取,不能删改
在50070端口可以更直观地看到系统是否正在处于安全模式
二、HDFS基准测试
在hadoop集群搭建完成后,第一件事情就是执行压力测试
1.测试写入速度
执行hadoop安装包 share/hadoop/mapreduce下hadoop-mapreduce-client-jobclient-2.9.2.jar这个jar包
写入速度测试结果
2.测试读取速度
这个测试命令和上一个只是换了一个参数read
查看测试结果
3.清除测试数据
三、HDFS文件写入过程
1.client请求上传文件
2.NameNode检测上传权限
3.可以上传,NameNode回复Client
4.Client切分文件,请求上传第一个block
5.NameNode根据集群信息和机架感知,选出可以上传的三个DataNode
6.NameNode将选出的DataNode列表回复给Client
7.Client与DataNode建立piepeline,DataNode与DataNode之间也建立piepeline
8.Client依靠piepeline转递数据(传递的数据单位是packet(64k))
9.当第一个DataNode接受到数据,它会进行缓存,通过piepeline再传递到下一个DataNode,下一个DataNode也会缓存,依次传递
10.第N个DataNode发送应道到N-1个DataNode,依次发送,直到发到第一个DataNode,然后第一个DataNode回复客户端,发送完毕。
11.从4步开始,Client开始上传第二个block
四、HDFS文件读取过程
1.client发送下载请求
2.NameNode进行权限检查和block列表检查
3.返回block主机列表给client
4.client与DataNode建立piepeline
5.开始读取数据,读取的数据单位也是packet,读操作是并行进行的
6.将block进行合并
五、HDFS的元数据管理
1. FsImage 和 Edits文件
1.fsImage:由于NameNode将文件的元数据保存在内存中,如果重启就会消失。fsImage就是元数据的持久化文件。但fsImage并不一定是完整的元数据文件,它只是一段时间内的元数据,需要根据Eidts文件进行补全
2.Eidts:保存最近的对元数据操作的日志文件
fsimage,Eidts的位置配置在了hdfs-site.xml中
<!-- fsimage--><property><name>dfs.namenode.name.dir</name><value>file:///opt/hadoop-2.9.2/hadoopData</value></property><!--edits--><property><name>dfs.namenode.edits.dir</name><value>file:///opt/hadoop-2.9.2/hadoopData</value></property>
查看fsimage和edits的命令
-i 表示哪一个文件,-p表示解析的方式,-o表示保存在哪个文件
2.SecondaryNameNode 如何辅助管理 fsimage 与 edits 文件
当服务器运行时间不断增加,edits的文件大小就会不断增大,这时就需要SecondaryNameNode定期合并 fsimage 和 edits, 把edits控制在一个范围内
SecondaryNameNode合并fsimage和edits,有两个触发条件,我们可以通过修改hdfs-site.xml来配置
<!-- 多久记录一次 HDFS 镜像, 默认 1小时 --><property> <name>fs.checkpoint.period</name> <value>3600<alue></property><!-- 一次记录多大, 默认 64M --><property> <name>fs.checkpoint.size</name> <value>67108864<alue></property>
补充:HDFS的高可用机制
NameNode作为HDFS的核心,肯定不能只有一个。在一个高可用的HDFS中,有一个NameNode作为active状态,多个NameNode作为StandBy。
HDFS使用JournalNode来管理元数据信息,同时备份多个JouranlNode组成元数据的共享存储系统。
active状态的NameNode将Edits日志写入共享存储系统,StandBy从共享存储系统中读取Edits日志。保证所有NameNode内的元数据是同步的HDFS使用ZKFC组件(基于zookeeper实现)监控NameNode状况和即使切换Active的NameNode,具体机制如下图
补充:HDFS的联邦机制(Federation)
随着业务量的增多,我们内存中元数据会越来越多,甚至达到上百G。NameNode成为了性能的瓶颈。因而提出了namenode水平扩展方案— Federation。
简单来说,就是再给HDFS中增加多个NameNode集群,不同的集群管理系统中不同的文件,互不干涉