Hadoop叢集中Hbase的介紹、安裝、使用
構化儲存叢集。 |
HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作為其檔案儲存系統,HBase利用Hadoop HDFS作為其檔案儲存系統;Google執行MapReduce來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable利用Chubby作為協同服務,HBase利用Zookeeper作為對應。
上圖描述了Hadoop EcoSystem中的各層系統,其中HBase位於結構化儲存層,Hadoop HDFS為HBase提供了高可靠性的底層儲存支援,Hadoop MapReduce為HBase提供了高效能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制。
此外,Pig和Hive還為HBase提供了高層語言支援,使得在HBase上進行資料統計處理變的非常簡單。 Sqoop則為HBase提供了方便的RDBMS資料匯入功能,使得傳統資料庫資料向HBase中遷移變的非常方便。
- Native Java API,最常規和高效的訪問方式,適合Hadoop MapReduce Job並行批處理HBase表資料
- HBase ,HBase的 行工具,最簡單的介面,適合HBase管理使用
- Thrift Gateway,利用Thrift序列化技術,支援C++,PHP,Python等多種語言,適合其他異構系統線上訪問HBase表資料
- REST Gateway,支援REST 風格的Http API訪問HBase, 解除了語言限制
- Pig,可以使用Pig Latin流式程式語言來操作HBase中的資料,和Hive類似,本質最終也是編譯成MapReduce Job來處理HBase表資料,適合做資料統計
- Hive,當前Hive的Release版本尚沒有加入對HBase的支援,但在下一個版本Hive 0.7.0中將會支援HBase,可以使用類似SQL語言來訪問HBase
1、Table & Column Family
Ø Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序
Ø Timestamp: 時間戳,每次資料操作對應的時間戳,可以看作是資料的version number
Ø Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中可以由任意多個Column組成,即Column Family支援動態擴充套件,無需預先定義Column的數量以及型別,所有Column均以二進位制格式儲存,使用者需要自行進行型別轉換。
2、Table & Region
當Table隨著記錄數不斷增加而變大後,會逐漸分裂成多份splits,成為regions,一個region由[startkey,endkey)表示,不同的region會被Master分配給相應的RegionServer進行管理:
3、-ROOT- && .META. Table
HBase中有兩張特殊的Table,-ROOT-和.META.
Ø .META.:記錄了使用者表的Region資訊,.META.可以有多個regoin
Ø -ROOT-:記錄了.META.表的Region資訊,-ROOT-只有一個region
Ø Zookeeper中記錄了-ROOT-表的location
Client訪問使用者資料之前需要首先訪問zookeeper,然後訪問-ROOT-表,接著訪問.META.表,最後才能找到使用者資料的位置去訪問,中間需要多次網路操作,不過client端會做cache快取。
在HBase系統上執行批處理運算,最方便和實用的模型依然是MapReduce,如下圖:
HBase Table和Region的關係,比較類似HDFS File和Block的關係,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的將HBase Table作為Hadoop MapReduce的Source和Sink,對於MapReduce Job應用開發人員來說,基本不需要關注HBase系統自身的細節。
HBase Client使用HBase的RPC機制與HMaster和HRegionServer進行通訊,對於管理類操作,Client與HMaster進行RPC;對於資料讀寫類操作,Client與HRegionServer進行RPC
Zookeeper Quorum中除了儲存了-ROOT-表的地址和HMaster的地址,HRegionServer也會把自己以Ephemeral方式註冊到 Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也避免了HMaster的 單點問題,見下文描述
HMaster沒有單點問題,HBase中可以啟動多個HMaster,透過Zookeeper的Master Election機制保證總有一個Master執行,HMaster在功能上主要負責Table和Region的管理工作:
- 管理使用者對Table的增、刪、改、查操作
- 管理HRegionServer的負載均衡,調整Region分佈
- 在Region Split後,負責新Region的分配
- 在HRegionServer停機後,負責失效HRegionServer 上的Regions遷移
HRegionServer主要負責響應使用者I/O請求,向HDFS檔案系統中讀寫資料,是HBase中最核心的模組。
HRegionServer內部管理了一系列HRegion物件,每個HRegion對應了Table中的一個Region,HRegion中由多 個HStore組成。每個HStore對應了Table中的一個Column Family的儲存,可以看出每個Column Family其實就是一個集中的儲存單元,因此最好將具備共同IO特性的column放在一個Column Family中,這樣最高效。
HStore儲存是HBase儲存的核心了,其中由兩部分組成,一部分是MemStore,一部分是StoreFiles。MemStore是 Sorted Memory Buffer,使用者寫入的資料首先會放入MemStore,當MemStore滿了以後會Flush成一個StoreFile(底層實現是HFile), 當StoreFile檔案數量增長到一定閾值,會觸發Compact合併操作,將多個StoreFiles合併成一個StoreFile,合併過程中會進 行版本合併和資料刪除,因此可以看出HBase其實只有增加資料,所有的更新和刪除操作都是在後續的compact過程中進行的,這使得使用者的寫操作只要進入記憶體中就可以立即返回,保證了HBase I/O的高效能。
當StoreFiles Compact後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後,會觸發Split操作,同時把當前 Region Split成2個Region,父Region會下線,新Split出的2個孩子Region會被HMaster分配到相應的HRegionServer 上,使得原先1個Region的壓力得以分流到2個Region上。下圖描述了Compaction和Split的過程:
在理解了上述HStore的基本原理後,還必須瞭解一下HLog的功能,因為上述的HStore在系統正常工作的前提下是沒有問題的,但是在分散式系統環境中,無法避免系統出錯或者當機,因此一旦HRegionServer意外退出,MemStore中的記憶體資料將會丟失,這就需要引入HLog了。 每個HRegionServer中都有一個HLog物件,HLog是一個實現Write Ahead Log的類,在每次使用者操作寫入MemStore的同時,也會寫一份資料到HLog檔案中(HLog檔案格式見後續),HLog檔案定期會滾動出新的,並刪除舊的檔案(已持久化到StoreFile中的資料)。當HRegionServer意外終止後,HMaster會透過Zookeeper感知 到,HMaster首先會處理遺留的 HLog檔案,將其中不同Region的Log資料進行拆分,分別放到相應region的目錄下,然後再將失效的region重新分配,領取 到這些region的HRegionServer在Load Region的過程中,會發現有歷史HLog需要處理,因此會Replay HLog中的資料到MemStore中,然後flush到StoreFiles,完成資料恢復。
HBase中的所有資料檔案都儲存在Hadoop HDFS檔案系統上,主要包括上述提出的兩種檔案型別:
- HFile, HBase中KeyValue資料的儲存格式,HFile是Hadoop的二進位制格式檔案,實際上StoreFile就是對HFile做了輕量級包裝,即StoreFile底層就是HFile
- HLog File,HBase中WAL(Write Ahead Log) 的儲存格式,物理上是Hadoop的Sequence File
下圖是HFile的儲存格式:
首先HFile檔案是不定長的,長度固定的只有其中的兩塊:Trailer和FileInfo。正如圖中所示的,Trailer中有指標指向其他數 據塊的起始點。File Info中記錄了檔案的一些Meta資訊,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data Index和Meta Index塊記錄了每個Data塊和Meta塊的起始點。
Data Block是HBase I/O的基本單元,為了提高效率,HRegionServer中有基於LRU的Block Cache機制。每個Data塊的大小可以在建立一個Table的時候透過引數指定,大號的Block有利於順序Scan,小號Block利於隨機查詢。 每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內容就是一些隨機數字,目的是防止資料損壞。後面會詳細介紹每個KeyValue對的內部構造。
HFile裡面的每個KeyValue對就是一個簡單的byte陣列。但是這個byte陣列裡麵包含了很多項,並且有固定的結構。我們來看看裡面的具體結構:
開始是兩個固定長度的數值,分別表示Key的長度和Value的長度。緊接著是Key,開始是固定長度的數值,表示RowKey的長度,緊接著是 RowKey,然後是固定長度的數值,表示Family的長度,然後是Family,接著是Qualifier,然後是兩個固定長度的數值,表示Time Stamp和Key Type(Put/Delete)。Value部分沒有這麼複雜的結構,就是純粹的二進位制資料了。
上圖中示意了HLog檔案的結構,其實HLog檔案就是一個普通的Hadoop Sequence File,Sequence File 的Key是HLogKey物件,HLogKey中記錄了寫入資料的歸屬資訊,除了table和region名字外,同時還包括 sequence number和timestamp,timestamp是“寫入時間”,sequence number的起始值為0,或者是最近一次存入檔案系統中sequence number。
HLog Sequece File的Value是HBase的KeyValue物件,即對應HFile中的KeyValue,可參見上文描述。
1、Hbase版本選擇
挑選一個Apache Download Mirror(Apache下載映象),下載一個Hbase的穩定釋出版本,解壓如下:
tar zxvf hbase-1.0.3-bin.tar.gz -C /home/hadoop/
設定Hbase環境變數
# hbase env export HBASE_HOME=/home/hadoop/hbase export PATH=$PATH:$HBASE_HOME/bin
#獲取Hbase選項列表及版本資訊
hbase version
2、測試驅動
#啟動一個使用本地檔案系統/tmp目錄作為持久化儲存的Hbase臨時例項
start-hbase.sh starting master, logging to /home/hadoop/hbase/logs/hbase-root-master-linux-node1.out
#新建一個名為test的表,使其只包含一個名為data的列,表和列族屬性都為預設值
hbase(main):001:0> create 'test','data' 0 row(s) in 0.4150 seconds
#透過鍵入help檢視幫助 ,執行list檢視新建的表是否存在
hbase(main):003:0> list TABLE test 1 row(s) in 0.0230 seconds
#在列族data中二個不同的行和列上插入資料,然後列出表內容
hbase(main):004:0> put 'test','row1','data:1','values1' 0 row(s) in 0.1280 seconds hbase(main):005:0> put 'test','row2','data:2','values2' 0 row(s) in 0.0090 seconds hbase(main):006:0> scan 'test' ROW COLUMN+CELL row1 column=data:1, timestamp=1473585137461, value=values1 row2 column=data:2, timestamp=1473585158072, value=values2 2 row(s) in 0.0200 seconds
#刪除剛建立的表test,需要先設為禁用,然後刪除,不設定會報錯:
ERROR: Table test is enabled. Disable it first. hbase(main):009:0> disable 'test' 0 row(s) in 1.1800 seconds hbase(main):010:0> drop 'test' 0 row(s) in 0.1570 seconds
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2928670/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CDH版Hadoop-zookeeper-hbase-spark安裝文件HadoopSpark
- Hbase原理的介紹和使用場景分析
- 安裝 Hadoop:設定單節點 Hadoop 叢集Hadoop
- Hadoop進階命令使用介紹Hadoop
- ccs的介紹,安裝和使用入門
- Zookeeper介紹與叢集安裝
- Hbase一:Hbase介紹及特點
- 虛擬機器Hadoop叢集搭建5安裝Hadoop虛擬機Hadoop
- Jupyter Notebook介紹、安裝及使用教程
- 在Ubuntu 18.04.1上安裝Hadoop叢集UbuntuHadoop
- 2. TeraSort在Hadoop分散式叢集中的執行Hadoop分散式
- docker介紹、安裝Docker
- MySQL 安裝介紹MySql
- Go 安裝介紹Go
- Sqoop的介紹和安裝OOP
- Hadoop Hive介紹HadoopHive
- Hadoop Sqoop介紹Hadoop
- Hadoop叢集之 ZooKeeper和Hbase環境搭建Hadoop
- 大資料 Hadoop介紹、配置與使用大資料Hadoop
- Hadoop系列之Hbase的高可用完全分佈模式的安裝(六)Hadoop模式
- redis介紹與安裝Redis
- BookKeeper 介紹(2)--安裝
- Nginx 安裝配置介紹Nginx
- 安裝apache及介紹Apache
- RocketMQ 介紹與安裝MQ
- Tensorflow介紹和安裝
- secrets 管理工具 Vault 的介紹、安裝及使用
- Linux下安裝與使用MySQL詳細介紹LinuxMySql
- hadoop偽分散式叢集的安裝(不是單機版)Hadoop分散式
- Hadoop叢集安裝配置Hadoop
- Hbase的安裝與部署
- rqt的安裝及詳細介紹QT
- hadoop之旅9-centerOS7 : hbase叢集環境搭建HadoopROS
- Prism:框架介紹與安裝框架
- RPM包安裝與介紹
- Webpack及npm介紹安裝WebNPM
- Hue--介紹及安裝
- hadoop的安裝部署Hadoop