在Java客户端中关闭后,HBase本地群集无法启动
我有一个用Java7编译的Maven项目,它使用SpringIOC来测试hbase客户机jar中的使用 依赖项如下所示:在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
<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
}
}