1、hbase概述
10年的蓬安網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整蓬安建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“蓬安網(wǎng)站設(shè)計(jì)”,“蓬安網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
1.1 hbase是什么
hbase是基于hdfs進(jìn)行數(shù)據(jù)的分布式存儲(chǔ),具有高可靠、高性能、列存儲(chǔ)、可伸縮、實(shí)時(shí)讀寫的NoSql數(shù)據(jù)庫。
hbase可以存儲(chǔ)海量的數(shù)據(jù),并且后期查詢性能很高,可以實(shí)現(xiàn)上億條數(shù)據(jù)的查詢秒級(jí)返回結(jié)果。
1.2 hbase表的特性
1、大
2、無模式
3、面向列
4、稀疏
5、數(shù)據(jù)的多版本
6、數(shù)據(jù)類型單一
1.3 hbase表的邏輯視圖
2、hbase的集群結(jié)構(gòu)
1、client
2、zookeeper
客戶端操作hbase表數(shù)據(jù)需要一個(gè)zk集群
作用
1、zk保存了hbase集群的元數(shù)據(jù)信息
存儲(chǔ) Hbase 的 schema,包括有哪些 table,每個(gè) table 有哪些 column family
2、zk保存所有hbase表的尋址入口
后期通過客戶端接口去操作hbase數(shù)據(jù)的時(shí)候,需要連接上zk集群
存貯所有 Region 的尋址入口----root 表在哪臺(tái)服務(wù)器上3、通過引入了zk之后,實(shí)現(xiàn)了整個(gè)hbase集群高可用
4、zk保存了HMaster和HRegionServer它們的注冊(cè)和心跳信息
后期哪一個(gè)HRegionServer掛掉之后,zk也會(huì)感知到,然后把這個(gè)信息通知給老大HMaster
3、HMaster
它是整個(gè)hbase集群老大
作用
1、它接受客戶端創(chuàng)建表、刪除表的請(qǐng)求。處理 schema 更新請(qǐng)求
2、它會(huì)給HRegionServer分配對(duì)應(yīng)的region,進(jìn)行數(shù)據(jù)的管理
3、它會(huì)把掛掉的HRegionServer所管理的region重新分配給其他的活著的HRegionServer
4、它會(huì)實(shí)現(xiàn)HRegionServer負(fù)載均衡,避免某一個(gè)HRegionServer管理的region過多。
4、HRegionServer
它是整合hbase集群的小弟
作用
1、負(fù)責(zé)管理HMaster老大給它分配的region
2、它會(huì)接受到客戶端的讀寫請(qǐng)求
3、它會(huì)把在運(yùn)行過程中,變得過大的region數(shù)據(jù)進(jìn)行切分
5、Region
它是整個(gè)hbase表中分布式存儲(chǔ)的最小單元
它的數(shù)據(jù)是基于hdfs進(jìn)行存儲(chǔ)
3、hbase集群安裝部署
前提條件
1、下載對(duì)應(yīng)的安裝包
2、規(guī)劃安裝目錄
3、上傳安裝包到服務(wù)器中
4、解壓安裝包到指定的規(guī)劃目錄
5、重命名解壓目錄
6、修改配置文件
需要把hadoop安裝目錄下/etc/hadoop文件夾中
需要把以上2個(gè)hadoop的配置文件拷貝到hbase安裝目錄下的conf文件夾中
1、vim hbase-env.sh
#配置java環(huán)境變量 export JAVA_HOME=/export/servers/jdk #指定hbase集群由外部的zk集群去管理,不在使用自帶的zk集群 export HBASE_MANAGES_ZK=false
2、vim hbase-site.xml
hbase.rootdir hdfs://node1:9000/hbase hbase.cluster.distributed true hbase.zookeeper.quorum node1:2181,node2:2181,node3:2181
3、vim regionservers
#指定哪些節(jié)點(diǎn)是HRegionServer node2 node3
4、vim backup-masters
#指定哪些節(jié)點(diǎn)是備用的Hmaster node2
7、配置hbase環(huán)境變量
vim /etc/profile
export HBASE_HOME=/export/servers/hbase export PATH=$PATH:$HBASE_HOME/bin
8、分發(fā)hbase目錄和環(huán)境變量
scp -r hbase node2:/export/servers scp -r hbase node3:/export/servers scp /etc/profile node2:/etc scp /etc/profile node3:/etc
9、讓所有hbase節(jié)點(diǎn)的環(huán)境變量生效
在所有節(jié)點(diǎn)上執(zhí)行
4、hbase集群的啟動(dòng)和停止
1、啟動(dòng)hbase集群
先啟動(dòng)zk和hadoop集群
然后通過hbase/bin
start-hbase.sh
2、停止hbase集群
通過hbase/bin
stop-hbase.sh
hbase集群web管理界面
1、啟動(dòng)好hbase集群之后
訪問地址
HMaster主機(jī)名:16010
5、hbase shell 命令行操作
hbase/bin/hbase shell 進(jìn)入到hbase shell客戶端命令操作
1、創(chuàng)建一個(gè)表
create 't_user_info','base_info','extra_info' create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
2、查看有哪些表
list 類似于mysql表中sql:show tables
3、查看表的描述信息
describe 't_user_info'
4、修改表的屬性
#修改列族的最大版本數(shù) alter 't_user_info', NAME => 'base_info', VERSIONS => 3
5、添加數(shù)據(jù)到表中
put 't_user_info','00001','base_info:name','zhangsan' put 't_user_info','00001','base_info:age','30' put 't_user_info','00001','base_info:address','beijing' put 't_user_info','00001','extra_info:school','shanghai' put 't_user_info','00002','base_info:name','lisi'
6、查詢表的數(shù)據(jù)
//按照條件查詢 get 't_user_info','00001' get 't_user_info','00001', {COLUMN => 'base_info'} get 't_user_info','00001', {COLUMN => 'base_info:name'} get 't_user_info','00001',{TIMERANGE => [1544243300660,1544243362660]} get 't_user_info','00001',{COLUMN => 'base_info:age',VERSIONS =>3} //全表查詢 scan 't_user_info'
7、刪除數(shù)據(jù)
delete 't_user_info','00001','base_info:name' deleteall 't_user_info','00001'
8、刪除表
disable 't_user_info' drop 't_user_info'
6、hbase的內(nèi)部原理
7、hbase的尋址機(jī)制
尋找 RegionServer
-ROOT-表
.META.表
聯(lián)系 regionserver 查詢目標(biāo)數(shù)據(jù)
regionserver 定位到目標(biāo)數(shù)據(jù)所在的 region,發(fā)出查詢請(qǐng)求
region 先在 memstore 中查找,命中則返回
如果在 memstore 中找不到,則在 storefile 中掃描(可能會(huì)掃描到很多的 storefile----bloomfilter 布隆過濾器)布隆過濾器可以快速的返回查詢的rowkey是否在這個(gè)storeFile中, 但也有誤差, 如果返回沒有,則一定沒有,如果返回有, 則可能沒有
8、Hbase高級(jí)應(yīng)用
建表
BLOOMFILTER 默認(rèn)是 Row 布隆過濾器
VSRSIONS 默認(rèn)是 1 數(shù)據(jù)版本
COMPRESSION 默認(rèn)值是 NONE 壓縮
disable_all ‘toplist.*' disable_all 支持正則表達(dá)式,并列出當(dāng)前匹配的表 drop_all也相同
hbase 表預(yù)分區(qū)----手動(dòng)分區(qū)
一種可以加快批量寫入速度的方法是通過預(yù)先創(chuàng)建一些空的 regions,這樣當(dāng)數(shù)據(jù)寫入 HBase時(shí),會(huì)按照 region 分區(qū)情況,在集群內(nèi)做數(shù)據(jù)的負(fù)載均衡。減少數(shù)據(jù)達(dá)到 storefile 大小的時(shí)候自動(dòng)分區(qū)的
時(shí)間消耗,并且還有以一個(gè)優(yōu)勢,就是合理設(shè)計(jì) rowkey 能讓各個(gè) region 的并發(fā)請(qǐng)求平均分配(趨于均勻) 使 IO 效率達(dá)到最高,
行鍵設(shè)計(jì)
列族盡量少, 一般2-3個(gè)
rowkey
盡量減少行鍵和列族的大小在 HBase 中,value 永遠(yuǎn)和它的 key 一起傳輸?shù)?br />HFile中每個(gè)cell都會(huì)存儲(chǔ)rowkey, rowkey過大會(huì)影響存儲(chǔ)效率
MemStore 將緩存部分?jǐn)?shù)據(jù)到內(nèi)存,如果 rowkey 字段過長,內(nèi)存的有效利用率就會(huì)降低,系統(tǒng)不能緩存更多的數(shù)據(jù),這樣會(huì)降低檢索效率。
建議將 rowkey 的高位作為散列字段,由程序隨機(jī)生成,低位放時(shí)間字段,這樣將提高數(shù)據(jù)均衡分布在每個(gè) RegionServer,以實(shí)現(xiàn)負(fù)載均衡的幾率。( 盾 )
rowkey矛盾
熱點(diǎn)解決
可以用 Long.Max_Value - timestamp 追加到 key 的末尾,例如 [key][reverse_timestamp] ,[key] 的最新值可以通過 scan [key]獲得[key]的第一條記錄,因?yàn)?HBase 中 rowkey 是有序的,第一條記錄是最后錄入的數(shù)據(jù)。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接