标签:hadoop hdfs hadoop系统运维
Hadoop下,HDFS运维算是一个非常重要的过程。对于生产而言,海量数据被存储到了HDFS中,如果HDFS挂了,那么导致生产环境无法工作是小,遗失数据而造成的后果将更加巨大。下面总结下CDH体系下HDFS基础运维知识。
首先得从HDFS下的NameNode开始,简介下NameNode的工作机制
当我们把NameNode格式化后会产生如下目录结构
${dfs.name.dir}/current/VERSION
/edits
/fsimage
/fstime
/VERSION是一个Java属性文件,存放版本信息,
/edits、/fsimage、/fstime都是二进制文件,其中/edits、/fsimage可以说HDFS运维的关键所在。
/edits是一个编辑日志文件,记录用户的所有创建、移动、删除等操作,namenode是在内存中维护HDFS文件系统的元数据,但是当编辑日志发生改变的时候,这些改变后,要同步把内存中的元数据进行更新。内存中的元数据不支持直接修改,支持直接读取。使用hdfs oev -i edits_0000000000000032908-0000000000000033470 -o /tmp/edits_0000000000000032908-0000000000000033470.xml可以把二进制文件编译出来查看具体内容(在发现启动HDFS时如果NameNode存在异常操作错误时,查看相应的/edits文件,往往能够定位到问题)。HDFS存储是一个先写日志即edits文件,再将操作更新到内存中,默认一个小时输出一个/fsimage,fsimage是一个checkpoint,可以理解为快照。
/fsimage是HDFS文件系统元数据的一个永久性检查点文件。如果namenode发生故障可以通过载fsimage进内存来重构最近的元数据,但是不一定能完整还原文件系统元数据。使用hdfs dfsadmin -saveNamespace命令来创建检查点。
在上诉情况下/edits会大量生成日志信息,而/fsimage是某次元数据的快照。在大规模集群下/edits日志信息会变成一个大文件,这个文件会无线增长。虽然这对运行时的namenode没有影响,但是在namenode重启的时候,会导致namenode启动变慢。基于这种情况出现了secondarynamenode这种模式。
secondarynamenode的作用如下:
1:secondarynamenode请求namenode停止读取/edits文件,namenode上的操作记录将会被记录到新的/edits文件中
2:secondarynamenode通过http协议从namenode下载fsimage与edits文件
3:secondarynamenode将fsimage载入内存中,执行edits文件中的操作,生成新的fsimage文件
4:secondarynamenode将生成的新fsimage文件同步给namenode
5:namenode节点用接收到的fsimage文件替换旧的fsimage文件,并将1产生的心edits文件替换旧的edits文件,同时根据edits跟新fsimage文件
通常情况下,secondarynamenode每隔1小时创建新的检测点(配置fs.checkpoint.period进行修改同步时间,单位秒),此外当编辑日志的大小达到64M时也会进行创建检测点(配置fs.checkpoint.size进行修改同步触发条件,单位字节)
在上述这种架构上,如果NameNode挂掉了怎么办。
1:进入安全模式,hadoop dfsadmin -safemode enter
2:备份SecondaryNameNode current下所有文件
3:拷贝SecondaryNameNode current下所有文件到新的Master节点
4:重新启动的Master节点
上述方式中,NameNode如果出现故障,恢复后还是会导致部分元数据丢失。
使用HA双Master模式来跑集群,集群Active的Master1挂了,可以自动或手动故障转移到另一台Master2使其成为新的Active的Master2。通过sudo -u hdfs hadoop namenode -bootstrapStandby从新的Active的Master2还原挂掉的挂掉Master1。使用HA模式管理集群更加友好,简单。其次遵从一个原则是十分重要的,在进行进群管理、运维上的操作,使用安全模式可以免费集群操作时数据写入,在管理集群时避免冲突可以省下不少麻烦。
其次介绍DataNode上的数据维护
DataNode上健壮性维护主要在数据负载均衡、磁盘检测。
1:在CDH下开启负载器服务,则每隔半个小时会进行数据负载。在原生Hadoop下需要手动启动负载检测。
2:使用fsck进行磁盘状态检测,一般指令为hadoop fsck / -files -blocks -locations。删除坏损数据hadoop fsck /path -move
本文出自 “Gointosunset” 博客,请务必保留此出处http://gointosunset.blog.51cto.com/5354475/1577621
标签:hadoop hdfs hadoop系统运维
原文地址:http://gointosunset.blog.51cto.com/5354475/1577621