[ https://issues.apache.org/jira/browse/HBASE-1342?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12705119#action_12705119 ]
stack commented on HBASE-1342: ------------------------------ Patch coming. Here is what it does meantime. It adds a file on HRegion initialization. If already there, does nothing. File is named .regioninfo. Presumption is that the families list is gotten from schema, not by doing a listing of whats under the region directory (I've added code to stop a user creating a family named .regioninfo). File looks like this: {code} ^...@^@^...@^@^...@^@^...@^@^...@^@^@ -ROOT-,,0...@^@^...@^@^...@^d^f-root-^a^a^@^...@^@^...@^@^...@^gis_root^@^...@^@^dtr...@^@^...@^gis_meta^@^...@^@^dtr...@^@^...@^a^g^dinfo^@^...@^@^...@^@^...@^kbloomfilter^@^...@^@^efal...@^@^...@^kcompression^@^...@^@^dno...@^@^...@^hversions^@^...@^@^b...@^@^...@^flength^@^...@^@ 21474836...@^@^...@^cttl^@^...@^@^b...@^@^@ blocksi...@^@^...@^d8192^@^...@^@ in_memo...@^@^...@^efalse^@^...@^@ blockcac...@^@^...@^dtrue^@^...@^@^...@cخ^o REGION => {NAME => '-ROOT-,,0', STARTKEY => '', ENDKEY => '', ENCODED => 70236052, TABLE => {{NAME => '-ROOT-', IS_ROOT => 'true', IS_META => 'true', FAMILIES => [{NAME => 'info', BLOOMFILTER => 'false', COMPRESSION => 'NONE', VERSIONS => '10', LENGTH => '2147483647', TTL => '-1', BLOCKSIZE => '8192', IN_MEMORY => 'false', BLOCKCACHE => 'true'}], INDEXES => []}} {code} Its the serialized HRI followed by text version. Two newlines separates them. To read the binary part to reconstruct an HRI, just do something like this (using shell): {code} durruti:trunk stack$ ./bin/hbase shell HBase Shell; enter 'help<RETURN>' for list of supported commands. Version: 0.20.0-dev, r770006, Fri May 1 10:52:11 PDT 2009 hbase(main):001:0> import org.apache.hadoop.fs.FileSystem => Java::OrgApacheHadoopFs::FileSystem hbase(main):002:0> fs = FileSystem.get(@configuration) => #<Java::OrgApacheHadoopFs::LocalFileSystem:0x875de82 @java_object=#<Java::JavaObject:0x314dd379>> hbase(main):003:0> import org.apache.hadoop.hbase.HRegionInfo file:/Users/stack/checkouts/hbase/trunk/lib/jruby-complete-1.2.0.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/builtin/javasupport/core_ext/object.rb:34 warning: already initialized constant HRegionInfo => Java::OrgApacheHadoopHbase::HRegionInfo hbase(main):004:0> hri = HRegionInfo.new => #<Java::OrgApacheHadoopHbase::HRegionInfo:0x12082fd2 @java_object=#<Java::JavaObject:0x45cfa4ed>> hbase(main):006:0> import org.apache.hadoop.fs.Path => Java::OrgApacheHadoopFs::Path hbase(main):007:0> p = Path.new("/tmp/hbase-stack/hbase/-ROOT-/70236052/.regioninfo/") => #<Java::OrgApacheHadoopFs::Path:0x779dfb5a @java_object=#<Java::JavaObject:0x70db5d33>> hbase(main):009:0> fin = fs.open(p) => #<Java::OrgApacheHadoopFs::FSDataInputStream:0x3dbe5cb8 @java_object=#<Java::JavaObject:0x32d7970b>> hbase(main):011:0> hri.readFields(fin) hbase(main):012:0> fin.close() hbase(main):014:0> p hri.toString() "REGION => {NAME => '-ROOT-,,0', STARTKEY => '', ENDKEY => '', ENCODED => 70236052, TABLE => {{NAME => '-ROOT-', IS_ROOT => 'true', IS_META => 'true', FAMILIES => [{NAME => 'info', BLOOMFILTER => 'false', VERSIONS => '10', COMPRESSION => 'NONE', LENGTH => '2147483647', TTL => '-1', BLOCKSIZE => '8192', IN_MEMORY => 'false', BLOCKCACHE => 'true'}], INDEXES => []}}" {code} That should be some help reconstructing .META. Let me review the master logging now to make sure good stuff shows there at info level. > Add to filesystem info needed to rebuild .META. > ----------------------------------------------- > > Key: HBASE-1342 > URL: https://issues.apache.org/jira/browse/HBASE-1342 > Project: Hadoop HBase > Issue Type: Bug > Reporter: stack > Fix For: 0.20.0 > > > From Cosmin up on list: > {code} > Hi, > Is there any way to rebuild the .META. Table with information in HDFS? > Long story short, the namenode ran out of disk and crashed and we couldn't > have it load the edits.new file at startup (the edits.new file seemed > corrupted and it failed to read some Long value) so we removed the edits.new > file. Apparently the edits file had 10 - 15 entries. Some edit data on > -ROOT-, some edit data on .META., some data on a table compaction > (comapction.dir) and some data on some hbase logs. Only last entry seem to > be bogus, having almost a megabyte of trailing zeroes. > After renaming edits.new HDFS started ok and HBase data is present. However > when we started Hbase one table was missing entirely and one table was > empty. The HBase master report shows Regions On FS: 94, but the report on > region servers shows only 10 regions on all the region servers. > Is there any way to cleanup hbase and rebuild the .META. table from HDFS? > This would be ok even if it implies throwing up some data. > If we would clean the edits.new file and restart HDFS or if we would > manually apply the edits would that still make consistent changes to HBase > data? > Thanks, > Cosmin > {code} > Lets log the info needed to rebuild your .META. or add things like > HRegionInfo made creating a region as a file under each region directory. > That don't seem hard and the info could be used rebuilding. What else would > we need? > Marking as blocker/critical for 0.20.0. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.