hdfs的概念:node
HDFS,它是一个文件系统,用于存储文件,经过目录树定位文件,其次,他是分布式的,由不少服务器联合起来 实现功能,集群中的服务器各有各自的角色web
HDFS设计适合一次写入,屡次读出的场景,且不支持文件的修改,适合用来作数据分析,并不适合作网盘等应用缓存
HDFS的组成:安全
HDFS集群包括,NameNode和DataNode以及Secondary NameNodebash
NameNode负责管理整个文件系统的元数据,以及每个路径(文件) 所对应的数据块信息服务器
DataNode负责管理用户的文件数据块,每个数据块能够在多个NameNode上存储多副本分布式
SecondNameNode 用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照oop
HDFS的快比磁盘块大的缘由:设计
目的是为了最小寻址开销 寻址时间为传输时间的1%时,则为最佳状态。3d
hdfs-默认Block块大小是128M hadoop2.0如下默认块是64M,经过hdfs的web端 能够看到数据块的BlockId 和 当前数据分为多少个Block 例如2G的数据, 会分红16个Block块. 并且若是最后一个块分配不满的话,会动态伸缩 不会固定占用128M
会的hdfs-client会报错,可是数据会继续上传, 经过web端查看 还会显示3副本,可用副本为2,当DataNode启动后,副本会进行重建, 若是datanode出现问题 client会从新获取datanode节点 进行同步
查看DataNode的日志
sbin/hadoop-daemon.sh start namenode 单独启动NameNode守护进程 sbin/hadoop-daemon.sh stop namenode 单独中止NameNode守护进程 sbin/hadoop-daemon.sh start datanode 单独启动DataNode守护进程 sbin/hadoop-daemon.sh stop datanode 单独中止DataNode守护进程
一、查看是否开启机架感知
hdfs dfsadmin -printTopology
hadoop2.7.2副本节点选择
第一个副本在client所处的节点上,若是客户端在集群外,随机选择一个
第二个副本和第一个副本在相同机架,随机节点
第三个副本位于不一样机架,随机节点
经过web配置 或者 生成规定格式的Topology文件 在启动hdfs
hdfs fsck /data -files -blocks
hdfs dfsadmin -rollEdits
1.第一次启动namenode格式化后,建立fsimage和edits文件,若是不是第一次启动,直接加载编辑日志和镜像文件到内存中
2.客户端对元数据进行增删改的请求
3.NameNode记录操做日志,更新滚动日志 --编辑日志,fsimage只在启动读取(索引)
4.nameNode在内存对数据进行增删改查
2.第二阶段 SecondNameNode工做
1.SecondNameNode询问namenode是否须要checkpoint。直接返回namenode是否检查结果
2.Second NameNode请求执行checkpoint
3.nameNode滚动正在写的edits日志
4.将滚动前的编辑日志和镜像文件拷贝到Second NameNode
5.SecondNameNode加载编辑日志和镜像文件 进行合并
6.生成新的镜像文件fsimage.chkpoint
7.拷贝fsimage.chkpoint到namenode
8.namenode将新的fsimage.chkpoint重命名为fsimage
3.web查看Second NameNode http://xxxxx:50090
4.chkpoint检查时间参数设置
一般状况下每隔一个小时执行一次,或者一分钟检查一次操做次数,当操做次数达到1百万时候 执行一次
/tmp/dfs/name/current这目录下有个VERSION
ClusterID 集群的惟一ID 全局惟一
PS:
我今天不当心格式化了两次hdfs 为啥出现datanode就起不来?
解决方案1:
将全部节点的VERSION文件的clusterID改成一致
解决方案2:
将全部节点的临时目录所有删除(data/tmp),从新格式化namenode便可
单独启动全部节点的datanode
hadoop-daemons.sh start datanode
注意:
在格式化hdfs的时候务必要关闭hdfs进程
1.NameNode启动时,首先将镜像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操做,一旦在内存成功创建文件系统元数据镜像,则建立一个新的fsimage文件和一个空的编辑日志,此时,nameNode开始监听datanode请求,可是此刻,namenode运行的安全模式,即namenode的文件系统对于客户端是只读的.
系统中的数据块的位置并非由namenode维护的,而是以块列表的形式存储在datanode中,在系统正常操做期间,namenode会在内存中保留全部的块的映射信息,在安全模式下,各个datanode会向namenode发送最新块列表信息,namenode了解到足够多的块位置以后,既可高效运行文件系统
若是知足"最小副本条件",namenode会在30秒以后退出安全模式,最小条件:整个文件系统99.9%的块知足最小副本级别(默认值:dfs.replication.min=1),在启动一个刚格式化 没有任何块的集群,不会进入安全模式
[search@bsq10 current]$ hdfs dfsadmin -safemode get 查看安全模式
Safe mode is OFF
hdfs dfsadmin -safemode enter 进入安全模式
hdfs dfsadmin -safemode leave 退出安全模式
hdfs dfsadmin -safemode wait 等待安全模式
2nn如何恢复namenode的数据:
一、将2nn的数据放置到namenode的工做目录
二、经过hdfs namenode -recover恢复数据
三、重启hdfs
namenode和Datanode的真实数据(工做目录)
===========================================================
namenode存储HDFS的fsimage(镜像文件) + edits(编辑日志)
(1) Fsimage 文件:HDFS 文件系统元数据的一个永久性的检查点,其中包含 HDFS文件系统的全部目录和文件 idnode 的序列化信息。 //存放全部文件(夹)的索引 (2) Edits 文件:存放 HDFS 文件系统的全部更新的操做,文件系统客户端执行的全部写操做首先会被记录到 edits 文件中。 //存放操做