DroppedSnapshotException when flushing memstore after a datanode dies
---------------------------------------------------------------------
Key: HBASE-1876
URL: https://issues.apache.org/jira/browse/HBASE-1876
Project: Hadoop HBase
Issue Type: Bug
Components: regionserver
Affects Versions: 0.20.0
Reporter: Cosmin Lehene
Priority: Critical
Fix For: 0.20.1
A dead datanode in the cluster can lead to multiple HRegionServer failures and
corrupted data. The HRegionServer failures can be reproduced consistently on a
7 machines cluster with approx 2000 regions.
Steps to reproduce
The easiest and safest way is to reproduce it for the .META. table, however it
will work with any table.
Locate a datanode that stores the .META. files and kill -9 it.
In order to get multiple writes to the .META. table bring up or shut down a
region server this will eventually cause a flush on the memstore
2009-09-25 09:26:17,775 DEBUG org.apache.hadoop.hbase.regionserver.HRegion:
Flush requested on
.META.,demo__assets,asset_283132172,1252898166036,1253265069920
2009-09-25 09:26:17,775 DEBUG org.apache.hadoop.hbase.regionserver.HRegion:
Started memstore flush for region
.META.,demo__assets,asset_283132172,1252898166036,1253265069920. Current region
memstore si
ze 16.3k
2009-09-25 09:26:17,791 INFO org.apache.hadoop.hdfs.DFSClient: Exception in
createBlockOutputStream java.io.IOException: Bad connect ack with firstBadLink
10.72.79.108:50010
2009-09-25 09:26:17,791 INFO org.apache.hadoop.hdfs.DFSClient: Abandoning block
blk_-8767099282771605606_176852
The DFSClient will retry for 3 times, but there's a high chance it will try on
the same failed datanode (it takes around 10 minutes for dead datanode to be
removed from cluster)
2009-09-25 09:26:41,810 WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer
Exception: java.io.IOException: Unable to create new block.
at
org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2814)
at
org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2078)
at
org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2264)
2009-09-25 09:26:41,810 WARN org.apache.hadoop.hdfs.DFSClient: Error Recovery
for block blk_5317304716016587434_176852 bad datanode[2] nodes == null
2009-09-25 09:26:41,810 WARN org.apache.hadoop.hdfs.DFSClient: Could not get
block locations. Source file "/hbase/.META./225980069/info/5573114819456511457"
- Aborting...
2009-09-25 09:26:41,810 FATAL
org.apache.hadoop.hbase.regionserver.MemStoreFlusher: Replay of hlog required.
Forcing server shutdown
org.apache.hadoop.hbase.DroppedSnapshotException: region:
.META.,demo__assets,asset_283132172,1252898166036,1253265069920
at
org.apache.hadoop.hbase.regionserver.HRegion.internalFlushcache(HRegion.java:942)
at
org.apache.hadoop.hbase.regionserver.HRegion.flushcache(HRegion.java:835)
at
org.apache.hadoop.hbase.regionserver.MemStoreFlusher.flushRegion(MemStoreFlusher.java:241)
at
org.apache.hadoop.hbase.regionserver.MemStoreFlusher.run(MemStoreFlusher.java:149)
Caused by: java.io.IOException: Bad connect ack with firstBadLink
10.72.79.108:50010
at
org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.createBlockOutputStream(DFSClient.java:2872)
at
org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2795)
at
org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2078)
at
org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2264)
After the HRegionServer shuts down itself the regions will be reassigned
however you might hit this
2009-09-26 08:04:23,646 INFO
org.apache.hadoop.hbase.regionserver.HRegionServer: Worker: MSG_REGION_OPEN:
.META.,demo__assets,asset_283132172,1252898166036,1253265069920
2009-09-26 08:04:23,684 WARN org.apache.hadoop.hbase.regionserver.Store:
Skipping hdfs://b0:9000/hbase/.META./225980069/historian/1432202951743803786
because its empty. HBASE-646 DATA LOSS?
...
2009-09-26 08:04:23,776 INFO org.apache.hadoop.hbase.regionserver.HRegion:
region
.META.,demo__assets,asset_283132172,1252898166036,1253265069920/225980069
available; sequence id is 1331458484
We ended up with corrupted data in .META. "info:server" after master got
confirmation that it was updated from the HRegionServer that got
DroppedSnapshotException
Since after a cluster restart server:info will be correct, .META. is safer to
test with. Also to detect data corruption you can just scan .META. get the
start key for each region and attempt to retrieve it from the corresponding
table. If .META. is corrupted you get a NotServingRegionException.
This issue is related to https://issues.apache.org/jira/browse/HDFS-630
I attached a patch for HDFS-630
https://issues.apache.org/jira/secure/attachment/12420919/HDFS-630.patch that
fixes this problem.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.