hbase 安装_HBASE 数据库入门级教程
一、Hbase簡介
1、什么是Hbase
Hbase是一個高可靠性(存儲在hdfs上,有副本機制),高性能,面向列,非關(guān)系型的數(shù)據(jù)庫(類似redis),可伸縮的分布式存儲系統(tǒng)(因為是存儲在hdfs上),hbase的目標是存儲并處理大型的數(shù)據(jù),僅需使用普通的硬件,就能夠處理由成千上萬行和列所組成的大型數(shù)據(jù)。
Hbase是基于hdfs構(gòu)建的分布式存儲框架,但是Hbase在hdfs上實現(xiàn)隨機的讀寫改,解決了hdfs不支持的東西
它的的特點如下:
A、海量存儲
B、列式存儲
這里的列式存儲其實說的是列族存儲,Hbase是根據(jù)列族來存儲數(shù)據(jù)的,列族下面可以有非常多的列,列族在創(chuàng)建表的時候必須指定
Hbase中的列和mysql的列不是一個東西,Hbase的列就是他的數(shù)據(jù)
C、極易擴展
Hbase的擴展性主要體現(xiàn)在兩個方面,一個是基于上層的梳理能力的擴展(RegionServer,相當于datanode,處理讀寫請求),一個是基于存儲的擴展(hdfs)
通過橫向添加RegionServer的機器,進行水平擴展,提升Hbase上層的處理能力,提升Hbase服務(wù)更多的Region的能力。
備注:RegionServer的作用是管理Region)(類似mysql中的表的概念),承接客戶端的讀寫請求的訪問,這個后面會詳細的介紹通過橫向添加datanode的機器,進行存儲層的擴容,提升Bhbase的存儲能力和提升后端存儲的讀寫能力
D、稀疏
稀疏主要是針對于hbase列的靈活性,在列族中,你可以指定任意多的列,在列數(shù)據(jù)為空的情況下,是不會占用存儲空間的,這里和mysql等數(shù)據(jù)庫不一樣,mysql如果每個字段沒有值,那這個字段的值為null,不為空,且會占用存儲空間
2、Hbase的架構(gòu)
Hbase的架構(gòu)示意圖
Hbase由HMaster和HRegionServer組成,HMaster的高可用也依賴于zk,類似于hdfs中的Namenode;
HRegionServer相當于hdfs中的datanode,實際處理讀寫請求的節(jié)點;
a、Zookeeper
HBase通過zk來做Hmaster的高可用,RegionServer的監(jiān)控,元數(shù)據(jù)的入口以及集群配置的維護等工作,具體工作入下
通過zk來保證集群中只有一個master在運行,如果master異常,會通過競爭機制產(chǎn)生新的master提供服務(wù)
通過zk來監(jiān)控RegionServer的狀態(tài),當RegionServer有異常的時候,通過回調(diào)的形式通知master,RegionServer上下線的信息
通過zk存儲元數(shù)據(jù)的統(tǒng)一入口地址;
b、HMaster
為RegionServer分配Region
維護集群的負載均衡,就是分配Region
維護集群的元數(shù)據(jù)信息
發(fā)現(xiàn)失效的Region,并將失效的Region分配到正常的RegionServer上
當RegionServer失效的時候,協(xié)調(diào)對應(yīng)的Hlog和hdfs的block進行數(shù)據(jù)恢復(fù)
C、HRegionServer
HRegionServer直接對接用戶的讀寫請求,是真正的干活的節(jié)點,他的功能概括如下
管理master為其分配的Region
處理來自客戶端的讀寫請求
負責和底層hdfs的交互,存儲數(shù)據(jù)到hdfs中
負責Region變大后的拆分
負責Storefile的合并工作
D、HDFS
Hdfs為hbase提供最終的底層數(shù)據(jù)存儲服務(wù)
提供元數(shù)據(jù)和表數(shù)據(jù)的底層分布式存儲服務(wù)
數(shù)據(jù)的多副本,保證高可靠和高可用
E、Hlog
一個HRegionServer中只有一個Hlog,Hlog相當于hdfs中的edits文件,保存Hbase的修改記錄,當對Hbase寫數(shù)據(jù)的時候,數(shù)據(jù)不是直接寫進磁盤,他會在內(nèi)存中保留一段時間(時間i將數(shù)據(jù)量的閾值可以設(shè)定)。但把數(shù)據(jù)保存在內(nèi)存中可能有更高的概率引起數(shù)據(jù)丟失,為了解決這個問題,數(shù)據(jù)會先寫在一個叫做Hlog的文件中,Hlog存儲在磁盤上,也位于hdfs上,然后在寫入內(nèi)存,所以在系統(tǒng)出現(xiàn)故障或者內(nèi)存丟失的時候,數(shù)據(jù)可以通過這個日志文件進行重建
F、Region
Region相當于mysql中的表,一個HRegionServer可以有多個Region,一個HRegionServer會有多個Region;如果表的數(shù)據(jù)太大,會進行拆分,按照數(shù)據(jù)量平均切分,所有HBase中的一張表會對應(yīng)一個或者多個Region,當表的內(nèi)容很小,一張表就對應(yīng)一個Region,如果表很大的話,則這個Region會切分,切分Region會同時拆分這個Region的所有Store。
G、Store
Store相當于列族,通俗的講就是列的家族,在hbase中,想創(chuàng)建一個列,必須要指定列族,也就是一個列必須屬于某個列族。一個表中可以有多個列族,一個store對應(yīng)一個列族,hbase官方不建議多個列族,一個列族就可以搞上百個列,足夠用了。但是如果一個HRegion被切分的話,是切分列族,所以就算一個HRegion只有一個列表,切分后一個Region也會對應(yīng)多個Store,多個strore會被分配到其他的HRegionServer節(jié)點進行存儲
H、MemStore
MemStore就是列族中的數(shù)據(jù)放在內(nèi)存中,寫數(shù)據(jù)來了,會寫到內(nèi)存中,只要內(nèi)存寫入成功,則就返回。
I、StoreFile
StoreFile,數(shù)據(jù)放在內(nèi)存不安全,而且有大小限制,所以需要把內(nèi)存中的數(shù)據(jù)寫到磁盤中,以Hfile的格式存儲在hdfs上。每次memstore刷一次,形成一個storefile,所以storefile會很多,但是很小,因為內(nèi)存本身就不大,后面storeFile也會合并,但是這個合并也僅僅是一個列族內(nèi)部的StoreFile進行合并,不會跨列族合并的
J、HFile
這是磁盤上保存的原始數(shù)據(jù)的實際的物理文件,是實際的存儲文件,storefile是以Hfile的形式存儲在hdfs中
二、Hbase安裝
1、首先要安裝zk
2、 然后要安裝hdfs
3、 最后在安裝hbase
4、 解壓,修改配置文件
這里重點說下修改配置文件,前面的就不說了,因為我在實際使用過程中使用ambari工具來進行安裝
首先修改hbase-env.sh,配置java的環(huán)境變量
export JAVA_HOME=/usr/lib/jvm/java配置zk
export HBASE_MANAGES_ZK=falseHbase也是強依賴于zookeeper的,是否要啟用自己的zookeeper。如果用則為true,如果用外部的zookeeper,則為false
配置hbase-site.xml
<property> <name>hbase.rootdirname> <value>/apps/hbase/datavalue> property>配置hbase是否啟用集群
<property> <name>hbase.cluster.distributedname> <value>truevalue> property>設(shè)置Hbase的服務(wù)的端口號,不是 web的端口號,web的端口號是16010
<property> <name>hbase.master.info.portname> <value>16010value> property><property> <name>hbase.master.portname> <value>16000value>property>
配置要連接的zk
<property> <name>hbase.zookeeper.quorumname> <value>abdi1,abdi2,abdi3value>property>Zk存儲數(shù)據(jù)的父目錄,主要是為了區(qū)分多個hbase集群
<property> <name>zookeeper.znode.parentname> <value>/hbase-unsecurevalue>property>配置regionservers文件
指定RegionServer的節(jié)點
由于hbase是強依賴于hdfs的,需要拷貝hdfs的配置文件到hbase的conf目錄
我們一般情況會這樣操作,創(chuàng)建一個軟鏈接,鏈接到hdfs的core-site.xml和hdfs-
site.xml中,就是讓hbase知道我要連接哪個hadoop集群
但是在ambari安裝的hbase的配置文件中沒有找到相應(yīng)的配置,但是在hbase啟動的時候有加載hdfs的環(huán)境變量
啟動hbase,可以看到有Hmaster和HRegionServer的java進程
Ambari 的 web 頁面顯示效果如下
注意:Hbase的Master和RegionServer安裝是一樣的,只是看我們是否要啟動 master
Hbase的web頁面,采用16010端口
三、Hbase的shell操作
1、進入hbase shell
[root@n?bin]#?/usr/hdp/current/hbase-client/bin/hbase?shell2、查看當前有哪些表:list
hbase(main):003:0> list TABLE 0 row(s) Took 0.2713 seconds => [] hbase(main):004:0>3、創(chuàng)建表操作。這里的列族是必須要指定的,就是和mysql的列一樣:create "student","info"
hbase(main):004:0> create "student","info" Created table student Took 1.3445 seconds => Hbase::Table - student hbase(main):005:0> hbase(main):006:0> list TABLE student 1 row(s) Took 0.0055 seconds => ["student"]4、插入數(shù)據(jù)。Hbase中的數(shù)據(jù)沒有什么類型,比如字符串,hash等,全部是字節(jié):put
"student","1001","info:name","laowang"
hbase(main):007:0> put "student","1001","info:name","laowang" Took 0.1217 seconds hbase(main):008:0> put "student","1001","info:age","18" Took 0.0038 seconds hbase(main):009:0> put "student","1001","info:sex","male" Took 0.0049 seconds hbase(main):010:0> put "student","1002","info:name","laoluo" Took 0.0036 seconds hbase(main):011:0> put "student","1002","info:age","20" Took 0.0035 seconds5、掃描查看數(shù)據(jù):scan “student”
6、掃描查看數(shù)據(jù),指定起始和截止Rowkey, ?前閉后開
7、 ?查看指定Rowkey
8、 ?查看指定行的指定列
9、 ?更新數(shù)據(jù)
10、 ?查看表結(jié)構(gòu)
重點關(guān)注列族和版本即可,這里的版本是個數(shù)的意思,就一條數(shù)據(jù)存儲幾個版本
11、 ?修改列族的版本信息
多更新幾次數(shù)據(jù)
可以查看到有多個版本,這里的意思查看 ?3 ?個版本的數(shù)據(jù),所以有三條,下面的命令是查看 ?2 ?個版本的數(shù)據(jù),所以有兩條
12、 ?刪除操作
刪除某個 ?Rowkey ?的指定列,可以看到其他列的數(shù)據(jù)還在,刪除還可以指定時間戳,該時間戳之前的數(shù)據(jù)都會被刪除
刪除 ?Rowkey ?對應(yīng)的所有數(shù)據(jù)
13、統(tǒng)計條數(shù)
統(tǒng)計條數(shù), ?Rowkey ?有幾個,條數(shù)就有幾條
image
14、清空表
15、刪除表
16、命名空間(namespace)操作
命令空間,相當于數(shù)據(jù)庫中的 ?database
所有的表都是命名空間的成員,如果不指定,則默認在 ?default ?的命名空間中
命名空間可以設(shè)置權(quán)限,比如定義訪問控制列表,例如創(chuàng)建表,讀取表,刪除,更新操作,權(quán)限用的很少
Shell ?命令查看 ?namespace ?、創(chuàng)建 ?namespace
Hbase ?就是存儲元數(shù)據(jù)的命名空間,是系統(tǒng)自己用的,不能給用戶使用
在指定命名空間下建表
四、Hbase的數(shù)據(jù)結(jié)構(gòu)
1、Rowkey
Rowkey ?是用來檢索記錄的主鍵,訪問 ?Hbase table ?中的行,只有三種方式
A、 ?通過單個 ?Rowkey ?訪問
B、 ?通過 ?Rowkey ?的 ?range ?訪問
C、 ?全表掃描
設(shè)計 ?Rowkey ?非常重要也是 ?Hbase ?里最重要的一門學(xué)問,數(shù)據(jù)會按照 ?Rowkey ?的字典序排序進行存儲,所以設(shè)計 ?Rowkey
要利用這個特性,把經(jīng)常一起讀取的行存儲在一起,學(xué)習(xí)Hbase,Rowkey設(shè)計是學(xué)習(xí)的重點
2、Column Family
列族, ?Hbase ?表中的每個列,都會屬于某個列族,列族是表的結(jié)構(gòu)的一部分,列族在建表的時候必須要指定。列名都是以列族做為前綴。
在創(chuàng)建表的時候需要指定列族,列族可以指定多個
3、Cell
由 ?Rowkey ?, ?column Family ?:column ?, ?version ?唯一確定的單元, ?cell
中的數(shù)據(jù)是沒有類型的,全部都是字節(jié)的形式存儲
4、Time Stamp
時間戳,每個 ?cell ?都保存著同一份數(shù)據(jù)的多個版本,版本通過時間戳來索引。時間戳可以由系統(tǒng)生成,也可以自己指定。每個 ?cell
中,不同版本的數(shù)據(jù)按照時間倒序排列,即最新的數(shù)據(jù)在最前面
通過時間戳不同來確定版本的
五、Hbase的原理
Hbase ?的寫比讀還快
1、讀流程, ?hmaster ?沒有關(guān)系, ?hmaster ?掛掉后,不影響讀流程
a、先獲取 ?meta ?表的位置,也就元數(shù)據(jù)這張表存儲的位置
b、 ?去 ?meta ?表所在位置獲取 ?meta ?表的信息, ?meta ?表存儲的內(nèi)容大致入下
Student 0 ----10000 rs1Student 100001---20000 rs2Stff 0---10000 rs3Stff 10000—200000 rs4c、 ?然后在去對應(yīng)的 ?regionserver ?獲取對應(yīng)的數(shù)據(jù)
d、 ?獲取數(shù)據(jù),先去內(nèi)存中獲取,如果內(nèi)存中沒有,到 ?blockcache ?中獲取,如果 ?blockcash
沒有,則去磁盤獲取,這里為什么先去內(nèi)存獲取數(shù)據(jù)?
e、 ?返回數(shù)據(jù)的時候,先把數(shù)據(jù)寫到 ?blockcache ?中,然后在返回給 ?client
Meta ?表的位置
Zk ?上查看 ?meta ?表的存儲位置
查看meta表的內(nèi)容
2、 ?寫流程,和Hmaster沒有關(guān)系
a、client ?到 ?zk ?獲取 ?meta ?表的位置
b、Zk ?返回 ?meta ?表的位置
c、Zk ?去 ?regionserver ?讀取 ?meta ?表的內(nèi)容
d、Regionserver ?將 ?meta ?表的內(nèi)容返回
e、去對應(yīng)的 ?regionserver ?開始執(zhí)行寫操作,先寫 ?Hlog ?文件,然后寫到 ?memstore ?,成功后,立刻返回,寫入流程完成
因為先寫到內(nèi)存中,那么什么時候會刷到硬盤中呢
a、Regionserver ?的使用的總內(nèi)存達到堆內(nèi)存的 ?40%
b、 ?滿足一個小時的條件,會刷 ?memstore ?到硬盤中
c、單個 ?region ?里的所有的 ?Memstore ?加起來達到 ?128MB ?,則會刷 ?memstore ?到硬盤中
這樣就會有很多小文件刷到 ?hdfs ?中,但是 ?hdfs ?不適合存儲很多的小文件
默認是 ?7 ?天做一次合并
超過 ?7 ?天合并 ?storefile ?文件
超過 ?3 ?個 ?storefile ?文件,會進行合并
這個是合并一個列族的的 ?storefile ?,不同列族的 ?storefile ?文件不會進行合并的
3、高可用
Hmaster是Active ?和 ?standby ?模式
高可用配置
總結(jié)
以上是生活随笔為你收集整理的hbase 安装_HBASE 数据库入门级教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python pdf库_3个Python
- 下一篇: html打印日志_SpringBoot