/** {@inheritDoc} */ @Override public void createTable(TableLayoutDesc tableLayout, int numRegions) throws IOException { Preconditions.checkArgument((numRegions >= 1), "numRegions must be positive: " + numRegions); if (numRegions > 1) { if (KijiTableLayout.getEncoding(tableLayout.getKeysFormat()) == RowKeyEncoding.RAW) { throw new IllegalArgumentException( "May not use numRegions > 1 if row key hashing is disabled in the layout"); } createTable( tableLayout, KijiRowKeySplitter.get() .getSplitKeys(numRegions, KijiRowKeySplitter.getRowKeyResolution(tableLayout))); } else { createTable(tableLayout, null); } }
/** * Generate a list of start keys (one per region). Since we know that the row keys in kiji are * byte strings of length 16, we can reliably split them evenly. * * @param numRegions The number of regions to generate start keys for. * @return A list of start keys with size equal to <code>numRegions</code>. */ private static List<HFileKeyValue> generateEvenStartKeys(int numRegions) { List<HFileKeyValue> startKeys = new ArrayList<HFileKeyValue>(numRegions); // The first key is a special case, it must be empty. startKeys.add(HFileKeyValue.createFromRowKey(HConstants.EMPTY_BYTE_ARRAY)); if (numRegions > 1) { byte[][] splitKeys = KijiRowKeySplitter.get().getSplitKeys(numRegions); for (byte[] hbaseRowKey : splitKeys) { startKeys.add(HFileKeyValue.createFromRowKey(hbaseRowKey)); } } return startKeys; }