Index: bin/copy_table.rb =================================================================== --- bin/copy_table.rb (revision 791031) +++ bin/copy_table.rb (working copy) @@ -8,6 +8,8 @@ # ${HBASE_HOME}/bin/hbase org.jruby.Main rename_table.rb # include Java +import java.util.ArrayList + import org.apache.hadoop.hbase.util.MetaUtils import org.apache.hadoop.hbase.util.FSUtils import org.apache.hadoop.hbase.util.Bytes @@ -18,14 +20,13 @@ import org.apache.hadoop.hbase.HRegionInfo import org.apache.hadoop.hbase.HTableDescriptor import org.apache.hadoop.hbase.io.ImmutableBytesWritable -import org.apache.hadoop.hbase.regionserver.HLogEdit +import org.apache.hadoop.hbase.client.Scan import org.apache.hadoop.hbase.regionserver.HRegion import org.apache.hadoop.fs.Path import org.apache.hadoop.fs.FileSystem import org.apache.hadoop.fs.FileUtil import org.apache.commons.logging.Log import org.apache.commons.logging.LogFactory -import java.util.TreeMap # Name of this script NAME = "copy_table" @@ -102,44 +103,45 @@ # After move, delete old entry and create a new. LOG.info("Scanning " + meta.getRegionNameAsString()) metaRegion = utils.getMetaRegion(meta) - scanner = metaRegion.getScanner(HConstants::COL_REGIONINFO_ARRAY, oldTableName, - HConstants::LATEST_TIMESTAMP, nil) + scan = Scan.new(oldTableName); + scan.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER); + scanner = metaRegion.getScanner(scan) begin - key = HStoreKey.new() - value = TreeMap.new(Bytes.BYTES_COMPARATOR) - while scanner.next(key, value) - index = index + 1 - keyStr = key.toString() - oldHRI = Writables.getHRegionInfo(value.get(HConstants::COL_REGIONINFO)) - if !oldHRI - raise IOError.new(index.to_s + " HRegionInfo is null for " + keyStr) + list = ArrayList.new() + begin + loop = scanner.next(list) + if(list.size() > 0) + keyValue = list.get(0) + index = index + 1 + oldHRI = Writables.getHRegionInfo(keyValue.getValue()) + if !oldHRI + raise IOError.new(index.to_s + " HRegionInfo is null for " + keyValue) + end + unless isTableRegion(oldTableName, oldHRI) + # If here, we passed out the table. Break. + break + end + oldRDir = Path.new(oldTableDir, Path.new(oldHRI.getEncodedName().to_s)) + if !fs.exists(oldRDir) + LOG.warn(oldRDir.toString() + " does not exist -- region " + + oldHRI.getRegionNameAsString()) + else + # Now make a new HRegionInfo to add to .META. for the new region. + newHRI = createHRI(newTableName, oldHRI) + newRDir = Path.new(newTableDir, Path.new(newHRI.getEncodedName().to_s)) + # Move the region in filesystem + LOG.info("Copying " + oldRDir.toString() + " as " + newRDir.toString()) + FileUtil.copy(fs, oldRDir, fs, newRDir, false, true, c) + # Create 'new' region + newR = HRegion.new(rootdir, utils.getLog(), fs, c, newHRI, nil) + # Add new row. NOTE: Presumption is that only one .META. region. If not, + # need to do the work to figure proper region to add this new region to. + LOG.info("Adding to meta: " + newR.toString()) + HRegion.addRegionToMETA(metaRegion, newR) + LOG.info("Done copying: " + Bytes.toString(keyValue.getRow())) + end end - unless isTableRegion(oldTableName, oldHRI) - # If here, we passed out the table. Break. - break - end - oldRDir = Path.new(oldTableDir, Path.new(oldHRI.getEncodedName().to_s)) - if !fs.exists(oldRDir) - LOG.warn(oldRDir.toString() + " does not exist -- region " + - oldHRI.getRegionNameAsString()) - else - # Now make a new HRegionInfo to add to .META. for the new region. - newHRI = createHRI(newTableName, oldHRI) - newRDir = Path.new(newTableDir, Path.new(newHRI.getEncodedName().to_s)) - # Move the region in filesystem - LOG.info("Copying " + oldRDir.toString() + " as " + newRDir.toString()) - FileUtil.copy(fs, oldRDir, fs, newRDir, false, true, c) - # Create 'new' region - newR = HRegion.new(rootdir, utils.getLog(), fs, c, newHRI, nil) - # Add new row. NOTE: Presumption is that only one .META. region. If not, - # need to do the work to figure proper region to add this new region to. - LOG.info("Adding to meta: " + newR.toString()) - HRegion.addRegionToMETA(metaRegion, newR) - LOG.info("Done copying: " + Bytes.toString(key.getRow())) - end - # Need to clear value else we keep appending values. - value.clear() - end + end while(loop) ensure scanner.close() end Index: bin/rename_table.rb =================================================================== --- bin/rename_table.rb (revision 791031) +++ bin/rename_table.rb (working copy) @@ -10,23 +10,24 @@ # ${HBASE_HOME}/bin/hbase org.jruby.Main rename_table.rb # include Java +import java.util.ArrayList + import org.apache.hadoop.hbase.util.MetaUtils import org.apache.hadoop.hbase.util.FSUtils import org.apache.hadoop.hbase.util.Bytes import org.apache.hadoop.hbase.util.Writables import org.apache.hadoop.hbase.HConstants import org.apache.hadoop.hbase.HBaseConfiguration -import org.apache.hadoop.hbase.HStoreKey import org.apache.hadoop.hbase.HRegionInfo import org.apache.hadoop.hbase.HTableDescriptor -import org.apache.hadoop.hbase.io.ImmutableBytesWritable -import org.apache.hadoop.hbase.regionserver.HLogEdit +import org.apache.hadoop.hbase.KeyValue +import org.apache.hadoop.hbase.client.Delete +import org.apache.hadoop.hbase.client.Scan import org.apache.hadoop.hbase.regionserver.HRegion import org.apache.hadoop.fs.Path import org.apache.hadoop.fs.FileSystem import org.apache.commons.logging.Log import org.apache.commons.logging.LogFactory -import java.util.TreeMap # Name of this script NAME = "rename_table" @@ -103,52 +104,56 @@ # After move, delete old entry and create a new. LOG.info("Scanning " + meta.getRegionNameAsString()) metaRegion = utils.getMetaRegion(meta) - scanner = metaRegion.getScanner(HConstants::COL_REGIONINFO_ARRAY, oldTableName, - HConstants::LATEST_TIMESTAMP, nil) + scan = Scan.new(oldTableName); + scan.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER); + scanner = metaRegion.getScanner(scan) begin - key = HStoreKey.new() - value = TreeMap.new(Bytes.BYTES_COMPARATOR) - while scanner.next(key, value) - index = index + 1 - keyStr = key.toString() - oldHRI = Writables.getHRegionInfo(value.get(HConstants::COL_REGIONINFO)) - if !oldHRI - raise IOError.new(index.to_s + " HRegionInfo is null for " + keyStr) + list = ArrayList.new() + begin + loop = scanner.next(list) + if(list.size() > 0) + keyValue = list.get(0) + row = keyValue.getRow() + index = index + 1 + oldHRI = Writables.getHRegionInfo(keyValue.getValue()) + if !oldHRI + raise IOError.new(index.to_s + " HRegionInfo is null for " + keyValue) + end + unless isTableRegion(oldTableName, oldHRI) + # If here, we passed out the table. Break. + break + end + oldRDir = Path.new(oldTableDir, Path.new(oldHRI.getEncodedName().to_s)) + if !fs.exists(oldRDir) + LOG.warn(oldRDir.toString() + " does not exist -- region " + + oldHRI.getRegionNameAsString()) + else + # Now make a new HRegionInfo to add to .META. for the new region. + newHRI = createHRI(newTableName, oldHRI) + newRDir = Path.new(newTableDir, Path.new(newHRI.getEncodedName().to_s)) + # Move the region in filesystem + LOG.info("Renaming " + oldRDir.toString() + " as " + newRDir.toString()) + fs.rename(oldRDir, newRDir) + # Removing old region from meta + LOG.info("Removing " + Bytes.toString(row) + " from .META.") + delete = Delete.new(row) + metaRegion.delete(delete, nil, true) + # Create 'new' region + newR = HRegion.new(rootdir, utils.getLog(), fs, c, newHRI, nil) + # Add new row. NOTE: Presumption is that only one .META. region. If not, + # need to do the work to figure proper region to add this new region to. + LOG.info("Adding to meta: " + newR.toString()) + HRegion.addRegionToMETA(metaRegion, newR) + LOG.info("Done moving: " + Bytes.toString(row)) + end + # Need to clear value else we keep appending values. end - unless isTableRegion(oldTableName, oldHRI) - # If here, we passed out the table. Break. - break - end - oldRDir = Path.new(oldTableDir, Path.new(oldHRI.getEncodedName().to_s)) - if !fs.exists(oldRDir) - LOG.warn(oldRDir.toString() + " does not exist -- region " + - oldHRI.getRegionNameAsString()) - else - # Now make a new HRegionInfo to add to .META. for the new region. - newHRI = createHRI(newTableName, oldHRI) - newRDir = Path.new(newTableDir, Path.new(newHRI.getEncodedName().to_s)) - # Move the region in filesystem - LOG.info("Renaming " + oldRDir.toString() + " as " + newRDir.toString()) - fs.rename(oldRDir, newRDir) - # Removing old region from meta - LOG.info("Removing " + Bytes.toString(key.getRow()) + " from .META.") - metaRegion.deleteAll(key.getRow(), HConstants::LATEST_TIMESTAMP) - # Create 'new' region - newR = HRegion.new(rootdir, utils.getLog(), fs, c, newHRI, nil) - # Add new row. NOTE: Presumption is that only one .META. region. If not, - # need to do the work to figure proper region to add this new region to. - LOG.info("Adding to meta: " + newR.toString()) - HRegion.addRegionToMETA(metaRegion, newR) - LOG.info("Done moving: " + Bytes.toString(key.getRow())) - end - # Need to clear value else we keep appending values. - value.clear() - end + end while(loop) ensure scanner.close() end end - LOG.info("Renamed table -- manually delete " + oldTableDir.toString()); + LOG.info("Renamed table -- manually delete " + oldTableDir.toString()) ensure utils.shutdown() end