1.项目场景 (idea连接hbase)
先检查hadoop,zookeeper,hbase启动没有
idea连接hbase,创建命名空间,idea一直卡住在日志,没有输出
package com.wf.hbase;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import java.io.IOException;
public class HbaseDDL {
//连接
// public static Connection connection=HbaseConnectUtil.connection;
// 添加静态属性 connection 指向单例连接
public static Connection connection = ConnectUtil.getConnection();
// 1. 获取 admin
public static void createNamespace(String namespace) throws
IOException {
Admin admin = connection.getAdmin();
NamespaceDescriptor.Builder builder =
NamespaceDescriptor.create(namespace);
// 2.2 给命令空间添加需求
builder.addConfiguration("user", "atguigu");
// 2.3 使用 builder 构造出对应的添加完参数的对象 完成创建
// 创建命名空间出现的问题 都属于本方法自身的问题 不应该抛出
try {
admin.createNamespace(builder.build());
} catch (IOException e) {
System.out.println("命令空间已经存在");
e.printStackTrace();
}
// 3. 关闭 admin
admin.close();
}
public static void main(String[] args) throws IOException {
//DDL需要Admin示例来操作
createNamespace("nazhan");
//其他代码
System.out.println("其他代码");
//关闭connection,重量级的
ConnectUtil.close();
}
}
2.解决办法
不要使用resources下面的配置文件hbase-site.xml,虽然源码是读取这个,但是十分的慢
改成手动配置
package com.wf.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import java.io.IOException;
public class ConnectUtil {
private static Connection connection=null;
public static Connection getConnection() {
Configuration conf = new Configuration();
//2.添加配置参数
conf.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");
//3.创建hbase的连接
//默认使用同步连接
try {
connection = ConnectionFactory.createConnection();
} catch (IOException e) {
e.printStackTrace();
}
return connection;
}
public static void close() throws IOException {
if(connection!=null){
connection.close();
}
}
}