大数据Hadoopx之HDFS模块中那些你可能不知道的小知识!

再给大家分享一些小知识,一起来瞧瞧吧!

一、namenode & secondarynamenode 
 
1)namenode启动(namenode格式化时会创建fsimage,edits两个文件,如果不是第一次启动,会直接加载这两个文件到内存)。  
2)secondarynamenode向namenode发出请求执行checkpoint(默认是一个小时请求执行一次,或者操作达到一百万次请求执行一次)  
3) namenode滚动正在写的edits日志,将滚动前的fsimage和edits拷贝给secondarynamenode,secondarynamenode将其读取到内存,并合并生成新的fsimage.chkpoint拷贝到namenode,namenode将fsimage.chkpoint重命名为fsimage。

  二、fsimage & edits(在namenode格式化之后${namenode.dir}/dfs/name/current下)
    
  1)fsimage:是用来保存hdfs文件系统元数据信息的永久性检查点,包括hdfs所有目录和文件idnode的序列化信息。  
  2)edits:存放hdfs所有更新操作的路径,client写操作会首先记录到edits中。  
  3)seen_txid: 保存的是最后一个edits文件名_后的数字。  
  4)namenode每次启动都会将fsimage读取到内存,并从000001到seen_txid记录的数字依次执行每个edits中的更新操作,保证内存中的数据是最新,同步的。  
  5)  查看fsimage && edits    
       i)查看fsimage : hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径。    
       ii) 查看edits: hdfs oev -p 文件类型 -i 镜像文件 -o 转换后文件输出路径。

三、 namenode故障处理方法 
 
1)将secondarynamenode中的数据拷贝到namenode存储数据的目录。

    i)   kill -9 namenode进程。    
    ii)删除${namenode.dir}/dfs/name下的所有文件。    
    iii)将{secondary.dir}/dfs/namesecondary/下的所有数据 拷贝到 ./name下。重启namenode。 
  

2)利用 -importCheckpoint选项启动namenode守护进程,从而将secondarynamenode中的数据拷贝到namenode上

i)kill -9 namenode进程,并删除namenode上的数据文件。    
ii)将secondary上的namesecondary文件夹拷贝到namenode节点的name文件夹同级目录下,并删除 in_use.lock文件。    
iii)导入检查点数据(等待一会,ctrl+c结束进程)bin/hdfs namenode -importCheckpoint,并启动namenode。

四、 namenode && datanode多目录配置(好处:增加可靠性)
i) 删除data/和logs/下的所有文件。
ii) 重启集群并格式化 namenode

五、 datanode工作机制
1)一个block在datanode上以文件形式存储,包括两个文件,一个是数据本身,一个是包括数据块长度,快数据的校验和,以及时间戳。  
2)datanode启动后向 namenode注册,周期性(1小时)的向namenode 上报所有的块信息。  
3)心跳每3秒一次,返回namenode给该datanode的命令。如果超过10分钟没有收到某个datanode的心跳,认为节点不可用。  
4)集群运行中可以安全 增加和删除节点。

六、数据完整性 
当datanode周期性读取block时,会计算checksum,如果计算的checksum和当初创建时值不一样,说明block已经损坏,client会读取其他节点的bolck。

七、掉线时限 参数设置  
datanode进程死亡或者节点故障导致无法与namenode进行通讯时,要经过一段时间才被namenode判定为死亡,这段时间叫 超时时长。
hdfs的默认超时时长时10分钟30秒。计算公式为 : timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval。

八、 动态增加节点    
1)进行ssh免密设置    
2)在$HADOOP_HOME/etc/haoop/下新建 dfs.hosts文件,并将集群各主机名添加进去。    
3)修改hdfs-site.xml      
4) 更新resourcemanage节点,yarn rmadmin -refreshNodes    
5)在namanode所在节点修改slaves文件,增加新增节点的主机名,    
6)在新增主机上单独启动,sbin/hadoop-daemon.sh start datanode,sbin/yarn-daemon.sh start nodemanager,web端检查是否成功。    
7)如果数据不均衡,可以用 ./start-balancer.sh 命令实现集群的再平衡。

九、动态删除节点    
1)在namenode所在节点的 ${HADOOP_HOEM}/etc/hadoop/新建 dfs.hosts.exclude 文件,并添加准备删除节点的主机名称。    
2) 修改hdfs-site.xml文件,增加如下属性,
并刷新namenode:hdfs dfsadmin -refreshNodes,
刷新resourcemanage:yarn rmadmin -refreshNodes      
3)web端检查节点,退役节点的状态为 decommission in progress(退役中),说明数据节点正在复制块到其他节点,等待退役节点状态为 decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是 3,服役的节点小于等于 3,是不能退役成功的,需要修改副本数后才能退役。    
4)从 namenode 的 dfs.hosts 文件中删除退役节点 主机名,并刷新namenode,刷新resourcemanage。    
5)从namenode所在节点删除slave文件中的已删除节点的主机名,如果数据不均衡,执行 sbin/start-balancer.sh,使集群重新平衡。

扫描二维码关注公众号,回复: 4323100 查看本文章

十、HDFS HA高可用机制    
1)实现HDFS的高可用关键性策略是通过双namenode消除单点故障。    
2)每个namenode各保存一份元数据信息,edits文件保存在共享存储中管理(qjournal 和NFS两个主流实现),只有active namenode节点可以写入edits文件。    
3)每个namenode由zkFailover监管以及状态切换。    
4)两个namenode节点必须做ssh免密登录,且同时只能有一个namenode对外提供服务。    
5)HA中zookeeper的作用:      
i)故障检测:集群中的每个namenode在zookeeper中维持了一个持久会话,如果机器崩溃,会话将终止,zookeeper通知另一个namenode触发故障转移。      
ii)选择现役namenode。    
6)HA中ZKFC的作用:ZKFC是zookeeper的客户端,也监视和管理namenode的状态,每个namenode节点也运行一个zkfc进程,负责:      
i)健康检测:zkfc使用一个健康检查命令ping与自己在同一主机的namenode,根据namenode回复的状态确定namenode是否是健康的。      
ii)zookeeper会话管理:当本机namenode是健康的,zkfc保持一个在zookeeper中打开的会话,如果namenode是active,zkfc也保持一个特殊的znode锁,该锁使用了zookeeper对短暂节点的支持,如果会话结束,锁节点将自动删除。      
iii)基于zookeeper的选择:如果本机的namenode是健康的,且zkfc没有发现其他节点当前持有znode锁,它将为自己获取该锁。若成功,它就赢得了选择,并负责运行故障转移进程为自己主机的namenode标记为active。    
7)HA-HDFS故障转移机制      
i)zkfc发现本机的namenode发生假死,会向另一台namenode上的zkfc进程发出信号,另一台namenode的akfc会ssh kill -9 发生假死的namenode进程(如果没有杀死,可以调用用户自定义的脚本程序)。      
ii)zkfc会激活本机的namenode,并标记为active,读取qjournal中的edits文件,管理集群。
好了,本篇的内容到此已经分享完毕了,下篇将会给大家分享一下如何用 Java代码操作HDFS上的数据,如果你觉得对你有所帮助,还请动动你的手指,分享一下,谢谢!!!

猜你喜欢

转载自blog.csdn.net/Forever_ck/article/details/84425416