kudu 服务器断电无法启动
-
kudu 服务器正在大量数据写入时, 服务器异常断或非法关闭会造成 Tablet Server 的
metadata文件数据不完整,再次启动tablet server会报如下错误:
Check failed: _s.ok() Bad status: Corruption: Failed to load FS layout: Could not process records in container
/da1/bigdata/kudu/tablet/data/datab77918da73e342b4940f64c557ea0f61:
Data length checksum does not match: Incorrect checksum in file
/da1/bigdata/kudu/tablet/data/data/b77918da73e342b4940f64c557ea0f61.metadata
at offset 634685: Checksum does not match. Expected: 0. Actual:
1214729159
解决办法:
1、删除/da1/bigdata/kudu/tablet/data/data/b77918da73e342b4940f64c557ea0f61.metadata
文件最后一行。
命令 sed -i ‘$d’ /da1/bigdata/kudu/tablet/data/data/b77918da73e342b4940f64c557ea0f61.metadata -
一般异常关闭会导致一批metadata文件损环,删除报错文件最后一行,再次启动很可能报下一个文件损坏。
可用批量删除同一时间点的metadata文件最后一行。
(1)先找到对应时间点:
cd /da1/bigdata/kudu/tablet/data/data/
ls -l --full-time | grep “b77918da73e342b4940f64c557ea0f61.metadata” | grep .metadata
找到时间点:
-rw------- 1 kudu kudu 568864 2018-10-13 17:04:07.857377164 +0800 b77918da73e342b4940f64c557ea0f61.metadata(2)查看对应时间点的所有metadata文件 ls -l --full-time | grep "2018-10-13 17:04:07.8" | grep ".metadata“ (3)用VIM随机打开几个文件是否都有异常(基本上最后一行都有异常字符)。
(4)批量删除这些文件最后一行
执行:
for i in ls -l --full-time | grep "2018-10-13 17:04:07.85" | grep ".metadata" | awk {'print $9'}
; do sed -i ‘$d’ $i; done