相关疑难解决方法(0)

扩展Hadoop的TableInputFormat以使用用于分发时间戳键的前缀进行扫描

我有一个hbase表,其密钥是一个带有一个字节随机前缀的时间戳,用于分发密钥,因此扫描不会热点.我正在尝试扩展,TableInputFormat以便我可以在带有范围的表上运行单个MapReduce,为所有256个可能的前缀添加前缀,以便扫描具有指定时间戳范围的所有范围.我的解决方案不起作用,因为它似乎总是扫描最后一个前缀(127)256次.必须在所有扫描中共享某些内容.

我的代码如下.有任何想法吗?

public class PrefixedTableInputFormat extends TableInputFormat {

  @Override
  public List<InputSplit> getSplits(JobContext context)
    throws IOException {
    List<InputSplit> splits = new ArrayList<InputSplit>();
    Scan scan = getScan();
    byte startRow[] = scan.getStartRow(), stopRow[] = scan.getStopRow();
    byte prefixedStartRow[] = new byte[startRow.length+1];
    byte prefixedStopRow[] = new byte[stopRow.length+1];
    System.arraycopy(startRow, 0, prefixedStartRow, 1, startRow.length);
    System.arraycopy(stopRow, 0, prefixedStopRow, 1, stopRow.length);

    for (int prefix = -128; prefix < 128; prefix++) {
      prefixedStartRow[0] = (byte) prefix;
      prefixedStopRow[0] = (byte) prefix;
      scan.setStartRow(prefixedStartRow);
      scan.setStopRow(prefixedStopRow);
      setScan(scan);
      splits.addAll(super.getSplits(context));
    }

    return splits;
  } …
Run Code Online (Sandbox Code Playgroud)

java hadoop hbase

2
推荐指数
1
解决办法
2910
查看次数

标签 统计

hadoop ×1

hbase ×1

java ×1