主頁(yè) > 知識(shí)庫(kù) > Hbase入門(mén)詳解

Hbase入門(mén)詳解

熱門(mén)標(biāo)簽:智能電話(huà)機(jī)器人坐席 申請(qǐng)400電話(huà)價(jià)格多少 廈門(mén)營(yíng)銷(xiāo)外呼系統(tǒng)平臺(tái) 安陽(yáng)ai電銷(xiāo)機(jī)器人軟件 外呼系統(tǒng)不彈窗 涪陵商都400電話(huà)開(kāi)通辦理 云會(huì)外呼系統(tǒng) 柳州市機(jī)器人外呼系統(tǒng)報(bào)價(jià) 外呼系統(tǒng)的經(jīng)營(yíng)范圍

1、hbase概述

1.1 hbase是什么

hbase是基于hdfs進(jìn)行數(shù)據(jù)的分布式存儲(chǔ),具有高可靠、高性能、列存儲(chǔ)、可伸縮、實(shí)時(shí)讀寫(xiě)的nosql數(shù)據(jù)庫(kù)。

hbase可以存儲(chǔ)海量的數(shù)據(jù),并且后期查詢(xún)性能很高,可以實(shí)現(xiàn)上億條數(shù)據(jù)的查詢(xún)秒級(jí)返回結(jié)果。

1.2 hbase表的特性

1、大

  • hbase表可以存儲(chǔ)海量的數(shù)據(jù)。

2、無(wú)模式

  • mysql表中每一行列的字段是相同,而hbase表中每一行數(shù)據(jù)可以有截然不同的列。

3、面向列

  • hbase表中的數(shù)據(jù)可以有很多個(gè)列,后期它就是按照不同的列去存儲(chǔ)數(shù)據(jù),寫(xiě)入到不同的文件中。
  • 面向列族進(jìn)行存儲(chǔ)數(shù)據(jù)。

4、稀疏

  • 在hbase表中為null的列并不占用實(shí)際的存儲(chǔ)空間。

5、數(shù)據(jù)的多版本

  • 對(duì)于hbase表中的數(shù)據(jù)在進(jìn)行數(shù)據(jù)更新的時(shí)候,它并沒(méi)有把之前的結(jié)果數(shù)據(jù)直接刪除掉,而是保留數(shù)據(jù)的多個(gè)版本,每一個(gè)數(shù)據(jù)都給一個(gè)版本號(hào),這個(gè)版本號(hào)就是按照我們插入數(shù)據(jù)的時(shí)間戳去確定。

6、數(shù)據(jù)類(lèi)型單一

  • 無(wú)論是什么類(lèi)型的數(shù)據(jù),最后都被轉(zhuǎn)換成了字節(jié)數(shù)組存儲(chǔ)在hbase表中

1.3 hbase表的邏輯視圖

2、hbase的集群結(jié)構(gòu)

1、client

  • 提供了對(duì)hbase表操作的一些java接口。
  • client 維護(hù)著一些 cache 來(lái)加快對(duì) hbase 的訪(fǎng)問(wèn)
  • client 會(huì)將查詢(xún)過(guò)的位置信息保存緩存起來(lái),緩存不會(huì)主動(dòng)失效

2、zookeeper

客戶(hù)端操作hbase表數(shù)據(jù)需要一個(gè)zk集群

作用

1、zk保存了hbase集群的元數(shù)據(jù)信息

存儲(chǔ) Hbase 的 schema,包括有哪些 table,每個(gè) table 有哪些 column family

2、zk保存所有hbase表的尋址入口

后期通過(guò)客戶(hù)端接口去操作hbase數(shù)據(jù)的時(shí)候,需要連接上zk集群
存貯所有 Region 的尋址入口----root 表在哪臺(tái)服務(wù)器上

3、通過(guò)引入了zk之后,實(shí)現(xiàn)了整個(gè)hbase集群高可用

4、zk保存了HMaster和HRegionServer它們的注冊(cè)和心跳信息

后期哪一個(gè)HRegionServer掛掉之后,zk也會(huì)感知到,然后把這個(gè)信息通知給老大HMaster

3、HMaster

它是整個(gè)hbase集群老大

作用

1、它接受客戶(hù)端創(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過(guò)多。

4、HRegionServer

它是整合hbase集群的小弟

作用

1、負(fù)責(zé)管理HMaster老大給它分配的region

2、它會(huì)接受到客戶(hù)端的讀寫(xiě)請(qǐng)求

3、它會(huì)把在運(yùn)行過(guò)程中,變得過(guò)大的region數(shù)據(jù)進(jìn)行切分

5、Region

它是整個(gè)hbase表中分布式存儲(chǔ)的最小單元

它的數(shù)據(jù)是基于hdfs進(jìn)行存儲(chǔ)

3、hbase集群安裝部署

前提條件

  • 先搭建好zk、hadoop集群

1、下載對(duì)應(yīng)的安裝包

  • http://archive.apache.org/dist/hbase/1.2.1/hbase-1.2.1-bin.tar.gz
  • hbase-1.2.1-bin.tar.gz

2、規(guī)劃安裝目錄

  • /export/servers

3、上傳安裝包到服務(wù)器中

4、解壓安裝包到指定的規(guī)劃目錄

  • tar -zxvf hbase-1.2.1-bin.tar.gz -C /export/servers

5、重命名解壓目錄

  • mv hbase-1.2.1 hbase

6、修改配置文件

需要把hadoop安裝目錄下/etc/hadoop文件夾中

  • core-site.xml
  • hdfs-site.xml

需要把以上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在HDFS上存儲(chǔ)的路徑 -->
    <property>
        <name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase</value>
    </property>
        <!-- 指定hbase是分布式的 -->
    <property>
<name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
        <!-- 指定zk的地址,多個(gè)用“,”分割 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
    </property>

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í)行

  • source /etc/profile

4、hbase集群的啟動(dòng)和停止

1、啟動(dòng)hbase集群

先啟動(dòng)zk和hadoop集群

然后通過(guò)hbase/bin

start-hbase.sh

  • 你在哪里啟動(dòng)這個(gè)腳本,首先在當(dāng)前機(jī)器啟動(dòng)一個(gè)HMaster進(jìn)程(它就是活著的HMaster)
  • 通過(guò)regionservers文件在對(duì)應(yīng)的節(jié)點(diǎn)來(lái)啟動(dòng)HRegionServer
  • 通過(guò)backup-masters文件在對(duì)應(yīng)的節(jié)點(diǎn)來(lái)啟動(dòng)備用的HMaster

2、停止hbase集群

通過(guò)hbase/bin

stop-hbase.sh

hbase集群web管理界面

1、啟動(dòng)好hbase集群之后

訪(fǎng)問(wèn)地址

HMaster主機(jī)名:16010

5、hbase shell 命令行操作

hbase/bin/hbase shell 進(jìn)入到hbase shell客戶(hù)端命令操作

1、創(chuàng)建一個(gè)表

create 't_user_info','base_info','extra_info'
create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}

2、查看有哪些表

list
類(lèi)似于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、查詢(xún)表的數(shù)據(jù)

//按照條件查詢(xún)
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}
//全表查詢(xún)
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)部原理

  • Table 中的所有行都按照 row key 的字典序排列
  • Table 在行的方向上分割為多個(gè) Hregion
  • region 按大小分割的(默認(rèn) 10G),每個(gè)表一開(kāi)始只有一個(gè) region , region 不斷增大,當(dāng)增大到一個(gè)閥值的時(shí)候,Hregion 就會(huì)等分會(huì)兩個(gè)新的 Hregion。當(dāng) table中的行不斷增多,就會(huì)有越來(lái)越多Hregion。
  • Hregion 是 Hbase 中分布式存儲(chǔ)和負(fù)載均衡的最小單元。最小單元就表示不同的 Hregion可以分布在不同的 HRegion server 上。
  • HRegion 雖然是負(fù)載均衡的最小單元,但并不是物理存儲(chǔ)的最小單元。HRegion 由一個(gè)或者多個(gè) Store 組成,每個(gè) store 保存一個(gè) column family。每個(gè) Strore 又由一個(gè) memStore 和 0 至多個(gè) StoreFile 組成。寫(xiě)操作先寫(xiě)入 memstore,當(dāng) memstore 中的數(shù)據(jù)量達(dá)到某個(gè)閾值(默認(rèn)128M或1個(gè)小時(shí)),Hregionserver 啟動(dòng)flashcache 進(jìn)程寫(xiě)入 storefile,每次寫(xiě)入形成單獨(dú)一個(gè) storefile。
  • 當(dāng) storefile 的個(gè)數(shù)超過(guò)一定閾值后(默認(rèn)參數(shù) hbase.hstore.blockingStoreFiles=10),多個(gè)storeFile會(huì)進(jìn)行合并,當(dāng)該region的所有store的storefile大小之和,即所有store的大小超過(guò) hbase.hregion.max.filesize=10G 時(shí),這個(gè) region 會(huì)被拆分會(huì)把當(dāng)前的 region分割成兩個(gè),并由 Hmaster 分配給相應(yīng)的 region 服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。
  • 每個(gè) HRegionServer 中都有一個(gè) HLog 對(duì)象,HLog 是一個(gè)實(shí)現(xiàn) Write Ahead Log 的類(lèi),在每次用戶(hù)操作寫(xiě)入 MemStore 的同時(shí),也會(huì)寫(xiě)一份數(shù)據(jù)到 HLog 文件中, HLog 文件定期會(huì)滾動(dòng)出新的,并刪除舊的文件(已持久化到 StoreFile 中的數(shù)據(jù))。當(dāng) HRegionServer 意外終止后,HMaster 會(huì)通過(guò) Zookeeper 感知到,HMaster 首先會(huì)處理遺留的 HLog 文件,將其中不同 Region 的 Log 數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng) region 的目錄下,然后再將失效的 region 重新分配,領(lǐng)取到這些 region 的 HRegionServer 在 Load Region的過(guò)程中,會(huì)發(fā)現(xiàn)有歷史 HLog 需要處理,因此會(huì) Replay HLog 中的數(shù)據(jù)到 MemStore 中,然后 flush 到 StoreFiles,完成數(shù)據(jù)恢復(fù)。

7、hbase的尋址機(jī)制

尋找 RegionServer

  • ZooKeeper–> -ROOT-(單 Region)–> .META.–> 用戶(hù)表

-ROOT-表

  • 表包含.META.表所在的 region 列表,該表只會(huì)有一個(gè) Region;
  • root region 永遠(yuǎn)不會(huì)被 split,保證了最多需要三次跳轉(zhuǎn),就能定位到任意 region 。
  • Zookeeper 中記錄了-ROOT-表的 location。

.META.表

  • 表包含所有的用戶(hù)空間 region 列表,以及 RegionServer 的服務(wù)器地址
  • .META.表每行保存一個(gè) region 的位置信息,row key 采用表名+表的最后一行編碼而成。
  • 為了加快訪(fǎng)問(wèn),.META.表的全部 region 都保存在內(nèi)存中。

聯(lián)系 regionserver 查詢(xún)目標(biāo)數(shù)據(jù)

regionserver 定位到目標(biāo)數(shù)據(jù)所在的 region,發(fā)出查詢(xún)請(qǐng)求

region 先在 memstore 中查找,命中則返回

如果在 memstore 中找不到,則在 storefile 中掃描(可能會(huì)掃描到很多的 storefile----bloomfilter 布隆過(guò)濾器)布隆過(guò)濾器可以快速的返回查詢(xún)的rowkey是否在這個(gè)storeFile中, 但也有誤差, 如果返回沒(méi)有,則一定沒(méi)有,如果返回有, 則可能沒(méi)有

8、Hbase高級(jí)應(yīng)用

建表

BLOOMFILTER 默認(rèn)是 Row 布隆過(guò)濾器

  • 對(duì) ROW,行鍵的哈希在每次插入行時(shí)將被添加到布隆。
  • 對(duì) ROWCOL,行鍵 + 列族 + 列族修飾的哈希將在每次插入行時(shí)添加到布隆

VSRSIONS 默認(rèn)是 1 數(shù)據(jù)版本

  • 如果我們認(rèn)為我們的數(shù)據(jù)沒(méi)有這么大的必要保留這么多,隨時(shí)都在更新,而老版本的數(shù)據(jù)對(duì)我們毫無(wú)價(jià)值,那將此參數(shù)設(shè)為 1 能節(jié)約 2/3 的空間

COMPRESSION 默認(rèn)值是 NONE 壓縮

  • GZIP / LZO / Zippy / Snappy

disable_all ‘toplist.*' disable_all 支持正則表達(dá)式,并列出當(dāng)前匹配的表 drop_all也相同

hbase 表預(yù)分區(qū)----手動(dòng)分區(qū)

一種可以加快批量寫(xiě)入速度的方法是通過(guò)預(yù)先創(chuàng)建一些空的 regions,這樣當(dāng)數(shù)據(jù)寫(xiě)入 HBase時(shí),會(huì)按照 region 分區(qū)情況,在集群內(nèi)做數(shù)據(jù)的負(fù)載均衡。減少數(shù)據(jù)達(dá)到 storefile 大小的時(shí)候自動(dòng)分區(qū)的

時(shí)間消耗,并且還有以一個(gè)優(yōu)勢(shì),就是合理設(shè)計(jì) rowkey 能讓各個(gè) region 的并發(fā)請(qǐng)求平均分配(趨于均勻) 使 IO 效率達(dá)到最高,

行鍵設(shè)計(jì)

列族盡量少, 一般2-3個(gè)

rowkey

  • 根據(jù)字典序的特性, 將需要批量查詢(xún)的數(shù)據(jù)盡可能連續(xù)存放( 矛 )
  • 盡可能將查詢(xún)條件關(guān)鍵詞拼裝到 rowkey 中,查詢(xún)頻率最高的條件盡量往前靠
  • rowkey建議越短越好,不要超過(guò) 16 個(gè)字節(jié)

盡量減少行鍵和列族的大小在 HBase 中,value 永遠(yuǎn)和它的 key 一起傳輸?shù)?br /> HFile中每個(gè)cell都會(huì)存儲(chǔ)rowkey, rowkey過(guò)大會(huì)影響存儲(chǔ)效率
MemStore 將緩存部分?jǐn)?shù)據(jù)到內(nèi)存,如果 rowkey 字段過(guò)長(zhǎng),內(nèi)存的有效利用率就會(huì)降低,系統(tǒng)不能緩存更多的數(shù)據(jù),這樣會(huì)降低檢索效率。

建議將 rowkey 的高位作為散列字段,由程序隨機(jī)生成,低位放時(shí)間字段,這樣將提高數(shù)據(jù)均衡分布在每個(gè) RegionServer,以實(shí)現(xiàn)負(fù)載均衡的幾率。( 盾 )

rowkey矛盾

  • HBase 中的行是按照 rowkey 的字典順序排序的,這種設(shè)計(jì)優(yōu)化了 scan 操作,可以將相關(guān)的行以及會(huì)被一起讀取的行存取在臨近位置,便于 scan。然而糟糕的rowkey 設(shè)計(jì)是熱點(diǎn)的源頭。

熱點(diǎn)解決

  • 加鹽 在rowkey前加隨機(jī)字符串
  • 哈希 哈希會(huì)使同一行永遠(yuǎn)用一個(gè)前綴加鹽
  • 反轉(zhuǎn) 反轉(zhuǎn)固定長(zhǎng)度或者數(shù)字格式的 rowkey 犧牲了rowkey的有序性
  • 時(shí)間戳反轉(zhuǎn)

可以用 Long.Max_Value - timestamp 追加到 key 的末尾,例如 [key][reverse_timestamp] ,[key] 的最新值可以通過(guò) scan [key]獲得[key]的第一條記錄,因?yàn)?HBase 中 rowkey 是有序的,第一條記錄是最后錄入的數(shù)據(jù)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

標(biāo)簽:孝感 晉城 撫順 南充 福州 蕪湖 巴中 綏化

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Hbase入門(mén)詳解》,本文關(guān)鍵詞  Hbase,入門(mén),詳解,Hbase,入門(mén),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Hbase入門(mén)詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Hbase入門(mén)詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章