1.簡介
Phoenix將SQL帶回到了NOSQL的世界,其在HBase之上做了一個layer,客戶端通過SQL調用Phoenix,Phoenix在轉化為HBase客戶算API進行訪問HBase,其很多計算也是通過HBase的協處理器的機制來完成的。當前很多場景下使用CDH版本的HBase,可惜Cloudrea公司並沒有官方支持,內有將Phoenix納入發布版本中,所以造成社區的Phoenix並不能很好的和HBase的cdh版本進行繼承,本文通過重新編譯Phoenix的方式將兩者結合。
2.Phoenix版本選取
Phoenix並沒有納入CDH正式版本中。現在只是CDH版本的lab項目,基於這一點如果我們要使用CDH版本的HBase所適配的Phoenix則需要自己去編譯。網上也有很多編譯方法,但是這些方法在修改完畢POM文件中的HBase版本后(指定為CDH的HBase版本)通常編譯不能通過,唯一的方法是修改Phoneix的源代碼,這種在沒有經過完整測試的情況下是很危險的,即使修改完畢代碼后編譯通過對於后續在使用在也是后果自負。
CDH對於Phoneix納入lab項目的官方聲明如下:
http://blog.cloudera.com/blog/2015/05/apache-phoenix-joins-cloudera-labs/
對於Phoneix的工作在如下git中進行,我們可以根據當前自身的HBase版本來選取對應的phoinex版本:
https://github.com/cloudera-labs/phoenix
在我們的生產環境使用的cdh5.4.2版本的HBase,所以在上述git中選取最接近的1.1.0分支,正如上述,雖然是lab版本但是對於“胡亂”修改代碼自行編譯的版本還是靠譜些。
我們也可以在Cloudera的下載目錄中找到Phoneix的版本,但是這些都是parcel格式,這種格式的文件只能通過cloudera manager來安裝!
http://archive.cloudera.com/cloudera-labs/phoenix/parcels/
3.Phoenix的安裝
Phoneix並不是以集群方式或者說起並沒有獨立的runtime環境,主要以客戶端包被繼承與應用客戶端來運行,以服務端包被繼承於HBase服務端來運行,在客戶端將“sql”語句解析成HBase的API來進行訪問,當進行二級索引的操作的時候又使用到協處理機制來處理主表與索引表的記錄等。
安裝方法:
- 將 phoenix-[version]-server.jar 加入到HBase節點的classpath中,通常可以直接放入帶lib目錄下。
- 修改配置文件
-
<property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property><property> <name>hbase.region.server.rpc.scheduler.factory.class</name> <value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value> <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description> </property> <property> <name>hbase.rpc.controllerfactory.class</name> <value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value> <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description> </property><property> <name>hbase.master.loadbalancer.class</name> <value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value> </property> <property> <name>hbase.coprocessor.master.classes</name> <value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value> </property> <property> <name>hbase.coprocessor.regionserver.classes</name> <value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value> </property>
- 重啟集群
- 將 phoenix-[version]-client.jar 繼承到應用程序中.
4. bug fix
此版本在limit上有一個bug需要解決,patch:PHOENIX-2601