1. 程式人生 > >電商之梳理Hbase相關知識---分散式資料庫

電商之梳理Hbase相關知識---分散式資料庫

HBase
本詞條由“科普中國”百科科學詞條編寫與應用工作專案 稽核 。
HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。
中文名 HBase 來 源 Fay Chang 所撰寫的“Bigtable 結 構分散式儲存系統 系 統 Google
目錄
1 結構介紹
2 模型
3 訪問介面
4 儲存格式
5 文件
結構介紹
HBase – Hadoop Database,是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化儲存叢集。
與FUJITSU Cliq等商用大資料產品不同,HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作為其檔案儲存系統,HBase利用Hadoop HDFS作為其檔案儲存系統;Google執行MapReduce來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。[1]
上圖描述Hadoop EcoSystem中的各層系統。其中,HBase位於結構化儲存層,Hadoop HDFS為HBase提供了高可靠性的底層儲存支援,Hadoop MapReduce為HBase提供了高效能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制。

此外,Pig和Hive還為HBase提供了高層語言支援,使得在HBase上進行資料統計處理變的非常簡單。 Sqoop則為HBase提供了方便的RDBMS資料匯入功能,使得傳統資料庫資料向HBase中遷移變的非常方便。
模型
主要討論邏輯模型和物理模型
(1)邏輯模型
Hbase的名字的來源是Hadoop database,即hadoop資料庫。
主要是從使用者角度來考慮,即如何使用Hbase。
(2)物理模型
主要從實現Hbase的角度來討論
訪問介面
1. Native Java API,最常規和高效的訪問方式,適合Hadoop MapReduce Job並行批處理HBase表資料
2. HBase Shell,HBase的命令列工具,最簡單的介面,適合HBase管理使用
3. Thrift Gateway,利用Thrift序列化技術,支援C++,PHP,Python等多種語言,適合其他異構系統線上訪問HBase表資料
4. REST Gateway,支援REST 風格的Http API訪問HBase, 解除了語言限制
5. Pig,可以使用Pig Latin流式程式語言來操作HBase中的資料,和Hive類似,本質最終也是編譯成MapReduce Job來處理HBase表資料,適合做資料統計
6. Hive,當前Hive的Release版本尚沒有加入對HBase的支援,但在下一個版本Hive 0.7.0中將會支援HBase,可以使用類似SQL語言來訪問HBase
HBase資料模型Table & Column Family
Row Key
Timestamp
Column Family

  
URI
Parser

  
  
r1
t3
url=http://
title=
t2
host=com

  
  
t1

  
  
  
r2
t5
url=http://
content=每天…
t4
host=com

  
  
Ø Row Key: 行鍵,Table的主鍵,Table中的記錄預設按照Row Key升序排序
Ø Timestamp:時間戳,每次資料操作對應的時間戳,可以看作是資料的version number
Ø Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中可以由任意多個Column組成,即Column Family支援動態擴充套件,無需預先定義Column的數量以及型別,所有Column均以二進位制格式儲存,使用者需要自行進行型別轉換。
Table & Region
當Table隨著記錄數不斷增加而變大後,會逐漸分裂成多份splits,成為regions,一個region由[startkey,endkey)表示,不同的region會被Master分配給相應的RegionServer進行管理:

-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快取。
MapReduce on HBase
在HBase系統上執行批處理運算,最方便和實用的模型依然是MapReduce,如下圖:

HBase Table和Region的關係,比較類似HDFS File和Block的關係,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的將HBase Table作為Hadoop MapReduce的Source和Sink,對於MapReduce Job應用開發人員來說,基本不需要關注HBase系統自身的細節。
HBase系統架構
Client
HBase Client使用HBase的RPC機制與HMaster和HRegionServer進行通訊,對於管理類操作,Client與HMaster進行RPC;對於資料讀寫類操作,Client與HRegionServer進行RPC
1 Zookeeper
Zookeeper Quorum中除了儲存了-ROOT-表的地址和HMaster的地址,HRegionServer也會把自己以Ephemeral方式註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也避免了HMaster的單點問題,見下文描述
HMaster
HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master執行,HMaster在功能上主要負責Table和Region的管理工作:
1. 管理使用者對Table的增、刪、改、查操作
2. 管理HRegionServer的負載均衡,調整Region分佈
3. 在Region Split後,負責新Region的分配
4. 在HRegionServer停機後,負責失效HRegionServer 上的Regions遷移
HRegionServer
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檔案系統上,主要包括上述提出的兩種檔案型別:
1. HFile, HBase中KeyValue資料的儲存格式,HFile是Hadoop的二進位制格式檔案,實際上StoreFile就是對HFile做了輕量級包裝,即StoreFile底層就是HFile
2. HLog File,HBase中WAL(Write Ahead Log) 的儲存格式,物理上是Hadoop的Sequence File
HFile
下圖是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部分沒有這麼複雜的結構,就是純粹的二進位制資料了。
HLogFile
上圖中示意了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,可參見上文描述。
文件
HBase最新官方參考指南中文版[2] (見參考資料)
HBase Reference Guide [3]

相關推薦

梳理Hbase相關知識---分散式資料庫

HBase 本詞條由“科普中國”百科科學詞條編寫與應用工作專案 稽核 。 HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了

梳理mongodb相關知識---分散式資料庫

mongodb 《mongodb》是2013年中國鐵道出版社出版的圖書,作者是鄒貴金。該書介紹了MongoDB基礎、應用、管理、效能優化、資料庫的架構,環境搭建例項,程式設計例項等內容。 書 名 mongodb 作 者 鄒貴金 出版社中國鐵道出

梳理rabbitmq相關知識---通訊--訊息佇列

rabbitmq 編輯 MQ全稱為Message Queue, 訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息(針對應用程式的資料)來通訊,而無需專用連線來連結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是

梳理UML相關知識-------建模使用

統一建模語言 編輯 同義詞 UML(統一建模語言)一般指統一建模語言 本詞條由“科普中國”百科科學詞條編寫與應用工作專案 稽核 。 Unified Modeling Language (UML)又稱統一建模語言或標準建模語言,是始於1997年一個OMG標準

梳理Flume相關知識---資料採集

flume Flume是Cloudera提供的一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的系統,Flume支援在日誌系統中定製各類資料傳送方,用於收集資料;同時,Flume提供對資料進行簡單處理,並寫到各種資料接受方(可定製)的能力。 當前F

梳理mysql相關知識---資料庫

MySQL資料庫 編輯 MySQL是一種開放原始碼的關係型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言–結構化查詢語言(SQL)進行資料庫管理。 中文名 MySQL資料庫 類 型開放原始碼的關係型 說 明資料庫管理

梳理Nginx(7層)相關知識---反向代理以及負載均衡

nginx 編輯 Nginx (“engine x”) 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器。Nginx是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0釋出於2

梳理servlet知識---javaweb基礎

servelt 是用java程式編寫的伺服器端程式,其主要功能是互動地瀏覽和修改資料(查詢和修改)。狹義說的是介面,廣義是指實現該介面的servlet類。 響應任何型別的請求,但是絕大數情況被用來 擴充套件基於HTTP協議的web伺服器的效

深圳紐仕達家可信嗎?

多個 90後 html5 網頁設計 實現 電商 店鋪 同時 資源 電商行業越發而壯大,很多傳統行業都跑來做電商,在“魚龍混雜”的商業世界,我們要懂得分清誰才是“龍”,如此才能節約資源,上升到絕佳境界,從而獲得實在的東西,深圳電商之家帶你看清電商的真面目。 ? ? ? ?先了

專案day01(dubbo+ssm搭建分散式運用)

一、網際網路和傳統專案的區別 傳統專案   企業內部管理系統             OA 辦公自動化系統         CRM

HBase相關知識

一、HBase資料模型 https://www.cnblogs.com/csyuan/p/6543018.html  二、HBase 物理模型:https://blog.csdn.net/gg782112163/article/details/53523660 a.

演算法與資料結構堆的相關知識,簡單易懂。

十、 二叉堆之Java的實現 1) 概要 前面分別通過C和C++實現了二叉堆,本章給出二叉堆的Java版本。還是那句話,它們的原理一樣,擇其一瞭解即可。 目錄 1. 二叉堆的介紹 2. 二叉堆的圖文解析 3. 二叉堆的Java實現(完整原始碼) 4. 二叉堆的Java測試程式

團購與B2C模式以及B2B2C模式對比

一、概述 1、代表性的網站 團購的代表性網站莫過於國外的groupon和國內的“聚划算”這兩個網站。核心模式就是針對某個產品多人下訂單,達到一定訂單數,就以一個特定的價格(不一定是最低的價格...)給所有買家發貨。如果沒達到團購的條件,那麼錢將會退回買家的賬戶中,此產品的團

演算法與資料結構圖的相關知識,簡單易懂。

一、    圖的理論基礎 1)  概要 本章介紹資料結構中圖的基本概念。 目錄 1. 圖的基本概念 2. 圖的儲存結構 2)  圖的基本概念 1. 圖的定義 定義:圖(graph)是由一些點(vertex)和這些點之間的連線(edge)所組成的;其中,點通常被

專案實戰 搜尋記錄+清空+資料庫 自定義view

主頁面 initView();//初始化控制元件 dataBase = new FlowDataBase(this); List<String> list = dataBase.query(); for (int i = 0; i <

Java企業級專案架構演進路 Tomcat叢集與Redis分散式分享

第1章 課程介紹與前置專案回顧【配合一期課程,效果最佳】 本章首先會對一期成果進行回顧、然後確定本次進階課程的演進目標以及進階課程的內容安排。然後會介紹課程使用各種技術版本,以方便大家的環境和課程保持一致,減少因版本不同而踩的沒必要的坑。之後會對二期專案初始化進行講解,包括IDEA中匯入二期原

[資料倉庫]核心業務知識訂單商品模組

電商核心業務知識 訂單商品模組(9張表) --訂單主要資訊表 drop table if exists itqsc.ods_b2c_orders; create external table itqsc.ods_b2c_orders ( order_id  bigint, -

Java企業級專案架構演進路 Tomcat叢集與Redis分散式

6-1 本章概要 6-2 使用者模組一期回顧與二期任務 6-3 Redis連線池構建與測試-1 6-4 Redis連線池構建與測試-2 6-5 Jedis api封裝與除錯 6-6 Jsonutil 封裝及除錯-1 6-7 Jsonutil 封裝及除錯-2 6-8 Jsonutil

Java企業級專案架構演進路 Tomcat叢集與Redis分散式教程

高併發、高效能、高可用必經之路,基於一個完整電商專案進行架構演進,覆蓋Tomcat叢集+Nginx負載均衡+Redis分散式等核心技能點。第1章 課程介紹與前置專案回顧【配合一期課程,效果最佳】1-1 課程導學1-2 大型Java專案架構演進解析(學過一期的同學可跳過)1-3 一期課程與問答服務回顧(學過一期

萬物皆可,生鮮的坎坷

生鮮電商  雖然現在還沒達到萬物皆可電商的地步,但是一些電商平臺確實是以此為目標向前邁步。而作為實現這個目標的非常重要的一步,就是生鮮。例如最近的大櫻桃不是到季節了嘛,各個電商大企業便開始用其“練手”。  ▲順豐航空的櫻桃專機,一架波音737貨機正在裝載櫻桃。供圖/東方IC  首先,軟件產品網要給大家普及一下