hbase 页面访问_HBase
HBase 特點(diǎn)
海量存儲
Hbase 適合存儲 PB 級別的海量數(shù)據(jù),在 PB 級別的數(shù)據(jù)以及采用廉價 PC 存儲的情況下,
能在幾十到百毫秒內(nèi)返回數(shù)據(jù)。這與 Hbase 的極易擴(kuò)展性息息相關(guān)。正式因為 Hbase 良好的
擴(kuò)展性,才為海量數(shù)據(jù)的存儲提供了便利。
2)列式存儲
這里的列式存儲其實說的是列族存儲,Hbase 是根據(jù)列族來存儲數(shù)據(jù)的。列族下面可以
有非常多的列,列族在創(chuàng)建表的時候就必須指定。
3)極易擴(kuò)展
Hbase 的擴(kuò)展性主要體現(xiàn)在兩個方面,一個是基于上層處理能力(RegionServer)的擴(kuò)
展,一個是基于存儲的擴(kuò)展(HDFS)。
通過橫向添加 RegionSever 的機(jī)器,進(jìn)行水平擴(kuò)展,提升 Hbase 上層的處理能力,提升 Hbsae
服務(wù)更多 Region 的能力。
備注:RegionServer 的作用是管理 region、承接業(yè)務(wù)的訪問,這個后面會詳細(xì)的介紹通
過橫向添加 Datanode 的機(jī)器,進(jìn)行存儲層擴(kuò)容,提升 Hbase 的數(shù)據(jù)存儲能力和提升后端存
儲的讀寫能力。
4)高并發(fā)
由于目前大部分使用 Hbase 的架構(gòu),都是采用的廉價 PC,因此單個 IO 的延遲其實并不
小,一般在幾十到上百 ms 之間。這里說的高并發(fā),主要是在并發(fā)的情況下,Hbase 的單個
IO 延遲下降并不多。能獲得高并發(fā)、低延遲的服務(wù)。
5)稀疏
稀疏主要是針對 Hbase 列的靈活性,在列族中,你可以指定任意多的列,在列數(shù)據(jù)為空
的情況下,是不會占用存儲空間的。
HBase 架構(gòu)
從圖中可以看出 Hbase 是由 Client、Zookeeper、Master、HRegionServer、HDFS 等
幾個組件組成,下面來介紹一下幾個組件的相關(guān)功能:
1)Client
Client 包含了訪問 Hbase 的接口,另外 Client 還維護(hù)了對應(yīng)的 cache 來加速 Hbase 的訪
問,比如 cache 的.META.元數(shù)據(jù)的信息。
2)Zookeeper
HBase 通過 Zookeeper 來做 master 的高可用、RegionServer 的監(jiān)控、元數(shù)據(jù)的入口以及
集群配置的維護(hù)等工作。具體工作如下:
通過 Zoopkeeper 來保證集群中只有 1 個 master 在運(yùn)行,如果 master 異常,會通過競爭
機(jī)制產(chǎn)生新的 master 提供服務(wù)
通過 Zoopkeeper 來監(jiān)控 RegionServer 的狀態(tài),當(dāng) RegionSevrer 有異常的時候,通過回
調(diào)的形式通知 Master RegionServer 上下線的信息
通過 Zoopkeeper 存儲元數(shù)據(jù)的統(tǒng)一入口地址
3)Hmaster
master 節(jié)點(diǎn)的主要職責(zé)如下:
為 RegionServer 分配 Region
維護(hù)整個集群的負(fù)載均衡
維護(hù)集群的元數(shù)據(jù)信息
發(fā)現(xiàn)失效的 Region,并將失效的 Region 分配到正常的 RegionServer 上
當(dāng) RegionSever 失效的時候,協(xié)調(diào)對應(yīng) Hlog 的拆分
4)HregionServer
HregionServer 直接對接用戶的讀寫請求,是真正的“干活”的節(jié)點(diǎn)。它的功能概括如下:
管理 master 為其分配的 Region
處理來自客戶端的讀寫請求
負(fù)責(zé)和底層 HDFS 的交互,存儲數(shù)據(jù)到 HDFS
負(fù)責(zé) Region 變大以后的拆分
負(fù)責(zé) Storefile 的合并工作
5)HDFS
HDFS 為 Hbase 提供最終的底層數(shù)據(jù)存儲服務(wù),同時為 HBase 提供高可用(Hlog 存儲在
HDFS)的支持,具體功能概括如下:
提供元數(shù)據(jù)和表數(shù)據(jù)的底層分布式存儲服務(wù)
數(shù)據(jù)多副本,保證的高可靠和高可用性
1.3 HBase 中的角色
1.3.1 HMaster
功能
1.監(jiān)控 RegionServer
2.處理 RegionServer 故障轉(zhuǎn)移
3.處理元數(shù)據(jù)的變更
4.處理 region 的分配或轉(zhuǎn)移
5.在空閑時間進(jìn)行數(shù)據(jù)的負(fù)載均衡
6.通過 Zookeeper 發(fā)布自己的位置給客戶端
1.3.2 RegionServer
功能
1.負(fù)責(zé)存儲 HBase 的實際數(shù)據(jù)
2.處理分配給它的 Region
3.刷新緩存到 HDFS
4.維護(hù) Hlog
5.執(zhí)行壓縮
6.負(fù)責(zé)處理 Region 分片
1.2.3 其他組件
1.Write-Ahead logs
HBase 的修改記錄,當(dāng)對 HBase 讀寫數(shù)據(jù)的時候,數(shù)據(jù)不是直接寫進(jìn)磁盤,它會在內(nèi)
存中保留一段時間(時間以及數(shù)據(jù)量閾值可以設(shè)定)。但把數(shù)據(jù)保存在內(nèi)存中可能有更高的
概率引起數(shù)據(jù)丟失,為了解決這個問題,數(shù)據(jù)會先寫在一個叫做 Write-Ahead logfile 的文件
中,然后再寫入內(nèi)存中。所以在系統(tǒng)出現(xiàn)故障的時候,數(shù)據(jù)可以通過這個日志文件重建。
2.Region
Hbase 表的分片,HBase 表會根據(jù) RowKey 值被切分成不同的 region 存儲在 RegionServer
中,在一個 RegionServer 中可以有多個不同的 region。
3.Store
HFile 存儲在 Store 中,一個 Store 對應(yīng) HBase 表中的一個列族。
4.MemStore
顧名思義,就是內(nèi)存存儲,位于內(nèi)存中,用來保存當(dāng)前的數(shù)據(jù)操作,所以當(dāng)數(shù)據(jù)保存在
WAL 中之后,RegsionServer 會在內(nèi)存中存儲鍵值對。
5.HFile
這是在磁盤上保存原始數(shù)據(jù)的實際的物理文件,是實際的存儲文件。StoreFile 是以 Hfile
的形式存儲在 HDFS 的。
第 2 章 HBase 安裝
2.1 Zookeeper 正常部署
首先保證 Zookeeper 集群的正常部署,并啟動之:
[atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start
[atguigu@hadoop103 zookeeper-3.4.10]$ bin/zkServer.sh start
[atguigu@hadoop104 zookeeper-3.4.10]$ bin/zkServer.sh start
2.2 Hadoop 正常部署
Hadoop 集群的正常部署并啟動:
[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
2.3 HBase 的解壓
解壓 HBase 到指定目錄:
[atguigu@hadoop102 software]$ tar -zxvf hbase-1.3.1-bin.tar.gz -C
/opt/module
2.4 HBase 的配置文件
修改 HBase 對應(yīng)的配置文件。
1)hbase-env.sh 修改內(nèi)容:
export JAVA_HOME=/opt/module/jdk1.8.0_144
export HBASE_MANAGES_ZK=false
2)hbase-site.xml 修改內(nèi)容:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98 后的新變動,之前版本沒有.port,默認(rèn)端口為 60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</
value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/module/zookeeper-3.4.10/zkData</value>
</property>
</configuration>
3)regionservers:
hadoop102
hadoop103
hadoop104
4)軟連接 hadoop 配置文件到 hbase:
[atguigu@hadoop102 module]$ ln -s
/opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
/opt/module/hbase/conf/core-site.xml
[atguigu@hadoop102 module]$ ln -s
/opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
/opt/module/hbase/conf/hdfs-site.xml
2.5 HBase 遠(yuǎn)程發(fā)送到其他集群
[atguigu@hadoop102 module]$ xsync hbase/
2.6 HBase 服務(wù)的啟動
1.啟動方式 1
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start master
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start regionserver
提示:如果集群之間的節(jié)點(diǎn)時間不同步,會導(dǎo)致 regionserver 無法啟動,拋出
ClockOutOfSyncException 異常。
修復(fù)提示:
a、同步時間服務(wù)
屬性:hbase.master.maxclockskew 設(shè)置更大的值
<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
<description>Time difference of regionserver from
master</description>
</property>
2.啟動方式 2
[atguigu@hadoop102 hbase]$ bin/start-hbase.sh
對應(yīng)的停止服務(wù):
[atguigu@hadoop102 hbase]$ bin/stop-hbase.sh
2.7 查看 HBase 頁面
啟動成功后,可以通過“host:port”的方式來訪問 HBase 管理頁面,例如:
http://hadoop102:16010
第 3 章 HBase Shell 操作
3.1 基本操作
1.進(jìn)入 HBase 客戶端命令行
[atguigu@hadoop102 hbase]$ bin/hbase shell
2.查看幫助命令
hbase(main):001:0> help
3.查看當(dāng)前數(shù)據(jù)庫中有哪些表
hbase(main):002:0> list
3.2 表的操作
1.創(chuàng)建表
hbase(main):002:0> create 'student','info'
2.插入數(shù)據(jù)到表
hbase(main):003:0> put 'student','1001','info:sex','male'
hbase(main):004:0> put 'student','1001','info:age','18'
hbase(main):005:0> put 'student','1002','info:name','Janna'
hbase(main):006:0> put 'student','1002','info:sex','female'
hbase(main):007:0> put 'student','1002','info:age','20'
3.掃描查看表數(shù)據(jù)
hbase(main):008:0> scan 'student'
hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW =>
'1001'}
hbase(main):010:0> scan 'student',{STARTROW => '1001'}
4.查看表結(jié)構(gòu)
hbase(main):011:0> describe ‘student’
5.更新指定字段的數(shù)據(jù)
hbase(main):012:0> put 'student','1001','info:name','Nick'
hbase(main):013:0> put 'student','1001','info:age','100'
6.查看“指定行”或“指定列族:列”的數(shù)據(jù)
hbase(main):014:0> get 'student','1001'
hbase(main):015:0> get 'student','1001','info:name'
7.統(tǒng)計表數(shù)據(jù)行數(shù)
hbase(main):021:0> count 'student'
8.刪除數(shù)據(jù)
刪除某 rowkey 的全部數(shù)據(jù):
hbase(main):016:0> deleteall 'student','1001'
刪除某 rowkey 的某一列數(shù)據(jù):
hbase(main):017:0> delete 'student','1002','info:sex'
9.清空表數(shù)據(jù)
hbase(main):018:0> truncate 'student'
提示:清空表的操作順序為先 disable,然后再 truncate。
10.刪除表
首先需要先讓該表為 disable 狀態(tài):
hbase(main):019:0> disable 'student'
然后才能 drop 這個表:
hbase(main):020:0> drop 'student'
提示:如果直接 drop 表,會報錯:ERROR: Table student is enabled. Disable it first.
11.變更表信息
將 info 列族中的數(shù)據(jù)存放 3 個版本:
hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}
hbase(main):022:0> get
'student','1001',{COLUMN=>'info:name',VERSIONS=>3}
第 4 章 HBase 數(shù)據(jù)結(jié)構(gòu)
4.1 RowKey
與 nosql 數(shù)據(jù)庫們一樣,RowKey 是用來檢索記錄的主鍵。訪問 HBASE table 中的行,只
有三種方式:
1.通過單個 RowKey 訪問
2.通過 RowKey 的 range(正則)
3.全表掃描
RowKey 行鍵 (RowKey)可以是任意字符串(最大長度是 64KB,實際應(yīng)用中長度一般為
10-100bytes),在 HBASE 內(nèi)部,RowKey 保存為字節(jié)數(shù)組。存儲時,數(shù)據(jù)按照 RowKey 的字
典序(byte order)排序存儲。設(shè)計 RowKey 時,要充分排序存儲這個特性,將經(jīng)常一起讀取的
行存儲放到一起。(位置相關(guān)性)
4.2 Column Family
列族:HBASE 表中的每個列,都?xì)w屬于某個列族。列族是表的 schema 的一部 分(而列
不是),必須在使用表之前定義。列名都以列族作為前綴。例如 courses:history,courses:math
都屬于 courses 這個列族。
4.3 Cell
由{rowkey, column Family:columu, version} 唯一確定的單元。cell 中的數(shù)據(jù)是沒有類型
的,全部是字節(jié)碼形式存貯。
關(guān)鍵字:無類型、字節(jié)碼
4.4 Time Stamp
HBASE 中通過 rowkey 和 columns 確定的為一個存貯單元稱為 cell。每個 cell 都保存 著
同一份數(shù)據(jù)的多個版本。版本通過時間戳來索引。時間戳的類型是 64 位整型。時間戳可以
由 HBASE(在數(shù)據(jù)寫入時自動 )賦值,此時時間戳是精確到毫秒 的當(dāng)前系統(tǒng)時間。時間戳
也可以由客戶顯式賦值。如果應(yīng)用程序要避免數(shù)據(jù)版 本沖突,就必須自己生成具有唯一性
的時間戳。每個 cell 中,不同版本的數(shù)據(jù)按照時間倒序排序,即最新的數(shù)據(jù)排在最前面。
為了避免數(shù)據(jù)存在過多版本造成的的管理 (包括存貯和索引)負(fù)擔(dān),HBASE 提供 了兩
種數(shù)據(jù)版本回收方式。一是保存數(shù)據(jù)的最后 n 個版本,二是保存最近一段 時間內(nèi)的版本(比
如最近七天)。用戶可以針對每個列族進(jìn)行設(shè)置。
4.5 命名空間
命名空間的結(jié)構(gòu):
1) Table:表,所有的表都是命名空間的成員,即表必屬于某個命名空間,如果沒有指定,
則在 default 默認(rèn)的命名空間中。
2) RegionServer group:一個命名空間包含了默認(rèn)的 RegionServer Group。
3) Permission:權(quán)限,命名空間能夠讓我們來定義訪問控制列表 ACL(Access Control List)。
例如,創(chuàng)建表,讀取表,刪除,更新等等操作。
4) Quota:限額,可以強(qiáng)制一個命名空間可包含的 region 的數(shù)量。
HBase 原理
5.1 讀流程
HBase 讀數(shù)據(jù)流程如圖 3 所示
1)Client 先訪問 zookeeper,從 meta 表讀取 region 的位置,然后讀取 meta 表中的數(shù)據(jù)。meta
中又存儲了用戶表的 region 信息;
2)根據(jù) namespace、表名和 rowkey 在 meta 表中找到對應(yīng)的 region 信息;
3)找到這個 region 對應(yīng)的 regionserver;
4)查找對應(yīng)的 region;
5)先從 MemStore 找數(shù)據(jù),如果沒有,再到 BlockCache 里面讀;
6)BlockCache 還沒有,再到 StoreFile 上讀(為了讀取的效率);
7)如果是從 StoreFile 里面讀取的數(shù)據(jù),不是直接返回給客戶端,而是先寫入 BlockCache,
再返回給客戶端。
5.2 寫流程
Hbase 寫流程如圖 2 所示
1)Client 向 HregionServer 發(fā)送寫請求;
2)HregionServer 將數(shù)據(jù)寫到 HLog(write ahead log)。為了數(shù)據(jù)的持久化和恢復(fù);
3)HregionServer 將數(shù)據(jù)寫到內(nèi)存(MemStore);
4)反饋 Client 寫成功。
5.3 數(shù)據(jù) Flush 過程
1)當(dāng) MemStore 數(shù)據(jù)達(dá)到閾值(默認(rèn)是 128M,老版本是 64M),將數(shù)據(jù)刷到硬盤,將內(nèi)存
中的數(shù)據(jù)刪除,同時刪除 HLog 中的歷史數(shù)據(jù);
2)并將數(shù)據(jù)存儲到 HDFS 中;
3)在 HLog 中做標(biāo)記點(diǎn)。
5.4 數(shù)據(jù)合并過程
1)當(dāng)數(shù)據(jù)塊達(dá)到 4 塊,Hmaster 觸發(fā)合并操作,Region 將數(shù)據(jù)塊加載到本地,進(jìn)行合并;
2)當(dāng)合并的數(shù)據(jù)超過 256M,進(jìn)行拆分,將拆分后的 Region 分配給不同的 HregionServer
管理;
3)當(dāng) HregionServer 宕機(jī)后,將 HregionServer 上的 hlog 拆分,然后分配給不同的 HregionServer
加載,修改.META.;
4)注意:HLog 會同步到 HDFS。
總結(jié)
以上是生活随笔為你收集整理的hbase 页面访问_HBase的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20款雷凌驻车制动不可用,无法启动?
- 下一篇: 商标45类分类表明细表_2019版注册商