大數(shù)據(jù)單機部署-phoenix

版本:

apache-phoenix-4.14.2-HBase-1.4-bin.tar.gz (選擇對應的hbase)

1.安裝phoenix

1).解壓犹赖,放到 /usr/local/phoenix

2).配置環(huán)境變量

sudo vim /etc/profile
export PHOENIX_HOME=/usr/local/phoenix
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin

source /etc/profile

3).將 Phoenix 目錄下的 phoenix-core-4.14.2-HBase-1.4.jar、phoenix-4.14.2-HBase-1.4-server.jar 拷貝到 hbase 集群各個節(jié)點 hbase 安裝目錄 lib 中(單機就是一個hbase了)审洞。

4).將 hbase 集群中的配置文件 hbase-site.xml 拷貝到 Phoenix 的 bin 目錄下雄卷,覆蓋原有的配置文件更鲁。
5).將 hdfs 集群中的配置文件 core-site.xml漫试、 hdfs-site.xml 拷貝到 Phoenix 的 bin 目錄下

2.啟動;

命令格式:./sqlline.sh <hbase.zookeeper.quorum>
我的ubuntu 的hostname是master

./sqlline.sh  master

3.測試

在客戶端執(zhí)行 !tables 命令搁骑,羅列所有表到客戶端界面

!tables

4.phoenix圖形查詢工具squirrel

在windows電腦上下載squirrel,修改hosts文件
添加ubuntu 的ip以及名字

修改C:\Windows\System32\drivers\etc\hosts
如果hosts文件沒有權限先復制到桌面修改再粘貼覆蓋回去
增加行如下:

#phoenix主機的ip以及hostname
192.168.1.21    master

5.在 Spark 運行環(huán)境中添加 Phoenix 依賴

spark-env.sh 添加如下代碼:

添加 Phoenix 依賴

for file in $(find /opt/hbase-1.2.4/lib |grep  phoenix)
do
    SPARK_DIST_CLASSPATH="$SPARK_DIST_CLASSPATH:$file"
done
export SPARK_DIST_CLASSPATH

這樣每次啟動 spark 任務都會將 phoenix 的 jar 包添加到 classpath 了

6.語法規(guī)則 ------------------------------

如果報錯記得在表名加雙引號

1). 插入數(shù)據(jù)
在 Phoenix 中是沒有 Insert 語句的屋讶,取而代之的是 Upsert 語句冰寻。Upsert 有兩種用法须教,
分別是:upsert into 和 upsert select

upsert into:
類似于 insert into 的語句皿渗,旨在單條插入外部數(shù)據(jù)
upsert into tb values('ak','hhh',222)
upsert into tb(stat,city,num) values('ak','hhh',222)

upsert select:
類似于 Hive 中的 insert select 語句,旨在批量插入其他表的數(shù)據(jù)轻腺。
upsert into tb1 (state,city,population) select state,city,population from tb2 where population < 40000;
upsert into tb1 select state,city,population from tb2 where population > 40000;
upsert into tb1 select * from tb2 where population > 40000;
注意:在 phoenix 中插入語句并不會像傳統(tǒng)數(shù)據(jù)庫一樣存在重復數(shù)據(jù)乐疆。
因為 Phoenix 是構建在 HBase 之上的,也就是必須存在一個主鍵贬养。
后面插入的會覆蓋前面的挤土,但是時間戳不一樣。

2). 刪除數(shù)據(jù)
delete from tb; 清空表中所有記錄误算,Phoenix 中不能使用 truncate table tb仰美;
delete from tb where city = 'kenai';
drop table tb; 刪除表
delete from system.catalog where table_name = 'int_s6a';
drop table if exists tb;
drop table my_schema.tb;
drop table my_schema.tb cascade; 用于刪除表的同時刪除基于該表的所有視圖迷殿。

3). 修改數(shù)據(jù)
由于 HBase 的主鍵設計,相同 rowkey 的內容可以直接覆蓋咖杂,這就變相的更新了數(shù)據(jù)庆寺。
所以 Phoenix 的更新操作仍舊是 upsert into 和 upsert select
upsert into us_population (state,city,population) values('ak','juneau',40711);

4). 查詢數(shù)據(jù)
union all, group by诉字, order by懦尝, limit 都支持
select * from test limit 1000;
select * from test limit 1000 offset 100;
select full_name from sales_person where ranking >= 5.0 union all select reviewer_name from customer_review where score >= 8.0

5). 在 Phoenix 中是沒有 Database 的概念的,所有的表都在同一個命名空間壤圃。但支持多個命名空間
設置為 true陵霉,創(chuàng)建的帶有 schema 的表將映射到一個 namespace

<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>

6). 創(chuàng)建表
A.SALT_BUCKETS (加鹽)
加鹽 Salting 能夠通過預分區(qū) (pre-splitting) 數(shù)據(jù)到多個 region 中來顯著提升讀寫性能。
本質是在 hbase 中伍绳,rowkey 的 byte 數(shù)組的第一個字節(jié)位置設定一個系統(tǒng)生成的 byte 值踊挠,
這個 byte 值是由主鍵生成 rowkey 的 byte 數(shù)組做一個哈希算法,計算得來的墨叛。
Salting 之后可以把數(shù)據(jù)分布到不同的 region 上止毕,這樣有利于 phoenix 并發(fā)的讀寫操作。

SALT_BUCKETS 的值范圍在(1 ~ 256):
create table test(host varchar not null primary key, description varchar)salt_buckets=16;

upsert into test (host,description) values ('192.168.0.1','s1');
upsert into test (host,description) values ('192.168.0.2','s2');
upsert into test (host,description) values ('192.168.0.3','s3');

salted table 可以自動在每一個 rowkey 前面加上一個字節(jié)漠趁,這樣對于一段連續(xù)的 rowkeys扁凛,它們在表中實際存儲時,就被自動地分布到不同的 region 中去了闯传。
當指定要讀寫該段區(qū)間內的數(shù)據(jù)時谨朝,也就避免了讀寫操作都集中在同一個 region 上。
簡而言之甥绿,如果我們用 Phoenix 創(chuàng)建了一個 saltedtable字币,那么向該表中寫入數(shù)據(jù)時,
原始的 rowkey 的前面會被自動地加上一個 byte(不同的 rowkey 會被分配不同的 byte)共缕,使得連續(xù)的 rowkeys 也能被均勻地分布到多個 regions洗出。

B.Pre-split(預分區(qū))
Salting 能夠自動的設置表預分區(qū),但是你得去控制表是如何分區(qū)的图谷,
所以在建 phoenix 表時翩活,可以精確的指定要根據(jù)什么值來做預分區(qū),比如:
create table test (host varchar not null primary key, description varchar) split on ('cs','eu','na');

C. 使用多列族
列族包含相關的數(shù)據(jù)都在獨立的文件中便贵,在 Phoenix 設置多個列族可以提高查詢性能菠镇。
創(chuàng)建兩個列族:
create table test (
mykey varchar not null primary key,
a.col1 varchar,
a.col2 varchar,
b.col3 varchar
);
upsert into test values ('key1','a1','b1','c1');
upsert into test values ('key2','a2','b2','c2');

D. 使用壓縮
create table test (host varchar not null primary key, description varchar) compression='snappy';

7). 創(chuàng)建視圖,刪除視圖
create view "my_hbase_table"( k varchar primary key, "v" unsigned_long) default_column_family='a';
create view my_view ( new_col smallint ) as select * from my_table where k = 100;
create view my_view_on_view as select * from my_view where new_col > 70
create view v1 as select * from test where description in ('s1','s2','s3')

drop view my_view
drop view if exists my_schema.my_view
drop view if exists my_schema.my_view cascade

8). 創(chuàng)建二級索引
支持可變數(shù)據(jù)和不可變數(shù)據(jù)(數(shù)據(jù)插入后不再更新)上建立二級索引
create index my_idx on sales.opportunity(last_updated_date desc)
create index my_idx on log.event(created_date desc) include (name, payload) salt_buckets=10
create index if not exists my_comp_idx on server_metrics ( gc_time desc, created_date desc )
data_block_encoding='none',versions=?,max_filesize=2000000 split on (?, ?, ?)
create index my_idx on sales.opportunity(upper(contact_name))
create index test_index on test (host) include (description);

刪除索引:
drop index my_idx on sales.opportunity
drop index if exists my_idx on server_metrics
drop index if exists xdgl_acct_fee_index on xdgl_acct_fee

默認是可變表承璃,手動創(chuàng)建不可變表
create table hao2 (k varchar primary key, v varchar) immutable_rows=true;
alter table HAO2 set IMMUTABLE_ROWS = false; 修改為可變
alter index index1 on tb rebuild; 索引重建是把索引表清空后重新裝配數(shù)據(jù)利耍。

Global Indexing 多讀少寫,適合條件較少
create index my_index on items(price);
調用方法:

  1. 強制索引
    select /*+ index(items my_index) */ * from items where price=0.8824734;
    drop index my_name on usertable;
  1. 覆蓋索引 Covered Indexes,需要 include 包含需要返回數(shù)據(jù)結果的列隘梨。
    create index index1_c on hao1 (age) include (name); name 已經被緩存在這張索引表里了程癌。
    對于 select name from hao1 where age=2,查詢效率和速度最快
    select * from hao1 where age =2轴猎,其他列不在索引表內席楚,會全表掃描

Local Indexing 寫多讀少,不是索引字段索引表也會被使用税稼,索引數(shù)據(jù)和真實數(shù)據(jù)存儲在同一臺機器上(
create local index index3_l_name on hao1 (name);

異步創(chuàng)建索引烦秩,創(chuàng)建的索引表中不會有數(shù)據(jù),單獨使用命令行工具來執(zhí)行數(shù)據(jù)的創(chuàng)建
create index index1_c on hao1 (age) include(name) async;
hbase org.apache.phoenix.mapreduce.index.indextool
--schema my_schema --data-table my_table --index-table async_idx
--output-path async_idx_hfiles

9). 與現(xiàn)有的 HBase 表關聯(lián)
首先創(chuàng)建一張 HBase 表郎仆,再創(chuàng)建的 Phoenix 表只祠,表名必須和 HBase 表名一致即可。
create 'stu' ,'cf1','cf2'
put 'stu', 'key1','cf1:name','luozhao'
put 'stu', 'key1','cf1:sex','man'
put 'stu', 'key1','cf2:age','24'
put 'stu', 'key1','cf2:adress','cqupt'

create table "stu" (
id VARCHAR NOT NULL PRIMARY KEY ,
"cf1"."name" VARCHAR ,
"cf1"."sex" VARCHAR ,
"cf2"."age" VARCHAR ,
"cf2"."adress" VARCHAR );
upsert into "stu"(id,"cf1"."name","cf1"."sex","cf2"."age","cf2"."adress") values('key6','zkk','man','111','Beijing');

select * from "stu"; 會發(fā)現(xiàn)兩張表是數(shù)據(jù)同步的扰肌。
這里查詢表名需要用雙引號括起來抛寝,強制不轉換為大寫。
這里一定要注意的是表名和列族以及列名需要用雙引號括起來曙旭,因為 HBase 是區(qū)分大小寫的盗舰,
如果不用雙引號括起來的話 Phoenix 在創(chuàng)建表的時候會自動將小寫轉換為大寫字母

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市桂躏,隨后出現(xiàn)的幾起案子钻趋,更是在濱河造成了極大的恐慌,老刑警劉巖剂习,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛮位,死亡現(xiàn)場離奇詭異,居然都是意外死亡鳞绕,警方通過查閱死者的電腦和手機失仁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來们何,“玉大人萄焦,你說我怎么就攤上這事≡┲瘢” “怎么了拂封?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贴见。 經常有香客問我烘苹,道長躲株,這世上最難降的妖魔是什么片部? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上档悠,老公的妹妹穿的比我還像新娘廊鸥。我一直安慰自己,他們只是感情好辖所,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布惰说。 她就那樣靜靜地躺著,像睡著了一般缘回。 火紅的嫁衣襯著肌膚如雪吆视。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天酥宴,我揣著相機與錄音啦吧,去河邊找鬼。 笑死拙寡,一個胖子當著我的面吹牛授滓,可吹牛的內容都是我干的。 我是一名探鬼主播肆糕,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼般堆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诚啃?” 一聲冷哼從身側響起淮摔,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎始赎,沒想到半個月后噩咪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡极阅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年胃碾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筋搏。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡仆百,死狀恐怖,靈堂內的尸體忽然破棺而出奔脐,到底是詐尸還是另有隱情俄周,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布髓迎,位于F島的核電站峦朗,受9級特大地震影響,放射性物質發(fā)生泄漏排龄。R本人自食惡果不足惜波势,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尺铣,春花似錦拴曲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至店溢,卻和暖如春叁熔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背床牧。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工者疤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叠赦。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓驹马,卻偏偏與公主長得像,于是被迫代替她去往敵國和親除秀。 傳聞我的和親對象是個殘疾皇子糯累,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容