HDFS
分布式文件系统,为海量的数据提供了存储。
可以把HDFS简单理解为一个分布式的,可以动态扩展并有冗余备份,用来存储大规模数据的大硬盘。
HDFS的文件被分成块进行存储,默认块的大小为64M,所以说块是文件存储和处理的逻辑单元。
HDFS的组成:
-
NameNode:管理数据的节点,每个HDFS集群只有一个,管理HDFS的名称空间和数据块映射信息,配置相关副本信息,处理客户端请求。
元数据存储在内存(快速查询)与磁盘(崩溃恢复)中,其内容有:文件存储位置,切块数,文件块存储的DataNode地址,由Fsimage与Edits与Fstime文件内存与磁盘中的数据组成。Fsimage:存储元数据,是一个二进制文件,记录了HDFS中所有文件和目录的元数据信息;
Edits:存储HDFS的操作,启动hdfs时,会生成edits文件;
Fstime:记录上一次的更新时间; -
SecondaryNamenode:辅助NameNode,实现高可靠性,进行Fsimage和Edits的定期合并,推送给NameNode,起到一定的备份作用,但并不是NameNode的热备份,NameNode的备份需要借助Journalnode,但紧急情况下可以辅助和恢复NameNode。
-
DataNode:一个大的数据分块存储的节点,存储实际数据,并汇报状态信息给NameNode,默认一个文件会备份3份在不同的DataNode中,实现高可靠性和容错性。
-
Client:切分文件,首先与NameNode交互,获取目标文件的位置信息,然后与DataNode交互,读写数据。
初次使用hdfs时,有一个默认的edits和fsimage的合并周期是1分钟,以后再使用hdfs的过程中,edits-inprogress到达默认的合并周期(3600s)会执行。或者手动合并指令(hadoop dfsadmin -rollEdits),或者停止hdfs再启动。
Edits和Fsimage的合并流程如下:
- 开始合并时,SNN 会把 edits 和 fsimage 拷贝到自己服务器所在内存中,开始合并,合并生成一个名为 fsimage.ckpt 的文件。
- 将 fsimage.ckpt 文件拷贝到 NameNode ,成功后,再删除原有的 fsimage,并将fsimage.ckpt文件重命名为 fsimage。
- 当 SNN 将 edits 和 fsimage 拷贝走之后,NameNode 会立刻生成一个 edits.new文件,用于记录新来的元数据,当合并完成之后,原有的 edits 文件才会被删除,并将 edits.new 文件重命名为 edits文件,开启下一轮流程。
特点:
- 数据冗余,硬件容错
- 流式的数据访问
- 存储大文件
应用:
- 适合数据批量读写,吞吐量高。不适合交互式应用,低延迟很难满足。
- 适合一次写入多次读取,顺序读写。不支持多用户并发写入相同文件。
常用操作指令:
#初始格式化
hadoop namenode -format
#打印Hdfs当前文件夹
hadoop fs -ls/
#创建并上传文件操作
hadoop fs -mkdir input
hadoop fs -put hadoop_env.sh input /
#查看具体文件
hadoop fs -cat input/hadoop_env.sh
#下载文件
hadoop fs -get input/hadoop_env.sh hadoop_env2.sh
#查看文件系统所有文件
hadoop dfadmin -report
Edits和Fsimage文件内容可参考:
https://blog.csdn.net/q35445762/article/details/91472746
HDFS流程相关可参考:
https://blog.csdn.net/weixin_38625805/article/details/82120573