1. 程式人生 > >Hbase的SQL介面之Phoenix使用總結(1)

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基本的程式碼:

[java] view plain
copyprint?
  1. publicclass HBaseUtility {  
  2.     static {  
  3.         try {  
  4.             Class.forName("com.salesforce.phoenix.jdbc.PhoenixDriver");  
  5.         } catch (ClassNotFoundException e) {  
  6.             thrownew HBaseException(e);  
  7.         }  
  8.     }  
  9.     publicstatic Connection getConnection() {  
  10.         String getDBConnectionString = "jdbc:phoenix:hadoop.master"// 從配置檔案中讀取連結字串
  11.         try {  
  12.             Connection _Connection = DriverManager  
  13.                     .getConnection(getDBConnectionString);  
  14.             return _Connection;  
  15.         } catch (SQLException e) {  
  16.             throw
    new HBaseException(e.getMessage(), e);  
  17.         }  
  18.     }  
  19. }  
[java] view plaincopyprint?
  1. publicclass HBaseHelper {  
  2.     static HBaseHelper _HBaseHelper = null;  
  3.     Connection _Connection = null;  
  4.     Statement _Statement = null;  
  5.     PreparedStatement _PreparedStatement = null;  
  6.     String _getExceptionInfoString = "";  
  7.     String _getDBConnectionString = "";  
  8.     private HBaseHelper() {}          
  9.     /* 
  10.      * Initialization 
  11.      */
  12.     publicstatic HBaseHelper getInstanceBaseHelper() {  
  13.         if (_HBaseHelper == null)  
  14.             synchronized (HBaseHelper.class) {  
  15.                 if(_HBaseHelper==null)  
  16.                     _HBaseHelper = new HBaseHelper();  
  17.             }             
  18.         return _HBaseHelper;  
  19.     }  
  20.     /* 
  21.      * Insert , Delete , Update 
  22.      */
  23.     public Object ExcuteNonQuery(String sql) {  
  24.         int n = 0;  
  25.         try {  
  26.             _Connection =HBaseUtility.getConnection();  
  27.             _Statement = _Connection.createStatement();  
  28.             n = _Statement.executeUpdate(sql);  
  29.             _Connection.commit();  
  30.         } catch (Exception e) {  
  31.             Dispose();  
  32.             thrownew HBaseException(e.getMessage(),e);  
  33.         }   
  34.         return n;  
  35.     }  
  36.     public Object ExcuteNonQuery(String sql, Object[] args) {  
  37.         int n = 0;  
  38.         try {  
  39.             _Connection =HBaseUtility.getConnection();  
  40.             _PreparedStatement = _Connection.prepareStatement(sql);  
  41.             for (int i = 0; i < args.length; i++)  
  42.                 _PreparedStatement.setObject(i + 1, args[i]);  
  43.             n = _PreparedStatement.executeUpdate();  
  44.             _Connection.commit();  
  45.         } catch (SQLException e) {  
  46.             Dispose();  
  47.             thrownew HBaseException(e.getMessage(),e);  
  48.         }  
  49.         return n;  
  50.     }  
  51.     /* 
  52.      * Query 
  53.      */
  54.     public ResultSet ExecuteQuery(String sql) {  
  55.         ResultSet rsResultSet = null;  
  56.         try {  
  57.             _Connection =HBaseUtility.getConnection();  
  58.             _Statement = _Connection.createStatement();  
  59.             rsResultSet = _Statement.executeQuery(sql);  
  60.         } catch (Exception e) {  
  61.             Dispose();  
  62.             thrownew HBaseException(e.getMessage(),e);  
  63.         }   
  64.         return rsResultSet;  
  65.     }  
  66.     public ResultSet ExceteQuery(String sql, Object[] args) {  
  67.         ResultSet rsResultSet = null;  
  68.         try {  
  69.             _Connection =HBaseUtility.getConnection();  
  70.             _PreparedStatement = _Connection.prepareStatement(sql);  
  71.             for (int i = 0; i < args.length; i++)  
  72.                 _PreparedStatement.setObject(i + 1, args[i]);  
  73.             rsResultSet = _PreparedStatement.executeQuery();  
  74.         } catch (Exception e) {  
  75.             Dispose();  
  76.             thrownew HBaseException(e.getMessage(),e);  
  77.         }   
  78.         return rsResultSet;  
  79.     }  
  80.     publicvoid Dispose() {  
  81.         try {  
  82.             if (_Connection != null)  
  83.                 _Connection.close();  
  84.             if (_Statement != null)  
  85.                 _Statement.close();  
  86.         } catch (Exception e) {  
  87.             // TODO: handle exception
  88.             _getExceptionInfoString = e.getMessage();  
  89.         }  
  90.     }  
  91. }  

以上是我寫的一個基本的DBHelper類。因為自己不太會寫Java程式碼,如果有不足之處,請各位指出。

關於Phoenix的詳細資訊,請參考:

待續。。。。