官網安全
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掉。對象