2013-11-21 25 views
0

我正在寫一個代碼來處理存儲在HBase中的數據。我想寫一個測試代碼。我想在我的測試中使用HBaseTestingUtility,因此,在我的@BeforeClass創建HBaseTestingUtility的新實例,我開始了小型集羣:創建連接HBaseTestingUtility的HBaseAdmin

@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 [主SendThread(0 :0:0:0:0:0:0:1:2181)] zookeeper.ClientCnxn(ClientCnxn.java:run(1089)) - 對於服務器null的會話0x0,意外錯誤,關閉套接字連接並嘗試重新連接 java。 net.ConnectException:連接被拒絕:沒有進一步的信息 at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChann elImpl.java:692) 在org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350) 在org.apache.zookeeper.ClientCnxn $ SendThread.run(ClientCnxn.java:1068)

當我嘗試另一個apporach創建HBaseAdmin:

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

它的工作原理(請注意,我在這裏通過HBaseCacheTest.utility訪問HBaseTestingUtility的實例)。 顯然這不是一個好方法,因爲我不想要一個依賴於測試代碼的生產代碼。

我在這裏看到的一種方法是在我的生產類中設置配置並在我的測試中使用此setter方法。 但是,我相信應該有另一種方式連接到使用HBaseTestingUtility創建的嵌入式迷你集羣。

任何想法?

回答

0

你不應該創建一個新的配置對象,而使用由HBaseTestingUtility提供的一個:

HBaseAdmin admin = testingUtility.getHBaseAdmin(); 

另外,如果你需要的配置不僅可以使用這一個:

testingUtility.getConfiguration() 

只是複查它在我的UT。我正在使用HBase 0.96-hadoop2

希望這有助於:)