我有一个用Java 7编译的Maven项目使用Spring IoC,它假设测试在hbase-client jar中的使用。
依赖关系如下:
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.0.0-cdh5.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0-cdh5.5.4</version>
</dependency>
我有一个测试(使用JUnit)创建一个本地集群,创建一个表并加载一些数据,然后客户端连接到集群,执行查找并执行对集群的关闭,然后尝试再次启动集群以检查客户的重新连接机制。
问题是,在关闭后启动集群期间,它会遇到异常,经过长时间的研究,看起来关闭过程还没有成功完成。
任何有关如何正确关闭群集的帮助都会很棒。
代码上下文:
@RunWith(SpringJUnit4ClassRunner.class)
public class TestHBaseUserOfflineReconnection
{
@Value("${userTableName}")
private static String userTableName = "TestTable";
@Autowired
@Qualifier("hbaseUserOfflineReconnectDao")
private UserDao userOfflineReconnectDao;
@Autowired
private DemographicBenchmark benchmark;
private Table htable;
private static LocalHBaseCluster hbaseCluster;
private static MiniZooKeeperCluster zooKeeperCluster;
private static Configuration configuration;
static Connection conn = null;
@BeforeClass
public static void setup() throws IOException, InterruptedException
{
// delete the default local folder for that HBase stores its files
String userName = System.getProperty("user.name");
FileUtils.deleteDirectory(new File("/tmp/hbase-" + userName));
initHbase();
}
public static void initHbase() throws IOException, InterruptedException
{
configuration = HBaseConfiguration.create();
zooKeeperCluster = new MiniZooKeeperCluster(configuration);
zooKeeperCluster.setDefaultClientPort(2181);
zooKeeperCluster.startup(new File("target/zookeepr-" + System.currentTimeMillis()));
hbaseCluster = new LocalHBaseCluster(configuration, 1);
hbaseCluster.startup();
}
@Before
public void initeHTable() throws IOException
{
configuration.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
conn = ConnectionFactory.createConnection(configuration);
HTableDescriptor table = new HTableDescriptor(TableName.valueOf(userTableName));
table.addFamily(new HColumnDescriptor("cf"));
conn.getAdmin().createTable(table);
htable = conn.getTable(TableName.valueOf(userTableName));
}
public static void shutdown() throws IOException
{
hbaseCluster.shutdown();
hbaseCluster.waitOnMaster(0);
zooKeeperCluster.shutdown();
}
@Test
public void testHBaseReconnection() throws IOException, TkException, InterruptedException
{
// do some lookups with the client, and all goes well..
shutdown();
initHbase(); // HERE's I GET THE EXCEPTION
// some more code...
shutdown(); // after test finished, closing the cluster
}
}
我得到的例外:
错误2016-07-13 16:48:03,849 [B.defaultRpcServer.handler = 4,队列= 1,端口= 46727] org.apache.hadoop.hbase.master.MasterRpcServices:区域服务器 localhost,44545,1468417682471报告致命错误:ABORTING地区 server localhost,44545,1468417682471:未处理:区域服务器启动 失败原因:java.io.IOException:区域服务器启动失败 org.apache.hadoop.hbase.regionserver.HRegionServer.convertThrowableToIOE(HRegionServer.java:2827) 在 org.apache.hadoop.hbase.regionserver.HRegionServer.handleReportForDutyResponse(HRegionServer.java:1317) 在 org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:852) 在java.lang.Thread.run(Thread.java:745)引起: org.apache.hadoop.metrics2.MetricsException:度量标准源 RegionServer,sub = Server已经存在!在 org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.newSourceName(DefaultMetricsSystem.java:135) 在 org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.sourceName(DefaultMetricsSystem.java:112) 在 org.apache.hadoop.metrics2.impl.MetricsSystemImpl.register(MetricsSystemImpl.java:228) 在 org.apache.hadoop.hbase.metrics.BaseSourceImpl。(BaseSourceImpl.java:75) 在 org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl。(MetricsRegionServerSourceImpl.java:66) 在 org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl。(MetricsRegionServerSourceImpl.java:58) 在 org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceFactoryImpl.createServer(MetricsRegionServerSourceFactoryImpl.java:46) 在 org.apache.hadoop.hbase.regionserver.MetricsRegionServer。(MetricsRegionServer.java:38) 在 org.apache.hadoop.hbase.regionserver.HRegionServer.handleReportForDutyResponse(HRegionServer.java:1301)
... 2更多