创建连接到hbasetestinguility的hbaseadmin

taor4pac  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(368)

我正在写一个代码来处理存储在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:35778警告[主发送线程(0:0:0:0:0:0:0:0:1:2181)]zookeeper.clientcnxn(clientcnxn。java:run(1089))-服务器空的会话0x0,意外错误,正在关闭套接字连接并尝试重新连接java.net.connectexception:连接被拒绝:sun.nio.ch.socketchannelimpl.checkconnect(本机方法)的sun.nio.ch.socketchannelimpl.finishconnect(socketchannelimpl)没有进一步的信息。java:692)在org.apache.zookeeper.clientcnxnsocketnio.dotransport(clientcnxnsocketnio。java:350)在org.apache.zookeeper.clientcnxn$sendthread.run(clientcnxn。java:1068)
当我尝试另一种方法来创建hbaseadmin时:

try (HBaseAdmin admin = new HBaseAdmin(HBaseCacheTest.utility.getConfiguration()))
{
   //code which manipulates the data
}

它可以工作(注意这里我通过hbasecachetest.utility访问hbasetestinguility的示例)。显然,这不是一个好的方法,因为我不想有一个生产代码依赖于测试代码。
我在这里看到的一种方法是在我的生产类中设置配置并在测试中使用setter方法。但是,我认为应该有另一种方法连接到使用hbasetestinguility创建的嵌入式小型集群。
有什么想法吗?

zrfyljdw

zrfyljdw1#

不应创建新的配置对象,而应使用hbasetestinguility提供的配置对象:

HBaseAdmin admin = testingUtility.getHBaseAdmin();

此外,如果您只需要配置,您可以使用以下配置:

testingUtility.getConfiguration()

刚在我的ut里复查过。我正在使用hbase 0.96-hadoop2
希望这有帮助:)

相关问题