磁盘坏道引起的hbase查询错误
1、現象說明
早上,客戶反映某些日期的歷史數據查詢不出來(我們系統將歷史的匯總數據是保存到Hbase中),從查詢端的日志看查詢失敗(查詢端是erlang寫的分布式查詢引擎)。erlang是通過HBase提供的thrift 服務接口來查詢hbase的,所以進一步去查看thrift server的日志信息,發現如下的錯誤:
備注:并不是所有的查詢都失敗,只有某些站點的某些日期的數據查詢失敗。
2、問題的排查和定位
從日志Caused by: java.io.IOException: Failed to read compressed block at 212328226 和 Caused by: java.io.IOException: Invalid HFile block magic: 可以初步判斷應該是底層保存的文件出現了問題。
(1)首先登錄到NameNode web界面,查看是否有corrupted的block的問題,發現一切正常
(2)然后登錄到Hbase的web界面,查看對應的表sum_profile_non_filter_olap_d是否正常,發現一切正常
(3)然后運行一下hbase hbck查看是否有不一致的問題,發現也一切正常
(4)進一步使用hdfs fsck來檢查上面出錯的信息所對應的文件,發現一切正常
(5)根據(4)的輸出來定位報錯的文件的所有block所在的機器,登錄到這些機器上,然后分別查看hbase region server和datanode 的日志,但是并未發現到任何的異常輸出
(6)根據1-5,排除了HDFS和Hbase服務的異常情況,唯一剩下的就是服務器的硬件問題了。根據上面的報錯信息,懷疑是磁盤出現了問題,但是磁盤出問題會報警啊?
使用下面的命令來查看磁盤的健康情況:
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]
終于找到原因了,原來是磁盤有了壞道。。。。(線上的集群已經運行快三年了,出現磁盤壞道的問題也算正常)
3、問題的解決
對于低版本的hadoop,只能將對應的磁盤從dfs.datanode.data.dir目錄上去除掉,然后重啟DataNode來生效。
最新版本的hadoop引入了-reconfig來動態的更新結點的配置信息。
(1)將出錯的磁盤對應的目錄從dfs.datanode.data.dir配置項上去除掉
(2)使用下面的命令來讓DataNode重新加載配置文件(注意端口號為:50020)
sudo -u hdfs hdfs dfsadmin -reconfig datanode dn-5-45.ptfuture.com:50020 start
(3)使用下面的命令來確定reconfig是否執行完成
sudo -u hdfs hdfs dfsadmin -reconfig datanode dn-5-45.ptfuture.com:50020 status
4、執行完上面操作之后,客戶端查詢一切恢復正常
備注:為什么磁盤出問題了,沒有報警呢?登錄到監控系統,發現磁盤的監控是有warn提醒的,只是當前的監控級別針對該warn并未發出報警信息,通知運維同學補充上對應的監控信息。
總結
以上是生活随笔為你收集整理的磁盘坏道引起的hbase查询错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OC变量数据类型
- 下一篇: msxml4.0 sp4_MSXML4和