我正在编写处理存储在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/

10-09 06:42