CDH5.14叢集下Phoenix4.14.0安裝
痛點&目的:
- Hbase 作為NoSQL資料庫,語法特別難用,為了方便我們使用標準SQL查詢Hbase資料。
- Phoenix支援DDL與DML 增刪改查。
- Impala給外部提供的介面難以提升併發量。
- 減輕Impala的查詢壓力。
官網:
Phoneix安裝:
SIT環境Cloudera5.14.4的hbase 為1.2版本,因此到phoneix官網下載對應版本的tar包並上傳至其中一臺機器,這裡上傳到gateway。
解壓tar包: tar –zxvf apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz –C /opt/app
建軟連線: ln –s /opt/app/apache-phoenix-4.14.0-cdh5.14.2-bin /opt/cloudera/parcels/phoenix
環境變數:
在CM裡新增一個引數: 然後重啟hbase服務
將 hbase 叢集中的配置檔案 hbase-site.xml 拷貝到 Phoenix 的 bin 目錄下,覆蓋原有的配置檔案
將 hdfs 叢集中的配置檔案 core-site.xml、 hdfs-site.xml 拷貝到 Phoenix 的 bin 目錄下
Copy以下三個jar包到CDH叢集每臺機器的 hbase的lib下:
cp $PHOENIX_HOME/phoenix-4.14.0-cdh5.14.2-server.jar /opt/cloudera/parcels/CDH/lib/hbase/lib/
cp $PHOENIX_HOME/phoenix-4.14.0-cdh5.14.2-client.jar /opt/cloudera/parcels/CDH/lib/hbase/lib/
cp $PHOENIX_HOME/phoenix-core-4.14.0-cdh5.14.2.jar /opt/cloudera/parcels/CDH/lib/hbase/lib/
在$PHOENIX_HOME/bin下執行命令進入phoenix shell:
./sqlline.py sithd01,sithd02,sithd03:2181
執行SQL檔案:
導資料檔案至phoenix表:
剛才的語法新建的phoenix表和資料:
Phoenix的表在hbase中可以看到:
與hbase已有的表做對映:
在hbase shell中準備一張表:
在phoenix中建立對映檢視:
Tips:
HBase資料表預設主鍵列名是ROW
表名和列族以及列名需要用雙引號括起來, 因為HBase是區分大小寫的,如果不用雙引號括起來的話Phoenix在建立表的時候會自動將小寫轉換為大寫字母,這樣HBase中會建立另外一張表,大小寫不同。
查詢表名需要用雙引號括起來.
實施同步hbase的最新資料:
建phoenix表則可以與hbase相互操作.
效能對比
Phoenix查詢Hbase VS impala 查詢hive與hbase的對映表
資料量586968。
準備:
--建hive的hbase對映表
CREATE TABLE IF NOT EXISTS dl_noahwm_cbs.hbase_tbl_doc_record (
key string comment "hbase rowkey",
`docrecordid` STRING COMMENT '上傳文件ID',
`doccatcode` STRING COMMENT '文件分類編碼',
`doccatindex` STRING COMMENT '文件索引號',
`docname` STRING COMMENT '文件名稱',
`docextension` STRING COMMENT '文件副檔名',
`docsize` STRING COMMENT '文件大小',
`docdesc` STRING COMMENT '文件說明',
`version` STRING COMMENT '版本號',
`docaccessid` STRING COMMENT 'ECM訪問ID',
`bizgroup` STRING COMMENT '業務所屬板塊',
`isdeleted` STRING COMMENT '邏輯刪除',
`createdbyid` STRING COMMENT '新增人',
`createdtime` STRING COMMENT '新增日期',
`lastmodifiedbyid` STRING COMMENT '最後更新人',
`lastmodifiedtime` STRING COMMENT '最後更新日期',
`src_sys_name` STRING COMMENT 'source system name',
`ins_gmt_ts` STRING COMMENT 'insert timestamp',
`upt_gmt_ts` STRING COMMENT 'update timestamp')
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,record:docrecordid,record:doccatcode,record:doccatindex,record:docname,record:docextension,record:docsize,record:docdesc,record:version,record:docaccessid,record:bizgroup,record:isdeleted,record:createdbyid,record:createdtime,record:lastmodifiedbyid,record:lastmodifiedtime,record:src_sys_name,record:ins_gmt_ts,record:upt_gmt_ts")
TBLPROPERTIES("hbase.table.name" = "hbase_tbl_doc_record");
--插入資料: 需as欄位否則會亂序
insert into table hbase_tbl_doc_record
select docrecordid as key,docrecordid as docrecordid,
doccatcode as doccatcode,
doccatindex as doccatindex,
docname as docname,
docextension as docextension,
docsize as docsize,
docdesc as docdesc,
version as version,
docaccessid as docaccessid,
bizgroup as bizgroup,
isdeleted as isdeleted,
createdbyid as createdbyid,
createdtime as createdtime,
lastmodifiedbyid as lastmodifiedbyid,
lastmodifiedtime as lastmodifiedtime,
src_sys_name as src_sys_name,
ins_gmt_ts as ins_gmt_ts,
upt_gmt_ts as upt_gmt_ts from tbl_doc_record;
--phoenix DDL
create view "hbase_tbl_doc_record"(
"ROW" varchar primary key,
"record"."docrecordid" varchar,
"record"."doccatcode" varchar,
"record"."doccatindex" varchar,
"record"."docname" varchar,
"record"."docextension" varchar,
"record"."docsize" varchar,
"record"."docdesc" varchar,
"record"."version" varchar,
"record"."docaccessid" varchar,
"record"."bizgroup" varchar,
"record"."isdeleted" varchar,
"record"."createdbyid" varchar,
"record"."createdtime" varchar,
"record"."lastmodifiedbyid" varchar,
"record"."lastmodifiedtime" varchar,
"record"."src_sys_name" varchar,
"record"."ins_gmt_ts" varchar,
"record"."upt_gmt_ts" varchar
);
查詢效能對比:
Query1: select count(1) from hbase_tbl_doc_record where docsize>'200000';
Hive: 45.67s
Impala: 15.56s
Phoenix: 2.39s
Query2: select distinct docsize from hbase_tbl_doc_record where docsize>'200000' limit 20;
Hive: 54.67s
Impala: 10.81s
Phoenix: 0.048s
Query3: select count(1) from hbase_tbl_doc_record where docsize like '20%';
Hive:42.25s
Impala: 11.8s
Phoenix: 2.322s
Query4: select * from hbase_tbl_doc_record where createdtime >'2016-01-01 00:00:00' limit 100;
Hive: 31.7s
Impala: 2.17s
Phoenix: 0.214s