在 HBaseTestingUtility 中测试协处理器

Test a Coprocessor within HBaseTestingUtility

我已经制作了一个 HBase 端点协处理器,非常基于给定的示例 here。我想使用 HBaseTestingUtility 对其进行测试,但没有关于加载协处理器的建议,它们似乎可以在此设置中工作。

我通过以下方式启动集群:

HBaseTestingUtility hbaseUtility = new HBaseTestingUtility();
hbaseUtility.startMiniCluster();
hbaseUtility.createTable(TableName.valueOf("test"), "a");

在线部署建议包括:

  1. 将协处理器 jar 放在 HDFS 上并使用 HBase shell。
  2. 将 属性 添加到 hbase-site.xml,将协处理器 jar 放入 HBase 库目录,然后重新启动 HBase。
  3. 将协处理器 jar 放在 HDFS 上并使用 hTableDescriptor.addCoprocessor(...)

3. 听起来像是唯一可行的远程选项,但我必须将协处理器 jar 放在已知位置,并且必须设置本地 HDFS 集群。我更希望能够从我的本地 Maven 存储库中提取协处理器 jar 并从本地位置部署它。

谁能推荐使用 HBaseTestingUtility 测试协处理器的最佳方法?

HTableDescriptor 有一个 addCoprocessor(String class) method,它将在 class 路径上找到协处理器。我的测试 class 现在看起来像:

HBaseTestingUtility hbaseUtility = new HBaseTestingUtility();
hbaseUtility.startMiniCluster();
TableName table = TableName.valueOf("test");
hbaseUtility.createTable(table , "a");
hBaseAdmin.disableTable(table);
HTableDescriptor hTableDescriptor = new HTableDescriptor(table);
hTableDescriptor.addCoprocessor("uk.co.hadoopathome.hbase.coprocessor.SumEndpoint");
HColumnDescriptor colFam = new HColumnDescriptor("a");
hTableDescriptor.addFamily(colFam);
hBaseAdmin.modifyTable(table, hTableDescriptor);
hBaseAdmin.enableTable(table);

其中 SumEndpoint class 是实现 Coprocessor 的 class。