hdfs haadmin -transitionToActive -forcemanual nn1 操作说明:当active节点正常时,使用hdfs haadmin -transitionToActive命令对两个namenode节点切换都不起作用.
hdfs haadmin -transitionToStandby -forcemanual nn1 操作说明:当active节点正常时,执行可以将active的namenode节点转换成standby状态。
hdfs haadmin -failover --forcefence --forceactive nn1 nn2 操作说明:该命令在配置故障自动切换(dfs.ha.automatic-failover.enabled=true)之后,无法手动进行。可将该参数更改为false(不需要重启进程)后,重新执行该命令即可。hdfs haadmin -failover --forcefence --forceactive nn1 nn2
如果是存放namenode元数据的硬盘损坏:
联系sa更换新的磁盘,从另一台namenode机器上将${hadoop.tmp.dir}/dfs/name文件压缩成tar包,scp到新磁盘上并解压,该文件夹内存放的是集群操作日志EditLog和集群block元数据Fsimage,然后启动namenode进程完成故障恢复。
namenode启动后的数据同步: 新的namenode进程启动后,会通过zk进行active、standby状态选举,正常的那台namenode节点事务id最新所以会被继续选为active。另一台新加入namenode为standby状态,并从JournalNode中同步最新的fsimage和editlog数据到自己的内存和磁盘文件中,最终使active nameonde和standby namenode元数据保持一致。
普通故障故障或cpu等其他硬件故障问题导致namenode进程故障:
联系sa更换损坏硬件,然后重启namenode节点上的进程namenode、zkfc、nodemanager、datanode。
如果是服务器严重故障,需更换机器:
新机器尽量保留原域名,进行namenode迁移。(namenode迁移请参见下方场景2 )
根据新机器的硬件配置及原始配置,参考集群其他机器环境配置,设置新机器的最大进程数、打开文件句柄数等。(hadoop集群普通节点配置: 96G内存、12*6T硬盘、24核CPU)
[[email protected] ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 。
file size (blocks, -f) unlimited
pending signals (-i) 385261
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 655350
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
tar -zcf hadoop-2.6.4.tar.gz ./hadoop-2.6.4
scp hadoop-2.6.4.tar.gz vm-dc002.ali.momo.com:/home/dc/datacenter/soft/hadoop/
tar -zxf hadoop-2.6.4.tar.gz -C ./
ln -s hadoop-2.6.4 default
tar -zcf ${hadoop.tmp.dir}/dfs/name.tar.gz ${hadoop.tmp.dir}/dfs/name
mkdir -p ${hadoop.tmp.dir}/dfs 在新机器上创建目录
scp ${hadoop.tmp.dir}/dfs/name.tar.gz 新机器:${hadoop.tmp.dir}/dfs
tar -zxf ${hadoop.tmp.dir}/dfs/name.tar.gz -C ${hadoop.tmp.dir}/dfs/
本次(2019-05-29日)采取措施:
总结: 这样既能及时发现磁盘故障,也能将磁盘故障对hadoop集群的影响降至最低。
日后正常维护:
磁盘故障报警后联系sa更换磁盘,更换完记得调整磁盘权限,然后重启datanode进程。
模拟datanode进程down故障,观察hadoop集群的容错处理:
总结: datanode重启操作尽量在10分钟内完成,这样对hadoop集群的影响会最小,实际单台datanode节点从启动到在namenode上注册成功并开始提供服务这个过程一般都在一分钟内。
datanode启动流程简介:
此时标志着datanode启动成功。
Block信息汇报
datanode隔6小时会向namenode汇报一次节点block信息。线上集群未配置采用默认值。
官网配置 | 默认值 | 说明 |
---|---|---|
dfs.datanode.directoryscan.interval | 21600 | Interval in seconds for Datanode to scan data directories and reconcile the difference between blocks in memory and on the disk. |
dfs.blockreport.intervalMsec | 21600000 | Determines block reporting interval in milliseconds. |
参数备注:
directoryscan.interval 是扫描节点上的block信息,更新到内存中。6小时扫描一次
blockreport.intervalMsec 将内存中的block元数据上报namenode,这时候如果上报的block元数据跟namenode存储的该节点元数据不符,则namenode会下发容错指令(删除,新建block等)给datanode执行。
注:这两个线程都是各自以6小时为周期,两个线程间没有固定时间间隔,各自工作。
DataNode健康状态检测:
hadoop datanode 节点超时时间设置:https://www.jianshu.com/p/1680bab38f06
测试机测试:datanode停掉10分钟30秒后,集群把datanode状态切换为dead。
超时时长的计算公式为:timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval。
注:这部分请参考spark on yarn故障运维https://blog.csdn.net/qq_35488412/article/details/91041983
场景4部分:具体细节请参见:spark on yarn故障运维:https://blog.csdn.net/qq_35488412/article/details/91041983
相关资料参考:
NameNode内存模型:https://blog.csdn.net/baiye_xing/article/details/76273495
源码之HDFS之DataNode:启动过程:https://www.jianshu.com/p/1b7fea129368
:http://liqifei.com/