磁盘坏道引起的hbase查询错误
1、現(xiàn)象說(shuō)明
早上,客戶反映某些日期的歷史數(shù)據(jù)查詢不出來(lái)(我們系統(tǒng)將歷史的匯總數(shù)據(jù)是保存到Hbase中),從查詢端的日志看查詢失敗(查詢端是erlang寫的分布式查詢引擎)。erlang是通過(guò)HBase提供的thrift 服務(wù)接口來(lái)查詢hbase的,所以進(jìn)一步去查看thrift server的日志信息,發(fā)現(xiàn)如下的錯(cuò)誤:
備注:并不是所有的查詢都失敗,只有某些站點(diǎn)的某些日期的數(shù)據(jù)查詢失敗。
2、問(wèn)題的排查和定位
從日志Caused by: java.io.IOException: Failed to read compressed block at 212328226 和 Caused by: java.io.IOException: Invalid HFile block magic: 可以初步判斷應(yīng)該是底層保存的文件出現(xiàn)了問(wèn)題。
(1)首先登錄到NameNode web界面,查看是否有corrupted的block的問(wèn)題,發(fā)現(xiàn)一切正常
(2)然后登錄到Hbase的web界面,查看對(duì)應(yīng)的表sum_profile_non_filter_olap_d是否正常,發(fā)現(xiàn)一切正常
(3)然后運(yùn)行一下hbase hbck查看是否有不一致的問(wèn)題,發(fā)現(xiàn)也一切正常
(4)進(jìn)一步使用hdfs fsck來(lái)檢查上面出錯(cuò)的信息所對(duì)應(yīng)的文件,發(fā)現(xiàn)一切正常
(5)根據(jù)(4)的輸出來(lái)定位報(bào)錯(cuò)的文件的所有block所在的機(jī)器,登錄到這些機(jī)器上,然后分別查看hbase region server和datanode 的日志,但是并未發(fā)現(xiàn)到任何的異常輸出
(6)根據(jù)1-5,排除了HDFS和Hbase服務(wù)的異常情況,唯一剩下的就是服務(wù)器的硬件問(wèn)題了。根據(jù)上面的報(bào)錯(cuò)信息,懷疑是磁盤出現(xiàn)了問(wèn)題,但是磁盤出問(wèn)題會(huì)報(bào)警啊?
使用下面的命令來(lái)查看磁盤的健康情況:
smartctl -H /dev/sdc
[root@dn-5-45 ~]# smartctl -H /dev/sdj
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-2.6.32-504.16.2.el6.x86_64] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
SMART Health Status: FAILURE PREDICTION THRESHOLD EXCEEDED: ascq=0x5 [asc=5d, ascq=5]
終于找到原因了,原來(lái)是磁盤有了壞道。。。。(線上的集群已經(jīng)運(yùn)行快三年了,出現(xiàn)磁盤壞道的問(wèn)題也算正常)
3、問(wèn)題的解決
對(duì)于低版本的hadoop,只能將對(duì)應(yīng)的磁盤從dfs.datanode.data.dir目錄上去除掉,然后重啟DataNode來(lái)生效。
最新版本的hadoop引入了-reconfig來(lái)動(dòng)態(tài)的更新結(jié)點(diǎn)的配置信息。
(1)將出錯(cuò)的磁盤對(duì)應(yīng)的目錄從dfs.datanode.data.dir配置項(xiàng)上去除掉
(2)使用下面的命令來(lái)讓DataNode重新加載配置文件(注意端口號(hào)為:50020)
sudo -u hdfs hdfs dfsadmin -reconfig datanode dn-5-45.ptfuture.com:50020 start
(3)使用下面的命令來(lái)確定reconfig是否執(zhí)行完成
sudo -u hdfs hdfs dfsadmin -reconfig datanode dn-5-45.ptfuture.com:50020 status
4、執(zhí)行完上面操作之后,客戶端查詢一切恢復(fù)正常
備注:為什么磁盤出問(wèn)題了,沒(méi)有報(bào)警呢?登錄到監(jiān)控系統(tǒng),發(fā)現(xiàn)磁盤的監(jiān)控是有warn提醒的,只是當(dāng)前的監(jiān)控級(jí)別針對(duì)該warn并未發(fā)出報(bào)警信息,通知運(yùn)維同學(xué)補(bǔ)充上對(duì)應(yīng)的監(jiān)控信息。
總結(jié)
以上是生活随笔為你收集整理的磁盘坏道引起的hbase查询错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OC变量数据类型
- 下一篇: Codeforces Round #38