当前位置: 代码迷 >> SQL >> Hbase的SQL接口之Phoenix应用总结(1)
  详细解决方案

Hbase的SQL接口之Phoenix应用总结(1)

热度:142   发布时间:2016-05-05 12:20:12.0
Hbase的SQL接口之Phoenix使用总结(1)


#最近在写操作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


待续。。。。