#最近在写操作HBase的接口,顺便研究了一下Phoenix,简单的介绍下Phoenix,Phoenix用Java实现,人们通过Phoenix,可以用自己所熟悉的SQL语言来操作HBase,当然它是开源的。
1.如何让HBase支持Phoenix?
将phoenix-1.1.jar复制到HBase集群每个节点的HBase文件夹下的lib目录,然后重启HBase
2.客户端怎么通过Phoenix访问或操作Hbase?
在你自己的Java项目下,引用phoenix-1.1-client.jar
下面给出使用Phoenix基本的代码:
public class HBaseUtility { static { try { Class.forName("com.salesforce.phoenix.jdbc.PhoenixDriver"); } catch (ClassNotFoundException e) { throw new HBaseException(e); } } public static Connection getConnection() { String getDBConnectionString = "jdbc:phoenix:hadoop.master"; // 从配置文件中读取链接字符串 try { Connection _Connection = DriverManager .getConnection(getDBConnectionString); return _Connection; } catch (SQLException e) { throw new HBaseException(e.getMessage(), e); } } }
public class HBaseHelper { static HBaseHelper _HBaseHelper = null; Connection _Connection = null; Statement _Statement = null; PreparedStatement _PreparedStatement = null; String _getExceptionInfoString = ""; String _getDBConnectionString = ""; private HBaseHelper() {} /* * Initialization */ public static HBaseHelper getInstanceBaseHelper() { if (_HBaseHelper == null) synchronized (HBaseHelper.class) { if(_HBaseHelper==null) _HBaseHelper = new HBaseHelper(); } return _HBaseHelper; } /* * Insert , Delete , Update */ public Object ExcuteNonQuery(String sql) { int n = 0; try { _Connection =HBaseUtility.getConnection(); _Statement = _Connection.createStatement(); n = _Statement.executeUpdate(sql); _Connection.commit(); } catch (Exception e) { Dispose(); throw new HBaseException(e.getMessage(),e); } return n; } public Object ExcuteNonQuery(String sql, Object[] args) { int n = 0; try { _Connection =HBaseUtility.getConnection(); _PreparedStatement = _Connection.prepareStatement(sql); for (int i = 0; i < args.length; i++) _PreparedStatement.setObject(i + 1, args[i]); n = _PreparedStatement.executeUpdate(); _Connection.commit(); } catch (SQLException e) { Dispose(); throw new HBaseException(e.getMessage(),e); } return n; } /* * Query */ public ResultSet ExecuteQuery(String sql) { ResultSet rsResultSet = null; try { _Connection =HBaseUtility.getConnection(); _Statement = _Connection.createStatement(); rsResultSet = _Statement.executeQuery(sql); } catch (Exception e) { Dispose(); throw new HBaseException(e.getMessage(),e); } return rsResultSet; } public ResultSet ExceteQuery(String sql, Object[] args) { ResultSet rsResultSet = null; try { _Connection =HBaseUtility.getConnection(); _PreparedStatement = _Connection.prepareStatement(sql); for (int i = 0; i < args.length; i++) _PreparedStatement.setObject(i + 1, args[i]); rsResultSet = _PreparedStatement.executeQuery(); } catch (Exception e) { Dispose(); throw new HBaseException(e.getMessage(),e); } return rsResultSet; } public void Dispose() { try { if (_Connection != null) _Connection.close(); if (_Statement != null) _Statement.close(); } catch (Exception e) { // TODO: handle exception _getExceptionInfoString = e.getMessage(); } } }
以上是我写的一个基本的DBHelper类。因为自己不太会写Java代码,如果有不足之处,请各位指出。
关于Phoenix的详细信息,请参考:
1.http://blog.csdn.net/ricohzhanglong/article/details/8587493
2.https://github.com/forcedotcom/phoenix
待续。。。。