全部产品

链接管理

连接字符串

HBase增强版的链接字符串格式定义如下:

  1. jdbc:hbase:url=http://<host>:<port>;serialization=<PROTOBUF>

创建JDBC链接

创建JDBC链接需要如下3个信息:

  • 链接字符串
  • 用户名和密码
  1. private static void initJDBCConnection() throws Exception {
  2. String url = "jdbc:hbase:url=http://host:30060;serialization=PROTOBUF";
  3. // 如果您依赖的是Phoenix的轻客户端,请采用以下连接串
  4. // String url = "jdbc:phoenix:thin:url=http://host:port;serialization=PROTOBUF";
  5. String user = "root";
  6. String password = "root";
  7. Class.forName(HBaseDriver.class.getName()); //注册HBaseDriver
  8. // 如果您依赖的是Phoenix的轻客户端,请采用以下Driver
  9. // Class.forName(org.apache.phoenix.queryserver.client.Driver.class.getName());
  10. Connection pconn = DriverManager.getConnection(url, user, password);
  11. }

多线程与连接池

HBase增强版的JDBC链接不是多线程安全的,不能在多线程共享。因此通常采用连接池技术来获得高吞吐和高并发能力,同时又能很好的控制宝贵的链接资源。可以使用Spring、Mybatis等框架来直接获得连接池的能力,也可以自己实现简易的连接池,或者为每个线程准备一个链接。

下面的java代码展示了如何使用ThreadLocal来实现线程专属的链接:

  1. private static ThreadLocal<Connection> resources = new ThreadLocal<Connection>();
  2. private static List<Connection> connectionList = new ArrayList<Connection>();
  3. public static Connection getConnection() throws Exception {
  4. Connection pconn = resources.get();
  5. if (pconn == null) {
  6. pconn = DriverManager.getConnection(url, userName, password);
  7. resources.set(pconn);
  8. synchronized (connectionList) {
  9. connectionList.add(pconn);
  10. }
  11. }
  12. return pconn;
  13. }
  14. public static void close() throws Exception {
  15. for (Connection pconn : connectionList) {
  16. if (pconn != null) {
  17. pconn.close();
  18. }
  19. }
  20. }