- 将文件切分成一个个的Block,进行存储
- 与NameNode进行交互,获取文件的位置信息
- 与DataNode进行交互,读取或追加数据
- 通过命令来管理HDFS,如开启或关闭集群start-dfs.sh、stop-dfs.sh
- 通过命令访问HDFS
- 管理HDFS的命名空间
- 管理数据块(Block)的映射信息
- 配置副本策略
- 处理客户端的读写请求
- 存储实际的数据块
- 执行数据块的读/写操作
f
- 辅助NameNode分担其工作量
- 定期合并清洗整理fsimage和edits发送给NameNode
- 紧急情况下,帮助NameNode恢复数据,但是不能代替NamaNode工作
Hadoop1中默认块大小为64M,Hadoop2以后版本默认大小调整为128M,生产环境中一般为256M或512M
Block块过小,文件的数量增大,NameNode的压力会变大,文件查找时间也会变长
Block块过大,读取文件的时间会变长
2.HDFS基本操作命令HDFS的所有操作命令均以hdfs dfs 具体命令构成(另外两种语法hadoop dfs 命令、hadoop fs 命令)
1.-help#查看该命令帮助文档 具体命令 -help hdfs dfs -help2.-ls
#显示某路径下的目录信息 hdfs dfs ls 路径(相对路径或绝对路径) hdfs dfs ls /etc3.-mkdir
#在该路径下面创建一个文件夹 hdfs dfs -mkdir 路径 hdfs dfs -mkdir /root4.-moveFromLocal
#从本地剪切到HDFS hdfs dfs -moveFromLocal 本地路径 HDFS路径 hdfs dfs -moveFromLocal /root/a.txt /5.列举
诸如此类的命令还有很多,用法大同小异,笔者这里就不逐个列举了,只写明指令的作用。
#追加一个文件到已存在文件的末尾 hdfs dfs -appendToFile 本地文件路径 目标文件路径 #显示文件内容 hdfs dfs -cat 文件路径(具体到文件名称) #显示文件末端10行 hdfs dfs -tail 文件路径(具体到文件名称) #修改使用者权限 hdfs dfs -chgrp +r 文件 hdfs dfs -chown +r 文件 hdfs dfs -chmod +r 文件 #从本地拷贝文件到HDFS中 hdfs dfs -copyFromLocal 本地路径 目标路径 #从HDFS拷贝到本地 hdfs dfs -copyToLocal 文件 本地路径 #从HDFS的一个路径拷贝到另一个路径 hdfs dfs -cp 路径 路径 #在HDFS中移动文件 hdfs dfs -mv 路径 路径 #从HDFS下载文件 hdfs dfs -get HDFS路径 本地路径 #多个文件打包下载 hdfs dfs -getmerge HDFS路径 本地路径 #上传文件 hdfs dfs -put 本地路径 目标路径 #设置HDFS文件副本数量 hdfs dfs -setrep 文件 数量3.HDFS文件的读写流程 1.HDFS文件的写入流程 2.HDFS文件的读取流程 4.NameNode和SecondaryNameNode的工作机制 1.NameNode的工作机制
-
第一次启动NameNode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
-
客户端对元数据进行增删改的请求
-
NameNode在内存中对数据进行增删改
-
Secondary NameNode询问NmaeNode是否需要checkpoint。直接带回NameNode是否检查结果。
-
Secondary NameNode请求执行checkpoint。
-
NameNode滚动正在写的edits日志
-
将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode
-
Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
-
生成新的镜像文件fsimage.chkpoint
-
拷贝fsimage.chkpoint到NmaeNode
-
NmaeNode将fsimage.chkpoint重新命名成fsimage
简单的总结就是,NameNode负责对数据文档的上传、追加、下载等做好记录,Secondary NameNode负责周期性的去拷贝NameNode中的元数据,并对数据进行清洗、整理、合并之后在发送给NameNode,协助NameNode工作
3.集群的安全模式- Namenode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,NmaeNode开始监听DataNode请求。但是此刻,NmaeNode运行在安全模式,即NmaeNode的文件系统对于客户端来说是只读的。
- 系统中的数据块的位置并不是由NmaeNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NmaeNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NmaeNode发送最新的块列表信息,NmaeNode了解到足够多的块位置信息之后,即可高效运行文件系统。
- 如果满足“最小复本条件”,NmaeNode会在30秒钟之后就退出安全模式。所谓的最小复本条件指的是在整个文件系统中99.9%的块满足最小复本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NmaeNode不会进入安全模式。
集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
相关语法:
hdfs dfsadmin -safemode get (功能描述:查看安全模式状态) hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态) hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态) hdfs dfsadmin -safemode wait (功能描述:等待安全模式退出)5.DataNode工作机制 1.DataNode的工作机制
- 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
- DataNode启动后向NmaeNode注册,通过后,周期性(1小时)的向NmaeNode上报所有的块信息。
- 心跳是每3秒一次,心跳返回结果带有NmaeNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
- 集群运行中可以安全加入和退出一些机器。
- 当DataNode读取Block的时候,它会计算checksum。
- 如果计算后的checksum,与Block创建时值不一样,说明Block已经损坏。
- 这时客户端读取其他DataNode上备份的Block。
- DataNode会在其文件创建后周期验证checksum。
- 校验采用crc算法校验
快照相当于对目录做一个备份。并不会立即复制所有文件,而是当文件发生写入或修改变化时才会产生新的文件。
#基本语法 hdfs dfsadmin -allowSnapshot 路径 (功能描述:开启指定目录的快照功能) hdfs dfsadmin -disallowSnapshot 路径 (功能描述:禁用指定目录的快照功能,默认是禁用) hdfs dfs -createSnapshot 路径 (功能描述:对目录创建快照) hdfs dfs -createSnapshot 路径 名称 (功能描述:指定名称创建快照) hdfs dfs -renameSnapshot 路径 旧名称 新名称 (功能描述:重命名快照) hdfs lsSnapshottableDir (功能描述:列出当前用户所有可快照目录) hdfs snapshotDiff 路径1 路径2 (功能描述:比较两个快照目录的不同之处) hdfs dfs -deleteSnapshot(功能描述:删除快照)



