当您的集群中只有一个节点上的JournalNode服务出现异常时,可以尝试从其他节点恢复。本文介绍如何从其他节点恢复异常的JournalNode服务。
操作步骤
- 找到健康状态的JournalNode。
- 登录到健康的JournalNode所在节点(优先选择header或master节点),打包需要恢复的文件。
- 切换到hdfs用户。
- 进入文件所在目录。
cd /mnt/disk1/hdfs/journal/emr-cluster/
- 打包文件。
tar --exclude='edits*' -zcvf /tmp/jn-current.tar.gz current
预期结果如下:
current/
current/last-writer-epoch
current/VERSION
current/last-promised-epoch
current/paxos/
current/committed-txid
- 同步打包后的文件(jn-current.tar.gz)到异常JournalNode服务所在节点。
- 切换到emr-user用户。
su emr-user
如果5.7.0或3.41.0之前版本的EMR提示emr-user不存在,可切换至hadoop用户。
su hadoop
- 同步打包后的文件。
scp /tmp/jn-current.tar.gz $unhealthy-journal-node:/tmp/
$unhealthy-journal-node需要替换为异常JournalNode节点的hostname。
- 在EMR控制台停止HDFS异常节点上的JournalNode服务,并登录到异常JournalNode所在的节点,尝试恢复JournalNode。
- 切换到hdfs用户。
- 备份旧的current目录。
cd /mnt/disk1/hdfs/journal/emr-cluster/
mv current current.bak
- 恢复JournalNode。
tar -xvf /tmp/jn-current.tar.gz
- 在EMR控制台启动HDFS异常节点上的JournalNode服务,并在异常节点中查看JournalNode日志。
- 观察HDFS Web UI,如果JournalNode可正常写入,则恢复成功,此时可清理掉已备份的current目录文件(current.bak)。