官网安全
hbase有两种得到connection的方法,分别是以下两种: 线程
Connection connection = ConnectionFactory.createConnection(conf); Connection connection = HConnectionManager.createConnection(conf);
这两种方法还有重载方法,在重载方法里能够传递两个参数,第二个参数ExecutorService,这个参数能够覆盖掉默认的线程池,具体的使用方式以下:code
public class HbaseConnectionGenerator { private HbaseConnectionGenerator() {//私有化构造方法,让用户不能new这个类的对象 } private static HConnection connection = null;//要建立的connection public static synchronized HConnection getConnection() { if (null == connection){ if (null == connection) {//空的时候建立,不为空就直接返回;典型的单例模式 Configuration conf = HBaseConfiguration.create(); String zkHost = "mpc5:2181,mpc6:2181,mpc7:2181"; conf.set("hbase.zookeeper.quorum", zkHost); ExecutorService pool = Executors.newFixedThreadPool(10);//创建一个数量为10的线程池 try { connection = HConnectionManager.createConnection(conf, pool);//用线程池建立connection } catch (IOException e) { e.printStackTrace(); } } } return connection; } }
一个应用(进程)对应着一个connection,每一个应用里的线程经过调用coonection的getTable方法从connection维护的线程池里得到table实例,按官方的说法,这种方式得到的table是线程安全的。每次table读写以后应该把table close掉,整个进程结束的时候才把connection close掉。对象