一、块的概念
1. 概念
-
HDFS的本质是一个文件系统,特点是分布式,需要在多台机器启动多个NN,DN进程组成一个分布式系统
-
HDFS不支持对一个文件的并发写入,也不支持对文件的随机修改,不适合存储小文件(存储小文件时会降低NN的服务能力)
2. HDFS的块大小
-
块大小可以通过hdfs-site.xml中的dfs.blocksize进行配置,
如果不配置,那么在hadoop1.x时,dfs.blocksize=64M,在hadoop2.xdfs.blocksize=128M -
默认值为128M的原因:
hadoop默认使用hadoop的集群的机器都采用普通的机器磁盘 -
基于最佳传输消耗理论,一次传输中寻址时间为总传输时间的1%为最佳状态
目前机器磁盘的寻址时间普遍为10ms, 10ms / 1% * 磁盘的写入速度(100M/S)=100M -
块大小不能太小:
如果块太小,会造成降低NN的服务能力,在读取和上传一个大的文件时带来额外的寻址时间消耗 -
块大小不能太大:
如果块太大,在一次上传时,如果发生异常,需要重新传输,造成网络IO资源的浪费,
在随机读取某部分内容时,不够灵活
3. 块大小和副本数
1. 块大小指的是块的极限值
2. 副本数指的也是副本的最大值
这两个参数都是在客户端上传文件时指定
4. 块的属性
length: 块的实际大小
offset: 块的便宜量,这个块从文件的哪部分开始保存数据
二、拓扑距离和机架感知
1. 拓扑距离
拓扑距离指网络中各个节点之间抽象的一种距离,通常指两个节点到达共同祖先节点的和。
2. 机架感知
2.7.2的默认的机架感知策略:
- 在本地机架挑选一个节点,保存第一个副本,如果本地机架没有DN节点,挑选距离本地机架最近的一个节点
- 在本机机架挑选另一个节点,保存第二个副本,如果本地机架没有DN节点,挑选距离本地机架最近的一个节点
- 在其他机架选择一个节点,保存第三个副本
三、NameNode工作原理
1. NN的作用
- NN保存HDFS上所有文件的元数据
- NN负责接受客户端的请求
- NN负责接受DN上报的信息,给DN分配任务(维护副本数)
2.元数据的存储
元数据存储在fsiamge文件+edits文件中!
fsimage(元数据的快照文件)
edits(记录所有写操作的文件)
NN负责集群中所有客户端的请求和所有DN的请求,在一个集群中,通常NN需要一个高配置,保证NN可以及时处理客户端或DN的请求,一旦NN无法及时处理请求,HDFS就已经瘫痪
-
fsimage文件的产生:
①第一次格式化NN时,此时会创建NN工作的目录,其次在目录中生成一个fsimage_000000000000文件 ②当NN在启动时,NN会将所有的edits文件和fsiamge文件加载到内存合并得到最新的元数据,将元数据持久化到磁盘生成新的fsimage文件 ③如果启用了2NN,2NN也会辅助NN合并元数据,会将合并后的元数据发送到NN
-
edits:
NN在启动之后,每次接受的写操作请求,都会将写命令记录到edits文件中,edits文件每间隔一定的时间和大小滚动 -
txid :
每次写操作命令,分解为若干步,每一步都会有一个id,这个id称为txid -
NN的元数据分两部分:
①inodes : 记录在fsimage文件中或edits文件中
②blocklist: 块的位置信息(每次DN在启动后,自动上报的) -
checkpoint
每次Namenode会定期进行checkpoint,主要了为了防止在运行期间产生大量的edits文件,导致下次重启时恢复时间过长,其定期将edits文件中新的内容,持久化到fsimage文件中,进行快照存储默认的机制:
①每间隔1h,执行一次
②距离上次,又新产生了100w次txns操作 -
NN的安全模式
-
NN的安全模式主要是为了接受DN上报块信息。每次NN启动时,会自动进入安全模式,在安全模式只能有限读,不能写
-
当DN上报的块的最小副本数的总数 / 块的总数 > 0.999时,NN会在30秒后自动离开
手动操作: hdfs dfsadmin -safemode get|enter|leave|wait
四、DataNode
1.作用
- 接受客户端的读写块请求
- DN负责维护块的完整性,通过定期检查块的校验和判断块是否损坏,损坏的块,DN会自动删除,在下次启动时,不会上报给NN
- DN负责定期向NN汇报块的信息,接收NN的其他任务(复制块等)
2.Datanode的掉线时长
DN和NN每间隔dfs.heartbeat.interval(3s) 进行一次心跳,如果DN和NN上一次心跳距离当前时间,已经过了2dfs.namenode.heartbeat.recheck-interval(5min)+10dfs.heartbeat.interval ,此时NN会将DN的状态标记为DEAD。
五、其他配置
1. NN的多目录配置
NN的多目录指对元数据进行多个目录的同时备份,通过hdfs-site.xml中的dfs.namenode.name.dir进行设置
2. DN的多目录配置
如果机器添加了新的磁盘,希望DN在写入块时,向新磁盘的目录进行写入,则需要配置DN的多目录。
DN的多目录需要通过hdfs-site.xml中dfs.datanode.data.dir进行配置
3. 服役新节点
- 准备机器,安装软件,配置NN,RM的相关配置
- 启动datanode和nodemanager进程即可
注意:服役了新的DN节点后,可以执行再平衡的命令,这个命令可以将集群中块进行重新平衡分配。
./start-balancer.sh
4. 白名单
白名单是为了阻止某个进程加入集群,白名单之外的机器,无法进入集群。
白名单通过hdfs-site.xml中的dfs.hosts配置,可以使用 hdfs dfsadmin -refreshNodes刷新配置,读取此配置信息
5.黑名单
黑名单是为了退役datanode,黑名单中的机器在最后一次启动时,会将当前机器的块移动到其他节点
黑名单通过hdfs-site.xml中的dfs.hosts.exclude配置
注意: 如果当前集群中在线的DN节点不满足某些文件的副本数要求,当前退役节点是无法退役完成的
6.集群间的拷贝
hadoop distcp hdfs://xxxx:xxx/xxx hdfs://xxxx:xxx/xxx
7.在线归档
在线归档的功能实际是一个MR程序,这个程序将HDFS已经存在的多个小文件归档为一个归档文件
归档: hadoop arichieve -archievename 归档文件名 -p 父目录 输入文件... 输出目录
使用: hadoop fs -ls har:///归档文件名
注意:在线归档不会删除原文件