我正在编写一个代码来操作存储在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异常:
2013-11-21 11:20:35,778 WARN main-SendThread(0:0:0:0:0:0:1:2181) zookeeper.ClientCnxn (ClientCnxn.java:run(1089)) -会话0x0用于服务器空,意外错误,关闭套接字连接并尝试重新连接java.net.ConnectException:连接被拒绝:在org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350) at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1068)的sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:692)上没有进一步的信息
当我尝试另一个分摊来创建HBaseAdmin时:
try (HBaseAdmin admin = new HBaseAdmin(HBaseCacheTest.utility.getConfiguration()))
{
//code which manipulates the data
}它可以工作(请注意,这里我通过HBaseCacheTest.utility访问HBaseTestingUtility实例)。显然,这不是一个很好的方法,因为我不希望有一个依赖于测试代码的生产代码。
我在这里看到的一种方法是在我的产品类中设置配置并在测试中使用此setter方法。但是,我认为应该有另一种方式来连接到用HBaseTestingUtility创建的嵌入式迷你集群。
有什么想法吗?
发布于 2014-01-15 12:44:08
不应创建新的配置对象,而应使用HBaseTestingUtility提供的配置对象:
HBaseAdmin admin = testingUtility.getHBaseAdmin();此外,如果您只需要配置,则可以使用此配置:
testingUtility.getConfiguration()只是在我的UT重新检查了一下。我使用的是HBase 0.96-hadoop2 2
希望这会有所帮助:)
https://stackoverflow.com/questions/20118705
复制相似问题