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. 获取 adminpublic static void createNamespace(String namespace) throwsIOException {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. 关闭 adminadmin.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();}}
}