我正在编写处理存储在HBase中的数据的代码。我还想为此代码编写一个测试。我想在测试中使用HBaseTestingUtility,因此,在我的@BeforeClass中,我创建了HBaseTestingUtility的新实例,并启动了小型集群:
@BeforeClass
public static void setUpClass() throws Exception {
utility = new HBaseTestingUtility();
utility.startMiniCluster();
}
效果很好。但是,我无法在正在测试的代码中连接到此嵌入式群集。在代码中,我有:
Configuration config = HBaseConfiguration.create();
try (HBaseAdmin admin = new HBaseAdmin(config))
{
//code which manipulates the data
}
不幸的是,当创建新的HBaseAdmin时,出现了ConnectionError异常:
当我尝试另一种方法来创建HBaseAdmin时:
try (HBaseAdmin admin = new HBaseAdmin(HBaseCacheTest.utility.getConfiguration()))
{
//code which manipulates the data
}
它可以正常工作(请注意,这里我正在通过HBaseCacheTest.utility访问HBaseTestingUtility的实例)。
显然,这不是一个好方法,因为我不想拥有依赖于测试代码的生产代码。
我想在这里工作的一种方法是在生产类中设置Configuration并在测试中使用此setter方法。
但是,我认为应该有另一种方法连接到使用HBaseTestingUtility创建的嵌入式迷你集群。
有任何想法吗?
最佳答案
您不应创建新的Configuration对象,而应使用HBaseTestingUtility提供的对象:
HBaseAdmin admin = testingUtility.getHBaseAdmin();
另外,如果仅需要配置,则可以使用以下配置:
testingUtility.getConfiguration()
只需在我的UT中重新检查即可。我正在使用HBase 0.96-hadoop2
希望这可以帮助 :)
关于java - 创建连接到HBaseTestingUtility的HBaseAdmin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20118705/