文章目錄
- 前言
- 一 HBase簡介
- 二 HBase表的資料模型
- 1 rowkey行鍵
- 2 Column Family列族
- 3 Column列
- 4 cell單元格
- 5 Timestamp時間戳
- 三 HBase整體架構
- 1 Client客戶端
- 2 ZooKeeper集群
- 3 HMaster
- 4 HRegionServer
- 5 Region
- 四 HBase安裝
- 1 安裝準備
- 2 安裝步驟
- 3 啟動HBase集群
- 4 停止HBase集群
- 五 HBase shell 命令基本操作
- 1 進入HBase客戶端命令操作界面
- 2 HBase表模型特點
- 3 HBase資料型別
- 4 HBase命令列操作
- 六 HBase的高級shell管理命令
- 1 status
- 2 whoami
- 3 list
- 4 count
- 5 describe
- 6 exists
- 7 is_enabled、is_disabled
- 8 alter
- 9 disable/enable
- 10 drop
- 11 truncate
- 七 Hive與HBase的集成
- 八 HBase客戶端API操作
- 九 phoenix操作HBase
- 1 安裝pheonix
- 1.1 下載pheonix
- 1.2 解壓pheonix
- 1.3 整合phoenix到hbase
- 1.4 使用phoenix SQL命令列
- 1.4.1 創建表
- 1.4.2 編輯并匯入資料
- 1.4.3 查詢資料
- 2 Squirrel-sql 連接Phoenix
- 2.1 下載Squirrel-sql
- 2.2 設定Squirrel-sql 連接Phoenix
- 3 Phoenix 映射Hbase 表
- 3.1 視圖映射
- 3.2 表映射
前言
各位小伙伴大家好,最近因為公司電腦固態硬碟壞掉和大院拆遷被迫搬家的事情,心情一直比較苦悶;在周末搬完家后,想著怎么寫個專題類的文章跟各位小伙伴們一起在知識的海洋中遨游下,好好用知識讓我們自己放松下,最終確認下來干一篇非常全面的HBase文章,大家可以一鍵三連加評論,有相關的意見和想法可以一起討論學習,話不多說,直接開始我們今天的正題,讓我們在HBase海洋中盡情遨游吧:
一 HBase簡介
HBase是一個高可靠性、高性能、面向列、可伸縮的分布式存盤系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存盤集群,
HBase的目標是存盤并處理大型的資料,更具體來說是僅需使用普通的硬體配置,就能夠處理由成千上萬的行和列所組成的大型資料,
HBase是Google Bigtable的開源實作,但是也有很多不同之處,比如:Google Bigtable利用GFS作為其檔案存盤系統,HBase利用Hadoop HDFS作為其檔案存盤系統;Google運行MAPREDUCE來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBASE中的海量資料;Google Bigtable利用Chubby作為協同服務,HBase利用Zookeeper作為對應,它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索資料,僅支持單行事務(可通過hive支持來實作多表join等復雜操作),主要用來存盤非結構化和半結構化的松散資料,
HBase與mysql、oralce、db2、sqlserver等關系型資料庫不同,它是一個NoSQL資料庫(非關系型資料庫)
HBase的表模型與關系型資料庫的表模型不同:
HBase與mysql、oralce、db2、sqlserver等關系型資料庫不同,它是一個NoSQL資料庫(非關系型資料庫)
HBase的表模型與關系型資料庫的表模型不同:
HBase的表沒有固定的欄位定義;
HBase的表中每行存盤的都是一些key-value對;
Hbase的表中有列族的劃分,用戶可以指定將哪些kv插入哪個列族;
Hbase的表在物理存盤上,是按照列族來分割的,不同列族的資料一定存盤在不同的檔案中;
Hbase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重復;
Hbase中的資料,包含行鍵,包含key,包含value,都是byte[ ]型別,hbase不負責為用戶維護資料型別;
HBASE對事務的支持很差;
HBASE相比于其他nosql資料庫(mongodb、redis、cassendra、hazelcast)的特點:
Hbase的表資料存盤在HDFS檔案系統中,所以,hbase具備如下特性:
海量存盤
列式存盤
資料存盤的安全性可靠性極高
支持高并發
存盤容量可以線性擴展
二 HBase表的資料模型

1 rowkey行鍵
table的主鍵,table中的記錄按照rowkey 的字典序進行排序
Row key行鍵可以是任意字串(最大長度是 64KB,實際應用中長度一般為 10-100bytes)
2 Column Family列族
列族或列簇
HBase表中的每個列,都歸屬與某個列族
列族是表的schema的一部分(而列不是),即建表時至少指定一個列族
比如創建一張表,名為user,有兩個列族,分別是info和data,建表陳述句create ‘user’, ‘info’, ‘data’
3 Column列
列肯定是表的某一列族下的一個列,用列族名:列名表示,如info列族下的name列,表示為info:name
屬于某一個ColumnFamily,類似于我們mysql當中創建的具體的列
4 cell單元格
指定row key行鍵、列族、列,可以確定的一個cell單元格
cell中的資料是沒有型別的,全部是以位元組陣列進行存盤

5 Timestamp時間戳
可以對表中的Cell多次賦值,每次賦值操作時的時間戳timestamp,可看成Cell值的版本號version number;即一個Cell可以有多個版本的值
三 HBase整體架構

1 Client客戶端
Client是操作HBase集群的入口;
對于管理類的操作,如表的增、刪、改操縱,Client通過RPC與HMaster通信完成;
對于表資料的讀寫操作,Client通過RPC與RegionServer互動,讀寫資料
Client型別:
HBase shell
Java編程介面
Thrift、Avro、Rest等等
2 ZooKeeper集群
作用:
實作了HMaster的高可用,多HMaster間進行主備選舉;
保存了HBase的元資料資訊meta表,提供了HBase表中region的尋址入口的線索資料;
對HMaster和HRegionServer實作了監控;
3 HMaster
HBase集群也是主從架構,HMaster是主的角色,是老大
主要負責Table表和Region的相關管理作業:
關于Table
管理Client對Table的增刪改的操作
關于Region
在Region分裂后,負責新Region分配到指定的HRegionServer上
管理HRegionServer間的負載均衡,遷移region分布
當HRegionServer宕機后,負責其上的region的遷移
4 HRegionServer
HBase集群中從的角色,是小弟
作用:
回應客戶端的讀寫資料請求
負責管理一系列的Region
切分在運行程序中變大的region
5 Region
HBase集群中分布式存盤的最小單元
一個Region對應一個Table表的部分資料
HBase使用,主要有兩種形式:①命令;②Java編程
四 HBase安裝
HBASE是一個分布式系統
其中有一個管理角色:HMaster(一般2臺,一臺active,一臺backup)
其他的資料節點角色:HRegionServer(很多臺,看資料量)
1 安裝準備
需要先有一個java環境
首先,要有一個HDFS集群,并正常運行;regionserver應該跟hdfs中的datanode在一起
其次,還需要一個zookeeper集群,并正常運行,然后,安裝HBase
角色分配如下:
Hdp01: namenode datanode regionserver hmaster zookeeper
Hdp02: datanode regionserver zookeeper
Hdp03: datanode regionserver zookeeper
2 安裝步驟
解壓HBase安裝包
修改hbase-env.sh
export JAVA_HOME=/root/apps/jdk1.7.0_67
export HBASE_MANAGES_ZK=false
修改hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hdp01:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hdp01:2181,hdp02:2181,hdp03:2181</value>
</property>
</configuration>
修改 regionservers
hdp01
hdp02
hdp03
3 啟動HBase集群
cd /kkb/install/hbase-1.2.0-cdh5.14.2
bin/start-hbase.sh
啟動完后,還可以在集群中找任意一臺機器啟動一個備用的master
bin/hbase-daemon.sh start master
新啟的這個master會處于backup狀態
4 停止HBase集群
cd /kkb/install/hbase-1.2.0-cdh5.14.2
bin/stop-hbase.sh
五 HBase shell 命令基本操作
1 進入HBase客戶端命令操作界面
node01執行以下命令,進入HBase的shell客戶端
cd /kkb/install/hbase-1.2.0-cdh5.14.2
bin/hbase shell

如果出現下圖所示情況,說明HBase未正常啟動

以下為正常啟動頁面,并且有相關行程

① list查看當前資料庫中有哪些表

② 查看HBase集群狀態

③ 查看HBase集群版本

ps:NameSpace操作
HBase系統默認定義了兩個預設的namespace
hbase:系統內建表,包括namespace和meta表
default:用戶建表時未指定namespace的表都創建在此
創建:create_namespace 'lzc'
洗掉:drop_namespace 'lzc'
查看:describe_namespace 'lzc'
列出所有:list_namespace
在namespace下創建表:create 'lzc:user_info','id','name','age'
查看namespace下的表 :list_namespace_tables 'lzc'
2 HBase表模型特點

1.一個表,有表名
2.一個表可以分為多個列族(不同列族的資料會存盤在不同檔案中)
3.表中的每一行有一個“行鍵rowkey”,而且行鍵在表中不能重復
4.表中的每一對kv資料稱作一個cell
5.hbase可以對資料存盤多個歷史版本(歷史版本數量可配置)
6.整張表由于資料量過大,會被橫向切分成若干個region(用rowkey范圍標識),不同region的資料也存盤在不同檔案中

7.hbase會對插入的資料按順序存盤:
要點一:首先會按行鍵排序
要點二:同一行里面的kv會按列族排序,再按k排序
3 HBase資料型別
hbase中只支持byte[]
此處的byte[] 包括了:rowkey,key,value,列族名,表名
4 HBase命令列操作
| 名稱 | 命令運算式 |
|---|---|
| 創建表 | create ‘表名’, ‘列族名1’,‘列族名2’,‘列族名N’ |
| 查看所有表 | list |
| 描述表 | describe ‘表名’ |
| 判斷表存在 | exists ‘表名’ |
| 判斷是否禁用啟用表 | is_enabled ‘表名’ is_disabled ‘表名’ |
| 添加記錄 | put ‘表名’, ‘rowKey’, ‘列族 : 列‘ , ‘值’ |
| 查看記錄rowkey下的所有資料 | get ‘表名’ , ‘rowKey’ |
| 查看表中的記錄總數 | count ‘表名’ |
| 獲取某個列族 | get ‘表名’,‘rowkey’,‘列族’ |
| 獲取某個列族的某個列 | get ‘表名’,‘rowkey’,'列族:列’ |
| 洗掉記錄 | delete ‘表名’ ,‘行名’ , ‘列族:列’ |
| 洗掉整行 | deleteall ‘表名’,‘rowkey’ |
| 洗掉一張表 | 先要屏蔽該表,才能對該表進行洗掉 第一步 disable ‘表名’ ,第二步 drop ‘表名’ |
| 清空表 | truncate ‘表名’ |
| 查看所有記錄 | scan “表名” |
| 查看某個表某個列中所有資料 | scan “表名” , {COLUMNS=>‘列族名:列名’} |
| 更新記錄 | 就是重寫一遍,進行覆寫,hbase沒有修改,都是追加 |
① help 幫助命令
hbase(main):005:0> help

查看具體命令的幫助資訊
hbase(main):006:0> help ‘create’

② create 創建表
創建user表,包含info、data兩個列族
使用create命令
hbase(main):008:0> create ‘user’, ‘info’, ‘data’
0 row(s) in 1.3080 seconds
或者
=> Hbase::Table - user
hbase(main):009:0> create ‘user’,{NAME => ‘info’, VERSIONS => ‘3’},{NAME => ‘data’}
ERROR: Table already exists: user!

③ put 插入資料操作
向表中插入資料
使用put命令
向user表中插入資訊,row key為rk0001,列族info中添加名為name的列,值為zhangsan
HBase(main):011:0> put ‘user’, ‘rk0001’, ‘info:name’, ‘zhangsan’
向user表中插入資訊,row key為rk0001,列族info中添加名為gender的列,值為female
HBase(main):012:0> put ‘user’, ‘rk0001’, ‘info:gender’, ‘female’
向user表中插入資訊,row key為rk0001,列族info中添加名為age的列,值為20
HBase(main):013:0> put ‘user’, ‘rk0001’, ‘info:age’, 20
向user表中插入資訊,row key為rk0001,列族data中添加名為pic的列,值為picture
HBase(main):014:0> put ‘user’, ‘rk0001’, ‘data:pic’, ‘picture’

④ 查詢資料操作一
查詢方式一 使用get命令通過rowkey進行查詢
獲取user表中row key為rk0001的所有資訊(即所有cell的資料)
使用get命令
HBase(main):015:0> get ‘user’, ‘rk0001’

使用get命令查看rowkey下某個列族的資訊
獲取user表中row key為rk0001,info列族的所有資訊
HBase(main):016:0> get ‘user’, ‘rk0001’, ‘info’

使用get命令查看rowkey指定列族指定欄位的值
獲取user表中row key為rk0001,info列族的name、age列的資訊
HBase(main):017:0> get ‘user’, ‘rk0001’, ‘info:name’, ‘info:age’


使用get命令查看rowkey指定多個列族的資訊
獲取user表中row key為rk0001,info、data列族的資訊
HBase(main):018:0> get ‘user’, ‘rk0001’, ‘info’, ‘data’
或者你也可以這樣寫
HBase(main):019:0> get ‘user’, ‘rk0001’, {COLUMN => [‘info’, ‘data’]}
或者你也可以這樣寫,也行
HBase(main):020:0> get ‘user’, ‘rk0001’, {COLUMN => [‘info:name’, ‘data:pic’]}

使用get命令指定rowkey與列值過濾器查詢
獲取user表中row key為rk0001,cell的值為zhangsan的資訊
HBase(main):021:0> get ‘user’, ‘rk0001’, {FILTER => “ValueFilter(=, ‘binary:zhangsan’)”}

使用get命令指定rowkey與列名模糊查詢
獲取user表中row key為rk0001,列標示符中含有a的資訊
HBase(main):022:0> get ‘user’, ‘rk0001’, {FILTER => “QualifierFilter(=,‘substring:a’)”}

繼續插入一批資料
HBase(main):023:0> put ‘user’, ‘rk0002’, ‘info:name’, ‘fanbingbing’
HBase(main):024:0> put ‘user’, ‘rk0002’, ‘info:gender’, ‘female’
HBase(main):025:0> put ‘user’, ‘rk0002’, ‘info:nationality’, ‘中國’
HBase(main):026:0> get ‘user’, ‘rk0002’, {FILTER => “ValueFilter(=, ‘binary:中國’)”}

⑤ 查詢所有行的資料二
查詢user表中的所有資訊
使用scan命令
HBase(main):027:0> scan ‘user’

使用scan命令進行列族查詢
查詢user表中列族為info的資訊

scan ‘user’, {COLUMNS => ‘info’}

//當把某些列的值洗掉后,具體的資料并不會馬上從存盤檔案中洗掉;查詢的時候,不顯示被洗掉的資料;如果想要查詢出來的話,RAW => true
scan ‘user’, {COLUMNS => ‘info’, RAW => true, VERSIONS => 5}

scan ‘user’, {COLUMNS => ‘info’, RAW => true, VERSIONS => 3}

使用scan命令進行多列族查詢
查詢user表中列族為info和data的資訊
scan ‘user’, {COLUMNS => [‘info’, ‘data’]}

使用scan命令指定列族與某個列名查詢
查詢user表中列族為info、列標示符為name的資訊
scan ‘user’, {COLUMNS => ‘info:name’}

查詢info:name列、data:pic列的資料
scan ‘user’, {COLUMNS => [‘info:name’, ‘data:pic’]}

查詢user表中列族為info、列標示符為name的資訊,并且版本最新的5個
scan ‘user’, {COLUMNS => ‘info:name’, VERSIONS => 5}

使用scan命令指定多個列族與條件模糊查詢
查詢user表中列族為info和data且列標示符中含有a字符的資訊
scan ‘user’, {COLUMNS => [‘info’, ‘data’], FILTER => “QualifierFilter(=,‘substring:a’)”}

使用scan命令指定rowkey的范圍查詢
查詢user表中列族為info,rk范圍是[rk0001, rk0003)的資料
scan ‘user’, {COLUMNS => ‘info’, STARTROW => ‘rk0001’, ENDROW => ‘rk0003’}

使用scan命令指定rowkey模糊查詢
查詢user表中row key以rk字符開頭的資料

使用scan命令指定資料版本的范圍查詢
查詢user表中指定范圍的資料(前閉后開)
scan ‘user’, {TIMERANGE => [1392368783980, 1392380169184]}

hbase(main):039:0> scan ‘user’, {TIMERANGE => [1615386788707,1615386809222]}

⑥ 更新資料操作
1 更新資料值
更新操作同插入操作一模一樣,只不過有資料就更新,沒資料就添加
使用put命令
2 更新版本號
將user表的f1列族版本數改為5
HBase(main):040:0> alter ‘user’, NAME => ‘info’, VERSIONS => 5

⑦ 洗掉資料以及洗掉表操作
1 指定rowkey以及列名進行洗掉
洗掉user表row key為rk0001,列標示符為info:name的資料(洗掉一個kv資料)
HBase(main):041:0> delete ‘user’, ‘rk0001’, ‘info:name’

洗掉整行資料
hbase(main):024:0> deleteall 't_user_info','001'
0 row(s) in 0.0090 seconds
hbase(main):025:0> get 't_user_info','001'
COLUMN CELL
0 row(s) in 0.0110 seconds
2 指定rowkey,列名以及版本號進行洗掉
洗掉user表row key為rk0001,列標示符為info:name,timestamp為1392383705316的資料
hbase(main):042:0> delete ‘user’, ‘rk0001’, ‘info:name’, 1392383705316

3 洗掉一個列族
洗掉一個列族:
alter ‘user’, NAME => ‘info’, METHOD => ‘delete’
或 alter ‘user’, ‘delete’ => ‘info’

4 清空表資料
HBase(main):045:0> truncate ‘user’

5 洗掉表
首先需要先讓該表為disable狀態,使用命令:
HBase(main):049:0> disable ‘user’
然后使用drop命令洗掉這個表
HBase(main):050:0> drop ‘user’

(注意:如果直接drop表,會報錯:Drop the named table. Table must first be disabled)

⑧ 統計一張表有多少行資料
HBase(main):046:0> count ‘user’

六 HBase的高級shell管理命令
1 status
例如:顯示服務器狀態
HBase(main):051:0> status ‘node01’

2 whoami
顯示HBase當前用戶,例如:
HBase> whoami

3 list
顯示當前所有的表
HBase > list

4 count
統計指定表的記錄數,例如:
HBase> count ‘user’

為了展示下面功能,然后重新創建user表,并插入資料
創建user表,包含info、data兩個列族
使用create命令
hbase(main):008:0> create 'user', 'info', 'data'
0 row(s) in 1.3080 seconds
向表中插入資料
使用put命令
向user表中插入資訊,row key為rk0001,列族info中添加名為name的列,值為zhangsan
HBase(main):011:0> put 'user', 'rk0001', 'info:name', 'zhangsan'
向user表中插入資訊,row key為rk0001,列族info中添加名為gender的列,值為female
HBase(main):012:0> put 'user', 'rk0001', 'info:gender', 'female'
向user表中插入資訊,row key為rk0001,列族info中添加名為age的列,值為20
HBase(main):013:0> put 'user', 'rk0001', 'info:age', 20
向user表中插入資訊,row key為rk0001,列族data中添加名為pic的列,值為picture
HBase(main):014:0> put 'user', 'rk0001', 'data:pic', 'picture'

5 describe
展示表結構資訊
HBase> describe ‘user’

6 exists
檢查表是否存在,適用于表量特別多的情況

7 is_enabled、is_disabled
檢查表是否啟用或禁用
HBase> is_enabled ‘user’
HBase> is_disabled ‘user’

8 alter
該命令可以改變表和列族的模式,例如:
為當前表增加列族:
HBase> alter ‘user’, NAME => ‘CF2’, VERSIONS => 2

為當前表洗掉列族:
HBase(main):002:0> alter ‘user’, ‘delete’ => ‘CF2’

9 disable/enable
禁用一張表/啟用一張表
HBase> disable ‘user’
HBase> enable ‘user’

10 drop
洗掉一張表,記得在洗掉表之前必須先禁用
11 truncate
禁用表-洗掉表-創建表
七 Hive與HBase的集成
Hive提供了與HBase的集成,使得能夠在HBase表上使?HQL陳述句進?查
詢 插?操作以及進?Join和Union等復雜查詢、同時也可以將hive表中的
資料映射到Hbase中,
版本說明:
? hbase版本:hbase-1.2.0-cdh5.14.2
? hive版本:hive-1.1.0-cdh5.14.2
資料模型:
row,addres,age,username
001,guangzhou,20,alex
002,shenzhen,34,jack
003,beijing,23,lili
創建HBase的資料:
create 'stu20210308','info'
put 'stu20210308','001','info:addres','guangzhou'
put 'stu20210308','001','info:age','20'
put 'stu20210308','001','info:username','alex'
put 'stu20210308','002','info:addres','shenzhen'
put 'stu20210308','002','info:age','34'
put 'stu20210308','002','info:username','jack'
put 'stu20210308','003','info:addres','beijing'
put 'stu20210308','003','info:age','23'
put 'stu20210308','003','info:username','lili'


ps:退出HBASE指令是!quit
創建與HBase集成的Hive的外部表:
CREATE EXTERNAL TABLE stu20210308(
id string,
addres string,
age string,
username string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" =
":key,info:addres,info:age,info:username")
TBLPROPERTIES ("hbase.table.name" = "stu20210308");
hive (test)> CREATE EXTERNAL TABLE stu20210308(
> id string,
> addres string,
> age string,
> username string)
> STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
> WITH SERDEPROPERTIES (
> "hbase.columns.mapping" =
> ":key,info:addres,info:age,info:username")
> TBLPROPERTIES ("hbase.table.name" = "stu20210308");
OK
Time taken: 1.933 seconds
hive (test)> select * from stu20210308;
OK
stu20210308.id stu20210308.addres stu20210308.age stu20210308.username
001 guangzhou 20 alex
002 shenzhen 34 jack
003 beijing 23 lili
Time taken: 0.09 seconds, Fetched: 3 row(s)

ps:具體這里可查看Hive與HBase的集成
Hive表映射HBase實體二
建HBase表
hbase(main):018:0> create ‘user_info’,‘info’
資料插入HBase
info:order_amt
info:order_id
info:user_id
info:user_name

建hive映射表
create external table wedw_tmp.t_user_info
(
id string
,order_id string
,order_amt string
,user_id string
,user_name string
)
STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping"=":key,info:order_id,info:order_amt,info:user_id,info:user_name")
tblproperties("hbase.table.name"="user_info");
查詢映射好的hive表
select * from wedw_tmp.t_user_info;

八 HBase客戶端API操作
表創建
增加資料
洗掉資料
全表掃描
過濾器
匹配
九 phoenix操作HBase
Phoenix,由saleforce.com 開源的一個專案,后又捐給了Apache,它相當于一個Java 中間件,幫助開發者,像
使用jdbc 訪問關系型資料庫一樣,訪問NoSql 資料庫HBase,
Apache Phoenix 與其他Hadoop 產品完全集成,如Spark,Hive,Pig,Flume 和MapReduce,
1 安裝pheonix
1.1 下載pheonix
http://phoenix.apache.org/download.html
注意:下載Phoenix 的時候,請注意對應的版本,其中4.14 版本可以運行在HBase0.98、1.1、1.2、1.3、1.4 上,
下載時也可以直接使用:
wget http://mirrors.shu.edu.cn/apache/phoenix/apache-phoenix-4.14.0-HBase-1.2/bin/apache-phoenix-4.14.0-HBase-1.2-bin.tar.gz
1.2 解壓pheonix
tar -zxvf apache-phoenix-4.14.0-HBase-1.2-bin.tar.gz

1.3 整合phoenix到hbase
查看Phoenix 下的所有的檔案,將phoenix-4.14.0-HBase-1.2-server.jar 拷貝到所有HBase 節點(包括Hmaster以及HregionServer)的lib 目錄下:
重啟HBase:
bin/stop-hbase.sh
bin/start-hbase.sh
1.4 使用phoenix SQL命令列
進入Phoenix 的安裝包,執行:
bin/sqlline.py bigdata1:2181

1.4.1 創建表
在Phoenix 終端下創建us_population 表:
>> CREATE TABLE IF NOT EXISTS us_population (
state CHAR(2) NOT NULL,
city VARCHAR NOT NULL,
population BIGINT
CONSTRAINT my_pk PRIMARY KEY (state, city));
使用!tables 查看創建的表:
>> !tables

1.4.2 編輯并匯入資料
在Phoenix 目錄下創建一個data 目錄,在data 目錄下創建:
vi us_population.csv
NY,New York,8143197
CA,Los Angeles,3844829
IL,Chicago,2842518
TX,Houston,2016582
PA,Philadelphia,1463281
AZ,Phoenix,1461575
TX,San Antonio,1256509
CA,San Diego,1255540
TX,Dallas,1213825
CA,San Jose,912332
執行bin/psql.py data/us_population.csv 匯入資料,
除了匯入資料外,還可以使用Phoenix 的語法插入資料:upsert into us_population values(‘NY’,‘NewYork’,8143197);
1.4.3 查詢資料
方式一:在data 目錄下創建us_population_queries.sql 檔案:
SELECT state as "State",count(city) as "City Count",sum(population) as "Population Sum"
FROM us_population
GROUP BY state
ORDER BY sum(population) DESC;
執行bin/psql.py data/us_population_queries.sql 檢索資料,
方式二:使用命令列終端
bin/sqlline.py bigdata1:2181
>> select * from us_populcation;

2 Squirrel-sql 連接Phoenix
2.1 下載Squirrel-sql
http://www.squirrelsql.org/#installation
2.2 設定Squirrel-sql 連接Phoenix
拷貝Phoenix Client jar【phoenix-4.14.0-HBase-1.2-client.jar】到Squirrel-sql 的lib 目錄;

設定Phoenix 連接的Driver 資訊,其中localhost 為zookeeper 所在的主機地址,填寫一個即可,



3 Phoenix 映射Hbase 表
進入Hbase 命令列終端bin/hbase shell
創建Hbase 表’phoenix’:
– 創建Hbase 表Phoenix,列族info
create ‘phoenix’,‘info’
– 添加資料
put ‘phoenix’, ‘row001’,‘info:name’,‘phoenix’
put ‘phoenix’, ‘row002’,‘info:name’,‘hbase’
映射HBase 表的方式有兩種,一直是視圖映射,一種是表映射,
兩者的區別就是對HBase 的物理表有沒有影響;
洗掉Phoenix 視圖映射不會對Hbase 的表造成影響;
洗掉Phoenix 表映射會將Hbase 的表也洗掉;
非必要情況下一般創建視圖映射,
3.1 視圖映射
在Phoenix 下創建視圖映射HBase 表:
-- 創建視圖關聯映射Hbase 表
create view "phoenix" (
pk VARCHAR primary key,
"info"."name" VARCHAR
);
查詢創建好的Phoenix 視圖:

– 洗掉視圖后,在hbase shell 終端下查看phoenix 依然存在
drop view "phoenix";
3.2 表映射
在Phoenix 下創建表映射HBase 表:
– 創建表關聯映射Hbase 表,4.10 以后Phoenix 優化了列映射,COLUMN_ENCODED_BYTES=0 禁用列映射,
create table "phoenix" (
pk VARCHAR primary key,
"info"."name" VARCHAR
) COLUMN_ENCODED_BYTES = 0;
查詢資料:

結語:
本篇文章介紹到此結束,碼字不易,如果本篇文章對您有所幫助,麻煩動動發財的小手,三連點贊,關注,收藏支持下,有需要溝通交流的,可隨時溝通交流,多謝大家支持!!!



轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298323.html
標籤:其他
