I want to write simple tool for rebalancing regions in cluster.For that I need current location of all regions.I've found method HConnection.locateRegions(tableName), but it always returns null.Also, i've tried to call HConnection.locateRegion(regionName), and it returns null too.

It's actually not implemented (I will update the javadoc for the latestversion)You can use locateRegion(final byte [] tableName, final byte [] row), anditerates on all region start keys to get all the regions.

03.01.2013 2:34, Jean-Marc Spaggiari пишет:> Here is the code for locateRegion:>> @Override> public List<HRegionLocation> locateRegions(final byte [] tableName)> throws IOException {> // TODO implement. use old stuff or new stuff?> return null;> }>>> As you can see, it's like what Nicolas is saying. Always return null.>> However, relocateRegion is calling a private locateRegions which is> not returning null.... You might want to try that?>> Also, I played few weeks ago with the region balancing. You can take> a look here to see what I did.> http://www.spaggiari.org/index.php/hbase/changing-the-hbase-default-loadbalancer> You can do yours based on that.>> Nicolas, should we not have locateRegion "simply" calling the private> locateRegion method?>> JM>> 2013/1/2, Nicolas Liochon <[EMAIL PROTECTED]>:>> Hi,>>>> It's actually not implemented (I will update the javadoc for the latest>> version)>> You can use locateRegion(final byte [] tableName, final byte [] row), and>> iterates on all region start keys to get all the regions.>>>> Cheers,>>>> Nicolas>>>>>>>>>> On Wed, Jan 2, 2013 at 5:17 PM, Lyska Anton <[EMAIL PROTECTED]> wrote:>>>>> Hi all,>>>>>> I want to write simple tool for rebalancing regions in cluster.>>> For that I need current location of all regions.>>> I've found method HConnection.locateRegions(**tableName), but it always>>> returns null.>>> Also, i've tried to call HConnection.locateRegion(**regionName), and it>>> returns null too.>>>>>> sample code:>>>>>> Configuration config = HBaseConfiguration.create();>>> config.set("hbase.zookeeper.**quorum", host);>>>>>> HConnection connection = HConnectionManager.**>>> createConnection(config);>>> List<HRegionLocation> locations >>> connection.locateRegions(**tableName);>>> //return null here>>>>>> HBase Version 0.92.1-cdh4.1.2>>>>>> Thanks in advance.>>>>>>

It will work, but there is some glue code to write as one is returning oneregion given a rowkey, while the not implemented one returns all theversion.Code written by Lyska seems fine, we could put it in locateRegions (doingthis server side is more efficient)

Also, I think we should add this in the interface and do the relatedimplementation:

/** * Gets the locations of all regions in the specified table, <i>tableName</i>. * @param tableName table to get regions of * @param offlined True if we are to include offlined regions, false and we'll * leave out offlined regions from returned list. * @return list of region locations for all regions of table * @throws IOException */ public List<HRegionLocation> locateRegions(byte[] tableName, finalboolean offlined) throws IOException;

Because current interface doesn't allow you to specify the offlined parameter.

If you are fine with that too, I will submit the required patch.

JM

2013/1/3, Nicolas Liochon <[EMAIL PROTECTED]>:> Hi,>> It will work, but there is some glue code to write as one is returning one> region given a rowkey, while the not implemented one returns all the> version.> Code written by Lyska seems fine, we could put it in locateRegions (doing> this server side is more efficient)>> Nicolas>>> On Thu, Jan 3, 2013 at 1:34 AM, Jean-Marc Spaggiari> <[EMAIL PROTECTED]>> wrote:>>> locateRegions>

Yep, I'm ok with that. It will need to be put in the interface (vs. theimplementation class). Would be nice if you could implement the two missingmethods (i.e. public HRegionLocation locateRegion(final byte [] regionName))

Regarding locateRegion(final byte[] regionName) I don't know if thereis a faster way to get the first row and the table name from theregionName. Region name should already contain those 2 information. Soit should be possible to retrieve that from it instead of getting allthe regions and doing the comparison. Any idea if there is any utilclass to extract the table and the key from the name?

Thanks,

JM

2013/1/3, Jean-Marc Spaggiari <[EMAIL PROTECTED]>:> I will take a look at all of that and keep you posted shortly.>> JM>> 2013/1/3, Nicolas Liochon <[EMAIL PROTECTED]>:>> Yep, I'm ok with that. It will need to be put in the interface (vs. the>> implementation class). Would be nice if you could implement the two>> missing>> methods (i.e. public HRegionLocation locateRegion(final byte []>> regionName))>>>> On Thu, Jan 3, 2013 at 7:33 PM, Jean-Marc Spaggiari>> <[EMAIL PROTECTED]>>> wrote:>>>>> public List<HRegionLocation> locateRegions(byte[] tableName, final>>>

I found HRegionInfo.getTableName(regionName) to get the table namequickly. Still searching for the startKey.HRegionInfo.getStartKey(regionName) doesn't exist. Maybe I will haveto create it...

2013/1/3, Jean-Marc Spaggiari <[EMAIL PROTECTED]>:> Done. You can take a look at what I pushed.>> https://issues.apache.org/jira/browse/HBASE-7488>> Regarding locateRegion(final byte[] regionName) I don't know if there> is a faster way to get the first row and the table name from the> regionName. Region name should already contain those 2 information. So> it should be possible to retrieve that from it instead of getting all> the regions and doing the comparison. Any idea if there is any util> class to extract the table and the key from the name?>> Thanks,>> JM>> 2013/1/3, Jean-Marc Spaggiari <[EMAIL PROTECTED]>:>> I will take a look at all of that and keep you posted shortly.>>>> JM>>>> 2013/1/3, Nicolas Liochon <[EMAIL PROTECTED]>:>>> Yep, I'm ok with that. It will need to be put in the interface (vs. the>>> implementation class). Would be nice if you could implement the two>>> missing>>> methods (i.e. public HRegionLocation locateRegion(final byte []>>> regionName))>>>>>> On Thu, Jan 3, 2013 at 7:33 PM, Jean-Marc Spaggiari>>> <[EMAIL PROTECTED]>>>> wrote:>>>>>>> public List<HRegionLocation> locateRegions(byte[] tableName, final>>>>>>

I'm done with the update. I have implemented HRegionInfo.getStartKeyto remove the loop in locateRegion(final byte[] regionName). Tests arerunning and so far, so good. I will update the JIRA when the testswill be done.

JM

2013/1/3, Jean-Marc Spaggiari <[EMAIL PROTECTED]>:> I found HRegionInfo.getTableName(regionName) to get the table name> quickly. Still searching for the startKey.> HRegionInfo.getStartKey(regionName) doesn't exist. Maybe I will have> to create it...>> 2013/1/3, Jean-Marc Spaggiari <[EMAIL PROTECTED]>:>> Done. You can take a look at what I pushed.>>>> https://issues.apache.org/jira/browse/HBASE-7488>>>> Regarding locateRegion(final byte[] regionName) I don't know if there>> is a faster way to get the first row and the table name from the>> regionName. Region name should already contain those 2 information. So>> it should be possible to retrieve that from it instead of getting all>> the regions and doing the comparison. Any idea if there is any util>> class to extract the table and the key from the name?>>>> Thanks,>>>> JM>>>> 2013/1/3, Jean-Marc Spaggiari <[EMAIL PROTECTED]>:>>> I will take a look at all of that and keep you posted shortly.>>>>>> JM>>>>>> 2013/1/3, Nicolas Liochon <[EMAIL PROTECTED]>:>>>> Yep, I'm ok with that. It will need to be put in the interface (vs. the>>>> implementation class). Would be nice if you could implement the two>>>> missing>>>> methods (i.e. public HRegionLocation locateRegion(final byte []>>>> regionName))>>>>>>>> On Thu, Jan 3, 2013 at 7:33 PM, Jean-Marc Spaggiari>>>> <[EMAIL PROTECTED]>>>>> wrote:>>>>>>>>> public List<HRegionLocation> locateRegions(byte[] tableName, final>>>>>>>>>>

+

Jean-Marc Spaggiari 2013-01-03, 20:26

NEW: Monitor These Apps!

All projects made searchable here are trademarks of the Apache Software Foundation.
Service operated by Sematext