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

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

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

在线部署建议包括:
  • 将协处理器jar放在HDFS上并使用HBase shell。
  • hbase-site.xml添加属性,将协处理器jar放在HBase lib目录中,然后重新启动HBase。
  • 将协处理器jar放在HDFS上,并使用hTableDescriptor.addCoprocessor(...)
  • 3.听起来像是唯一可行的远程选择,但我必须将协处理器jar放在一个已知的位置,并且必须设置一个本地HDFS集群。我非常希望能够从本地Maven存储库中提取协处理器jar并从本地位置进行部署。

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

    最佳答案

    HTableDescriptor有一个 addCoprocessor(String class) method,它将在类路径上找到协处理器。我的测试类(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类是实现Coprocessor的类。

    10-07 23:54