在Java客户端中关闭后,HBase本地群集无法启动

在Java客户端中关闭后,HBase本地群集无法启动,java,spring,maven,hadoop,hbase,Java,Spring,Maven,Hadoop,Hbase,我有一个用Java7编译的Maven项目,它使用SpringIOC来测试hbase客户机jar中的使用 依赖项如下所示: <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.0.0-cdh5.5.4</version> </dependenc

我有一个用Java7编译的Maven项目,它使用SpringIOC来测试hbase客户机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>
我得到的例外情况是:

错误2016-07-13 16:48:03849 [B.defaultRpcServer.handler=4,队列=1,端口=46727] org.apache.hadoop.hbase.master.MasterRpcServices:区域服务器 本地主机445451468417682471报告了一个致命错误:正在中止区域 服务器本地主机,44545146848417682471:未处理:区域服务器启动 失败原因:java.io.IOException:区域服务器在启动时失败 org.apache.hadoop.hbase.regionserver.HRegionServer.convertshowabletoioe(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=服务器已存在!在 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.MetricSystemImpl.register(metricSystemImpl.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)

。。。还有两个


为什么要运行HBase群集两次?HBase即使在测试中也不常见。为什么不只运行一次HBase,测试所有您想要的并最终关闭它?因为测试将检查我的重新连接机制是否工作,即使群集变得不可用,然后再次可用..而且我的客户端不会失去连接。为什么要运行两次HBase群集?HBase即使在测试中也不常见。为什么不只运行一次HBase,测试所有您想要的,并最终关闭它?因为测试将检查我的重新连接机制是否工作,即使群集变得不可用,然后再次可用..而且我的客户端不会失去连接。
@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
    }
}