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

时间:2016-07-13 13:50:00

标签: java spring maven hadoop hbase

我有一个用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更多

0 个答案:

没有答案