namenode负责记录整个集群文件的位置,block具体放在哪台机器上,相当于一个中央账本,客户端每次操作都要经过namenode,可见namenode的重要性,namenode会放在内存中运行,因为如果任务太多,内存可以很快的保证任务的正常运行,但随着任务越来越多,内存中的数据就越来越多,所以就需要定时写入硬盘,namenode中有个image就是元数据的镜像文件,一条元数据大概是150字节,不管hdfs存的数据有多小也要占一个元数据,比如说同时上传一个128M整个文件和5个共128M的数据,后者就要占用5条元数据,因为每个block大小为128M,所以存小文件不划算,且效率不高,所以不要存一些小文件,因为可能 字节点空间还没用完,namenode空间就已经满了!! 元数据就是记录数据的数据,记录数据的位置,历史信息等,image文件不容易更改,所以每次先把客户端操作记录在edit日志文件里以追加的方式,万一namenode挂了,可以通过原先的image+edit恢复,但是机器已经运行很久了,通过image+edit在内存中恢复会经历很长时间, 且很占资源,namenode就不能为其他客户端服务了,所以交给secondarynameno,senamenode做合并image edit工作 有个checkpoint触发合并的点有按时或edit的数量由namenode控制,sena合并完,就会传回namenode
等下次sena就不用再下载namenode中的image了,只需要下载edit了,因为sena上次已经copy了,且还是合并image+edit的
Attention:namenode挂掉还是不能运行集群,因为sena只是用来合并元数据的,不能替代namende查询等功能,但是一旦namenode挂了,凭sena还是可以恢复绝大多数的文件,少部分edit日志恢复不了因为在内存中突然断电来不及村到磁盘,即将secondarynamenode cp重命名为name即可,所以namenode的工作目录应该放在多块不同的磁盘上在hdfs-site.xml中配置
<property>
<name>dfs.name.dir</name>
<value>/root/name1,/root/name2</value>
</property>
主要是edit文件
同理datanode也可配置但与namenode不同的是,namenode两个是完全一样的内容,而datanode则是相当与扩容,append,将name改成data
namenode工作目录中有个seen_id记录下次从哪些edit开始加载,即每次重启都加一
node节点工作目录,是每次集群在namenode中执行启动脚本去创建的,如果node节点工作目录被误删,下次重新集群启动就可恢复,因为有副本的存在,
如果某个节点从一个集群转到另一个集群,则需要把此节点的工作目录删除,因为有唯一识别号,否则另一个集群不识别