secondaryNamenode配置与nameNode故障恢复

本文详细介绍了Hadoop集群中Namenode故障恢复流程及Checkpoint配置,包括Namenode故障后的应急恢复步骤、如何在secondary namenode中备份和导入检查点、以及如何调整checkpoint参数以提高数据完整性。通过调整fs.checkpoint.period和fs.checkpoint.size,用户可以更好地管理数据一致性,确保在Namenode故障时能够快速、有效地恢复集群。
部署运行你感兴趣的模型镜像
*注:本文基于0.20.2配置测试,0.21以后已改成Checkpoint Node和Backup Node
一、配置
1. 在masters文件中添加 Secondary节点的主机名。
*注:masters文件用于指定secondary的主机而不是namenode,slaves用于指定datanode和tasktracker,
namenode由core-site.xml fs.default.name指定,jobtracker由mapred-site.xml mapred.job.tracker指定

2. 修改hdfs-site.xml文件
<property>
    <name>dfs.http.address</name>
    <value>${your-namenode}:50070</value>
    <description>Secondary get fsimage and edits via dfs.http.address</description>
</property>
<property>
    <name>dfs.secondary.http.address</name>
    <value>${your-secondarynamenode}:50090</value>
    <description>NameNode get the newest fsimage via dfs.secondary.http.address</description>
</property>
*注:1、实际上dfs.http.address只在secondary设置,dfs.secondary.http.address只在namenode上设置即可,为了便于管理,集群所有机器同样配置
2、采用默认端口(namenode:50070,secondary:50090)时可以省略该配置

2. 修改core-site.xml文件
<property>
    <name>fs.checkpoint.period</name>
    <value>3600</value>
    <description>The number of seconds between two periodic checkpoints.</description>
</property>
<property>
    <name>fs.checkpoint.size</name>
    <value>67108864</value>
    <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired.  </description>
</property>
<property>
    <name>fs.checkpoint.dir</name>
    <value>${hadoop.tmp.dir}/dfs/namesecondary</value>
    <description>Determines where on the local filesystem the DFS secondary namenode should store the temporary images to merge.If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy.</description>
</property>
*注:该配置在secondary设置即可,为了便于管理,集群所有机器同样配置

3. 重启hdfs,检查是否正常启动
(*注:这一步也可以不重启hdfs,在secondary上直接 sh $HADOOP_HOME/bin/hadoop-daemon.sh start secondarynamenode 启动secondaryNamenode)
(1)重启
sh $HADOOP_HOME/bin/stop-dfs.sh
sh $HADOOP_HOME/bin/start-dfs.sh
(2)检查uri
http://namenode:50070/ #检查namenode
(3)检查目录
检查dfs.name.dir namenode:/data1/hadoop/name
current
image
previous.checkpoint
in_use.lock #主要看时候有这个文件,文件时间戳表示namenode启动时间
检查fs.checkpoint.dir secondary:${hadoop.tmp.dir}/dfs/namesecondary
current
image
in_use.lock#主要看时候有这个文件,文件时间戳表示secondnamenode启动时间
(4) 检查checkpoint是否正常
为便于测试,调整参数fs.checkpoint.period=60,fs.checkpoint.size=10240
对hdfs做一些文件增删操作,看${dfs.name.dir}/current/edits 和 ${fs.checkpoint.dir}/current/edits的变化

二、 namenode故障恢复(importCheckpoint)
*注意事项:
(1) 为了便于将随便一台datanode临时用作namenode,datanode和namenode配置需要一模一样包括conf目录下的所有文件、目录结构、环境变量
(2) 新namenode的主机名要与原namenode保持一致,主机名若是在hosts写死,需要批量替换datanode hosts文件 (用内部域名服务最好,改下域名指向即可)
(3)fs.checkpoint.dir的内容非常重要,无法保证secondnamenode不出故障,所以需要定期对secondnamenode fs.checkpoint.dir的内容做备份
(4) 最近一次check至故障发生这段时间的内容将丢失,fs.checkpoint.period参数值需要权衡,既不太频繁又尽可能保证数据完整,默认1小时
恢复步骤:
(0) 可选,当namenode主机名发生变化时(为了不影响应用,最好不好发生变化),需修改:
[core-site.xml] fs.default.name = 新namenode
[hdfs-site.xml]dfs.http.address = 新namenode
[mapred-site.xml]mapred.job.tracker = 新jobtracker, 如果jobtracker与namenode在同一台机器上
(1) 确保新namenode${dfs.name.dir}目录存在,且清空其内容
(2)把SecondaryNameNode节点中 ${fs.checkpoint.dir} 的所有内容拷贝到新的NameNode节点的 ${fs.checkpoint.dir} 目录中
(3) 在新机器上执行
hadoop namenode -importCheckpoint
该步会从${fs.checkpoint.dir}中恢复${dfs.name.dir},并请动namenode
(4) 检查文件block完整性
hadoop fsck /
(5) 停止namenode,使用crrl+C或者会话结束
(6)删除新namenode ${fs.checkpoint.dir}目录下的文件(保持干净)
(7) 正式启动namenode,恢复工作完成
sh $HADOOP_HOME/bin/hadoop_daemon.sh start namenode

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### NameNode故障恢复概述 在Hadoop集群中,NameNode是HDFS(Hadoop Distributed File System)的核心组件之一,负责管理文件系统的命名空间和客户端对文件的访问。由于其重要性,NameNode一旦发生故障,可能导致整个集群无法正常工作。因此,了解如何快速有效地进行NameNode故障恢复至关重要。 ### 常见的NameNode故障类型 1. **硬件故障**:如磁盘损坏、内存不足等。 2. **软件故障**:如JVM崩溃、配置错误等。 3. **网络故障**:如节点间通信中断。 4. **人为错误**:如误删元数据或执行了不当的操作。 ### NameNode故障恢复步骤 #### 1. 检查并确认故障原因 首先需要确定NameNode是否真的发生了故障。可以通过查看日志文件(通常位于`logs/`目录下)来排查问题。常见的日志包括`hadoop-hdfs-namenode-<hostname>.log`等。如果发现NameNode进程已经停止,或者HDFS处于安全模式且无法退出,则可能是NameNode出现了问题[^5]。 #### 2. 进入安全模式(如有必要) 如果NameNode仍然运行但HDFS进入了安全模式,可以尝试手动进入安全模式以防止进一步的数据写入。使用以下命令检查当前的安全模式状态: ```bash hdfs dfsadmin -safemode get ``` 如果返回“Safe mode is ON”,则说明HDFS正处于安全模式。此时可以继续执行后续操作。 #### 3. 停止NameNode服务 如果NameNode仍在运行,但出现了异常行为,建议先停止NameNode服务。执行以下命令停止NameNode: ```bash sbin/hadoop-daemon.sh stop namenode ``` 此命令会优雅地关闭NameNode进程。如果NameNode无法正常停止,可以使用`kill -9`强制终止进程,但这可能会导致数据不一致,因此应谨慎使用[^2]。 #### 4. 清理旧的NameNode数据(可选) 如果NameNode的数据目录已损坏或存在一致性问题,可能需要清理旧的数据。删除NameNode存储的数据目录中的内容,例如: ```bash rm -rf /export/data/hadoop-3.3.0/dfs/name/* ``` 请注意,删除数据后将无法恢复,除非有备份。因此,在执行此操作前应确保已做好充分准备。 #### 5. 格式化新的NameNode(仅首次启动或重建时) 如果是在首次启动集群或重建NameNode的情况下,需要对NameNode进行格式化。执行以下命令: ```bash hadoop namenode -format ``` 此操作将创建新的文件系统元数据。但是,在集群已经运行后,不要轻易执行此操作,因为这可能会导致数据丢失[^3]。 #### 6. 启动新的NameNode 启动NameNode服务,确保其能够正常加载最新的FSImage和EditLog文件: ```bash sbin/hadoop-daemon.sh start namenode ``` 启动后,观察日志文件,确保没有错误信息,并确认NameNode成功进入活跃状态。 #### 7. 退出安全模式(如有必要) 如果之前HDFS处于安全模式,现在可以尝试退出安全模式: ```bash hdfs dfsadmin -safemode leave ``` 如果无法退出,可能是因为某些DataNode尚未报告其块信息。此时可以等待一段时间再尝试退出,或者手动修复相关问题。 #### 8. 验证恢复效果 通过访问HDFS Web UI(默认端口为50070)或使用HDFS命令行工具验证文件系统的可用性。例如,列出根目录下的文件: ```bash hdfs dfs -ls / ``` 如果能正常看到文件列表,说明NameNode已经成功恢复。 #### 9. 数据同步完整性检查 为了确保所有数据块都已正确注册到NameNode中,可以执行一次完整的块报告检查。此外,还可以使用`fsck`工具检查文件系统的健康状况: ```bash hdfs fsck / -files -blocks ``` 该命令将显示每个文件的块分布情况,帮助识别潜在的问题。 #### 10. 定期备份NameNode元数据 为了避免未来再次遇到类似问题,建议定期备份NameNode的元数据。可以配置SecondaryNameNode或使用外部工具(如HDFS Snapshots)来实现自动化的元数据备份。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值