【若泽大数据实战第十天】HDFS详解一之HDFS架构设计
HDFS架构设计
架构图:
进程有三个:
namenode nn 名称节点
secondary namenode snn 第二名称节点
datanode dn 数据节点
hdfs架构是主从架构
Rack : 机架 一个机架可以放多个主机 正常可以放10个 有些GPU主机放 5个主机 GPU主机特别耗电
比如上图中机架1号Rack1放3个主机,机架2号Rack2放2个主机。
这里是物理机架,后面还有虚拟机架。
(面试可能会问到)
nn(老大): 文件系统的命名空间 ,它就是维护这个文件系统的,维护元数据信息
a.文件名称
b.文件目录结构
c.文件属性 创建时间 权限 副本数
d.文件对应哪些数据块
-->数据块对应哪些datanode节点上(比如A块有三个副本,这三个副本分别放在哪些datanode上)
blockmap块的映射:一个文件分为哪些块,有哪些副本数,这些块分别放在哪些datanode节点上
nn节点不会持久化存储这种映射关系,它是动态变化的
dn定期发送blockreport(块报告) 给nn,(比如告诉它这个节点有哪些块,块的情况怎样等等)
以此nn在【内存】中动态维护这种映射关系!
假设生产上机器内存是 8G,如果小文件特别特别多。结果会撑爆。原因:
维护这些小文件要在hdfs上nn里去维护,比如说文件名称,目录,映射关系等等,假如说维护1个小文件,需要250个字节
那如果是1亿个小文件呢?那就是 1亿*250个字节 估计需要20多G的内存。那么就会把nn节点撑爆了。
那么加入生产上确实有很多小文件怎么办?那就合并
比如说:100小文件合并一个大文件 : nn节点需要300字节 那么1亿个小文件,就是1亿/100 * 300字节 估计才200多M的内存
生产经验建议: 合并为一个文件后,尽量在块大小 ,小于等于128M,比如120M
生产上,hdfs合并小文件有哪些方法?(面试可能问到)
待补充。。。。。
namenode作用:
管理文件系统的命名空间,
维护文件系统树,以两种文件永久保存在磁盘上
①命名空间镜像文件 fsimage
②编辑日志editlog
[[email protected] current]# pwd
/tmp/hadoop-hadoop/dfs/name/current
[[email protected] current]# ll
total 1040
-rw-r--r--. 1 root root 1048576 Feb 17 20:23 edits_inprogress_0000000000000000001
-rw-r--r--. 1 root root 321 Feb 17 19:23 fsimage_0000000000000000000
-rw-r--r--. 1 root root 62 Feb 17 19:23 fsimage_0000000000000000000.md5
-rw-r--r--. 1 root root 2 Feb 17 19:23 seen_txid
-rw-r--r--. 1 root root 219 Feb 17 19:23 VERSION
[[email protected] current]#
dn(小弟干活的):
(hdfs高容错 :比如三个副本 只要有一个没有问题就可以)
dn:
做存储的: ①存储数据块 ②还有数据块的 校验和 ,一般要么去读要么写 读写的时候根据校验和看数据块是不是损坏
与nn通信:
a.datanode每隔3秒向namenode发送一个心跳,告诉nn我还活着
b.每10次心跳发送一次当前节点的blockreport
dn作用: 读写文件的数据块
snn(万年老二):
存储: fsiamge+editlog
作用: 定期合并fsimage+editlog文件为新的fsimage文件
推送给nn节点,简称为检查点 checkpoint(面试:checkpoint)
参数 :
dfs.namenode.checkpoint.period 3600s
snn定期对nn做备份,12点的时候snn对nn做了备份,12点半如果nn挂了,这个时候用snn对nn进行恢复,只能恢复到12点的那个状态。这个是1.0版本的。后面还有实时的备份 热备。
参照官网:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Introduction