Index: src/java/org/apache/hadoop/hbase/mapred/TableSplit.java =================================================================== --- src/java/org/apache/hadoop/hbase/mapred/TableSplit.java (revision 684056) +++ src/java/org/apache/hadoop/hbase/mapred/TableSplit.java (working copy) @@ -34,11 +34,12 @@ private byte [] m_tableName; private byte [] m_startRow; private byte [] m_endRow; + private String m_regionLocation; /** default constructor */ public TableSplit() { this(HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY, - HConstants.EMPTY_BYTE_ARRAY); + HConstants.EMPTY_BYTE_ARRAY, ""); } /** @@ -47,10 +48,12 @@ * @param startRow * @param endRow */ - public TableSplit(byte [] tableName, byte [] startRow, byte [] endRow) { + public TableSplit(byte [] tableName, byte [] startRow, + byte [] endRow, String location) { m_tableName = tableName; m_startRow = startRow; m_endRow = endRow; + m_regionLocation = location; } /** @return table name */ @@ -67,6 +70,11 @@ public byte [] getEndRow() { return m_endRow; } + + /** @return the region's hostname */ + public String getRegionLocation() { + return m_regionLocation; + } /** {@inheritDoc} */ public long getLength() { @@ -76,8 +84,8 @@ /** {@inheritDoc} */ public String[] getLocations() { - // Return a random node from the cluster for now - return new String[] { }; + + return new String[] { m_regionLocation }; } /** {@inheritDoc} */ Index: src/java/org/apache/hadoop/hbase/mapred/TableInputFormatBase.java =================================================================== --- src/java/org/apache/hadoop/hbase/mapred/TableInputFormatBase.java (revision 684056) +++ src/java/org/apache/hadoop/hbase/mapred/TableInputFormatBase.java (working copy) @@ -272,9 +272,11 @@ for (int i = 0; i < realNumSplits; i++) { int lastPos = startPos + middle; lastPos = startKeys.length % realNumSplits > i ? lastPos + 1 : lastPos; + String regionLocation = table.getRegionLocation(startKeys[startPos]). + getServerAddress().getHostname(); splits[i] = new TableSplit(this.table.getTableName(), startKeys[startPos], ((i + 1) < realNumSplits) ? startKeys[lastPos] - : HConstants.EMPTY_START_ROW); + : HConstants.EMPTY_START_ROW, regionLocation); if (LOG.isDebugEnabled()) { LOG.debug("split: " + i + "->" + splits[i]); }