1.想要把一个大文件存储到hdfs,首先进行划分,将文件划分为一个一个的block,这个block默认为512MB,可修改.
2.备份(也就是副本)
将文件划分后,一个block丢失则原来的大文件没有用了.为了确保文件的安全性,hdfs提供了副本,也就是备份,将文件划分之后hdfs默认将每一个block备份到其他不同datanode上(默认是备份两个不同datanode,可修改),这样一个block丢失可以将备份的复制到原位置,确保了hdfs文件系统的安全性
3.hdfs的副本数修改:
方式一:文件是hdfs.site.xml,默认是三个副本,基本无需修改
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
方式二:上传文件是自定义副本数量
命令: hadoop fs -D dfs.replication=2 -put test.txt /tmp/
-D表示执行文件系统命令时自行加入配置项
这时副本数根据配置文件来,我也没搞懂
4.查看副本,文件状态
命令: hdfs fsck path [-files [-blocks [-locations]]]
5。block配置,也在hdfs.site.xml文件
1684354456B=256MB,这是默认,可以自行修改
6.namenode元数据,元数据文件(edits)
一:edits文件,记录hdfs的每一次记录
二:FSImage文件(edits文件的合并)
三:配置,配置文件在hdfs.site.xml
查看元数据:(里面有edits文件与fsimage文件)
四:元数据合并控制参数
(1)定时过程:基于:dfs.namenode.checkpoint.period,默认 3600( 秒 )即1小时 dfs.namenode.checkpoint.txns,默认1000000,即 100W 次事务.只要有一个达到条件就执行。
(2)检查是否达到条件,默认60秒检查一次,基于:dfs.namenode.checkpoint.check.period.默认60 (秒),来决定.
五:合并由secondarynamenode处理
namenode运行客户所操作的命令后,生成edits文件,操作的文件或文件夹放入namenode与datanode,而namenode的fsimage文件由secondarynamenode把namenode的edits文件拿过来进行合并,再返回到namenode里.
没有secondarynamenode就没有fsimage文件
7.数据的写入流程:
一. 客户端向NameNode发起请求
二. NameNode审核权限、剩余空间后 ,满足条件允许写入, 并告知客户端写入的DataNode地址
三. 客户端向指定的DataNode发送数据包
四. 被写入数据的 DataNode 同时完成数据副本的复制 工作,将其接收的数据分发给其它DataNode
五. 写入完成,客户端通知NameNode,NameNode做元数据记录工作
8.数据的读流程:
一、客户端向NameNode申请读取某文件
二 、 NameNode判断客户端权限等细节后,允许读取,并返回此文件的block列表
三、 客户端拿到block列表后自行寻找DataNode读取即可
namenode就是干分析与记录的事儿,datanode完全是存放数据的,secondarynamenode就是把namenode生产出来的edits文件合并为fsimage文件,增加整个系统的性能