[ 
https://issues.apache.org/jira/browse/HBASE-11657?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14097745#comment-14097745
 ] 

Enis Soztutar commented on HBASE-11657:
---------------------------------------

bq. How should the interfaces and MapReduce play together? I know certain 
classes like TableInputFormatBase look at HRegionLocation.  If that's not 
something that should still be exposed, then to maintain appropriate 
encapsulation of HBase from MR we'll have to explore an alternative

For MR, we usually have one input split == one region, however, the region 
boundaries can always change after they are obtained or the job starts. 
However, for MR and other partitioning purposes, I think we will want to keep 
the getStartEndKeys() API that is byte[] ranges. Maybe we can couple that with 
a 

map of 
byte[] - byte[] range -> list of locations (ServerNames)  
API which will be our public facing partitioning / location API. We can keep 
HRL private this way. 


> Put HTable region methods in an interface
> -----------------------------------------
>
>                 Key: HBASE-11657
>                 URL: https://issues.apache.org/jira/browse/HBASE-11657
>             Project: HBase
>          Issue Type: Improvement
>    Affects Versions: 0.99.0
>            Reporter: Carter
>            Assignee: Carter
>             Fix For: 0.99.0
>
>         Attachments: HBASE_11657.patch, HBASE_11657_v2.patch, 
> HBASE_11657_v3.patch, HBASE_11657_v3.patch, HBASE_11657_v4.patch
>
>
> Most of the HTable methods are now abstracted by HTableInterface, with the 
> notable exception of the following methods that pertain to region metadata:
> {code}
> HRegionLocation getRegionLocation(final String row)
> HRegionLocation getRegionLocation(final byte [] row)
> HRegionLocation getRegionLocation(final byte [] row, boolean reload)
> byte [][] getStartKeys()
> byte[][] getEndKeys()
> Pair<byte[][],byte[][]> getStartEndKeys()
> void clearRegionCache()
> {code}
> and a default scope method which maybe should be bundled with the others:
> {code}
> List<RegionLocations> listRegionLocations()
> {code}
> Since the consensus seems to be that these would muddy HTableInterface with 
> non-core functionality, where should it go?  MapReduce looks up the region 
> boundaries, so it needs to be exposed somewhere.
> Let me throw out a straw man to start the conversation.  I propose:
> {code}
> org.apache.hadoop.hbase.client.HRegionInterface
> {code}
> Have HTable implement this interface.  Also add these methods to HConnection:
> {code}
> HRegionInterface getTableRegion(TableName tableName)
> HRegionInterface getTableRegion(TableName tableName, ExecutorService pool)
> {code}
> [~stack], [~ndimiduk], [~enis], thoughts?



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to