Thanks, I'm already updated my end-to-end test, waiting for the result.

Here is my code snippet, is it ok?

 @SneakyThrows(IOException.class)
    private byte[][] collectSplits(String tableName){
        HTable table = new HTable(configuration, tableName);
        int splitSize =
table.getRegionLocations().descendingKeySet().size();

        if(splitSize < 2){
            LOG.info(String.format("There is only one region for a
table[%s]. No splits to recreate", tableName));
            return new byte[][]{};
        }
        LOG.info(String.format("There are [%s] regions for a table[%s].
Skip pre-splitting", splitSize, tableName));

        byte[][] splits = new byte[splitSize][];
      *  Iterator<HRegionInfo> itr =
table.getRegionLocations().descendingKeySet().iterator();*
*        int index = 0;*
*        while (itr.hasNext()){*
*            splits[index] = itr.next().getStartKey();*
*            index++;*
*        }*

        table.close();

        Arrays.sort(splits, Bytes.BYTES_COMPARATOR);
        return splits;
    }


2014-10-03 20:02 GMT+04:00 Ted Yu <[email protected]>:

> Take a look at this method in HTable:
>
>   public Pair<byte[][],byte[][]> getStartEndKeys() throws IOException {
>
> You would see that the first dimension corresponds to the number of
> regions.
>
>
> Cheers
>
> On Fri, Oct 3, 2014 at 8:33 AM, Serega Sheypak <[email protected]>
> wrote:
>
> > Ok, I found them:
> > hTable.getRegionLocations().descendingKeySet()
> > and
> > HRegionInfo has startKey and endKey
> > I have to prepare splits[][].
> > I'm confused a little, how keys should be placed there? splits[][] shoud
> by
> > and array with length=region count and width = 2?
> >
> >
> > 2014-10-03 17:57 GMT+04:00 Serega Sheypak <[email protected]>:
> >
> > > Hi, here is my code:
> > >
> > > public void dropIfExistsAndCreate(String sourceTableName, String
> > > newTableName) throws IOException {
> > >         LOG.info(String.format("Use [%s] to create [%s]",
> > sourceTableName,
> > > newTableName));
> > >         HTableDescriptor descriptor = getDescriptor(sourceTableName);
> > >         dropIfExists(newTableName); // doesn't matter
> > >         createTable(descriptor, newTableName);
> > >     }
> > >
> > >     private void createTable(HTableDescriptor descriptor, String
> > > newTableName) throws IOException {
> > >         descriptor.setName(Bytes.toBytes(newTableName));
> > >         getAdmin().createTable(descriptor);
> > >         LOG.info(String.format("Table created[%s]", newTableName));
> > >     }
> > >
> > > My source table has 256 regions, newly created table has no splits.
> > > Is there any possibility to copy splits from source table?
> > >
> > > I supposed, that HTableDescriptor encasulates splits, but it was bad
> > > assumption.
> > >
> >
>

Reply via email to