Phoenix安裝配置
1.簡介
Phoenix最先是saleforce的一個開源項目,後來成爲Apache基金的頂級項目node
Phoenix是構建在HBase上的一個SQL層,能讓咱們用標準的JDBC APIs而不是HBase客戶端APIs來建立表、插入數據和對HBase數據進行查詢git
所以Phoenix跟HBase是離不開的,Phoenix的安裝也是基於HBase的。在安裝Phoenix以前,請確保集羣上已經安裝了Hadoop集羣跟HBase集羣github
本集羣上已部署CHD5.5.1版本的Hadooop(2.6.0)和HBase(1.0.0)web
各節點規劃以下:sql
192.168.20.100 node-20-100 hdfs-master1 nn1 jn1 hmaster1 192.168.20.101 node-20-101 hdfs-master2 nn2 zk1 jn2 hmaster2 Phoenix 192.168.20.102 node-20-102 hdfs-slave1 dn1 zk2 jn3 hregionserver1 192.168.20.103 node-20-103 hdfs-slave2 dn2 zk3 jn4 hregionserver2 192.168.20.104 node-20-104 hdfs-slave3 dn3 zk4 jn5 hregionserver3 192.168.20.105 node-20-105 hdfs-slave4 dn4 zk5 hregionserver4
注意:Cloudera官方並不支持Phoenix,也就是說從Phoenix官網下的預編譯的包在CDH安裝的HBase上根本不能運行,Phoenix官網對此也沒有任何說明!!!剛開始按照Phoenix官網給出的步驟安裝完Phoenix後運行報錯,幸虧有StackOverflow,才找到了緣由,而且找到解決方案。連接以下:
http://stackoverflow.com/questions/31849454/using-phoenix-with-cloudera-hbase-installed-from-repoapache
解決方案:
須要本身從Phoenix官網下載跟HBase版本對應的Phoenix版本(Phoenix 4.x版本均支持HBase 1.0.0)的源碼來編譯,獲得編譯後的兩個相關jar包。具體安裝步驟以下maven
2.安裝配置
Phoenix最新版本是4.8,4.x均支持HBase 1.0.0,這裏選用Phoenix 4.6.0版本oop
2.1下載並解壓
從Phoenix官網下載預編譯的phoenix-4.6.0-HBase-1.0-bin.tar.gz
url
Phoenix客戶端所在的節點最好安裝有ZooKeeper,方便後續操做.net
這裏選擇192.168.20.101
節點做爲Phoenix客戶端
- 切換到/opt目錄下:
$ cd /opt
- wget:
$ wget 'http://archive.apache.org/dist/phoenix/phoenix-4.6.0-HBase-1.0/bin/phoenix-4.6.0-HBase-1.0-bin.tar.gz'
- 解壓:
$ tar -xzvf phoenix-4.6.0-HBase-1.0-bin.tar.gz
- 創建軟連接:
$ ln -s phoenix-4.6.0-HBase-1.0-bin phoenix
2.2編譯源碼
若是從Phoenix官網下載4.6.0的源碼來編譯,須要本身修改pom.xml文件,比較麻煩。Github上已經有人把修改過pom.xml文件的源碼上傳了,連接以下:
https://github.com/chiastic-security/phoenix-for-cloudera/tree/4.6-HBase-1.0-cdh5.5
下載該連接的源碼,用maven進行編譯
- 進入
phoenix-for-cloudera-4.6-HBase-1.0-cdh5.5
目錄 - $
mvn package -DskipTests
編譯成功後顯示以下:
2.3替換
將編譯後``phoenix-for-cloudera-4.6-HBase-1.0-cdh5.5/phoenix-assembly/target目錄下的
phoenix-4.6.0-cdh5.5.1-client.jar和
phoenix-4.6.0-cdh5.5.1-server.jar分別替換
/opt/phoenix目錄下的
phoenix-4.6.0-HBase-1.0-client.jar和
phoenix-4.6.0-HBase-1.0-server.jar`
2.4將相關jar拷貝到HBase的lib目錄下
拷貝phoenix-4.6.0-cdh5.5.1-server.jar
到集羣上每一個HBase的lib目錄下
$ cp phoenix-4.6.0-cdh5.5.1-server.jar /usr/lib/hbase/lib $ scp phoenix-4.6.0-cdh5.5.1-server.jar node-20-100:/usr/lib/hbase/lib/phoenix-4.6.0-cdh5.5.1-server.jar $ scp phoenix-4.6.0-cdh5.5.1-server.jar node-20-102:/usr/lib/hbase/lib/phoenix-4.6.0-cdh5.5.1-server.jar $ scp phoenix-4.6.0-cdh5.5.1-server.jar node-20-103:/usr/lib/hbase/lib/phoenix-4.6.0-cdh5.5.1-server.jar $ scp phoenix-4.6.0-cdh5.5.1-server.jar node-20-104:/usr/lib/hbase/lib/phoenix-4.6.0-cdh5.5.1-server.jar $ scp phoenix-4.6.0-cdh5.5.1-server.jar node-20-105:/usr/lib/hbase/lib/phoenix-4.6.0-cdh5.5.1-server.jar
2.5配置Phoenix客戶端的CLASSPATH
將phoenix-4.6.0-cdh5.5.1-client.jar
添加到Phoenix客戶端的CLASSPATH中,這裏是192.168.20.101節點
在/etc/profile.d目錄下新建phoenix.sh
export CLASSPATH=.:/opt/phoenix/phoenix-4.6.0-cdh5.5.1-client.jar
$ source phoenix.sh
2.6配置hbase-site.xml
- Master的hbase-site.xml
<property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </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.rpc.timeout</name> <value>300000</value> </property>
- Region Server的hbase-site.xml
<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 usesseparate 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 RPCScheduler that uses separate queues for index and metadataupdates</description> </property> <property> <name>hbase.coprocessor.regionserver.classes</name> <value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value> </property> <property> <name>hbase.rpc.timeout</name> <value>300000</value> </property>
至此,Phoenix安裝配置完畢
3.驗證是否可用
3.1進入CLI
切換到/opt/phoenix/bin目錄下
$ chmod 777 sqlline.py $ chmod 777 psql.py
運行
$ ./sqlline.py localhost
結果以下:
說明Phoenix安裝成功
3.2在終端執行SQL腳本
運行
$ ./sqlline.py localhost ../examples/STOCK_SYMBOL.sql
報錯:
解決:
將examples/STOCK_SYMBOL.sql
裏第一行-- creates stock table with single row
刪掉
從新運行:
3.3加載數據
運行:
$ psql.py localhost ../examples/web_stat.sql ../examples/web_stat.csv ../examples/web_stat_queries.sql
結果:
歡迎關注公衆號: FullStackPlan 獲取更多幹貨哦~