大數據雲計算——Hbase組件

HBase 是一種分佈式、可擴展、支持海量數據存儲的 NoSQL 數據庫。邏輯上, HBase 的數據模型同關係型數據庫很類似,數據存儲在一張表中,有行有列。但從 HBase 的底層物理存儲結構(K-V)來看,HBase更像是一個multi-dimensional map。

7.1Hbase的邏輯結構

7.2Hbase的基本架構

架構角色:

1) Region Server

Region Server 爲 Region 的管理者, 其實現類爲 HRegionServer,主要作用如下:

對於數據的操作: get, put, delete;

對於 Region 的操作: splitRegion、 compactRegion。

2) Master

Master 是所有 Region Server 的管理者,其實現類爲 HMaster,主要作用如下:

對於表的操作: create, delete, alter

對於 RegionServer的操作:分配 regions到每個RegionServer,監控每個 RegionServer

的狀態,負載均衡和故障轉移。

3) Zookeeper

HBase 通過 Zookeeper 來做 Master 的高可用、 RegionServer 的監控、元數據的入口以及

集羣配置的維護等工作。

4) HDFS

HDFS 爲 HBase 提供最終的底層數據存儲服務,同時爲 HBase 提供高可用的支持。

1) StoreFile

保存實際數據的物理文件, StoreFile 以 HFile 的形式存儲在 HDFS 上。每個 Store 會有

一個或多個 StoreFile(HFile),數據在每個 StoreFile 中都是有序的。

2) MemStore

寫緩存,由於 HFile 中的數據要求是有序的,所以數據是先存儲在 MemStore 中,排好序後,等到達刷寫時機纔會刷寫到 HFile,每次刷寫都會形成一個新的 HFile

3) WAL

由於數據要經 MemStore 排序後才能刷寫到 HFile, 但把數據保存在內存中會有很高的概率導致數據丟失,爲了解決這個問題,數據會先寫在一個叫做 Write-Ahead logfile 的文件中,然後再寫入 MemStore 中。所以在系統出現故障的時候,數據可以通過這個日誌文件重建。

7.3Hbase的讀寫流程

讀流程

1) Client 先訪問 zookeeper,獲取 hbase:meta 表位於哪個 Region Server。

2)訪問對應的 Region Server,獲取 hbase:meta 表,根據讀請求的 namespace:table/rowkey,

查詢出目標數據位於哪個 Region Server 中的哪個 Region 中。並將該 table 的 region 信息以及 meta 表的位置信息緩存在客戶端的 meta cache,方便下次訪問。

3)與目標 Region Server 進行通訊;

4) 分別在 Block Cache(讀緩存), MemStore 和 Store File(HFile)中查詢目標數據,並將查到的所有數據進行合併。此處所有數據是指同一條數據的不同版本(time stamp)或者不同的類型(Put/Delete)。

5) 將從文件中查詢到的數據塊(Block, HFile 數據存儲單元,默認大小爲 64KB)緩存到

Block Cache。

6) 將合併後的最終結果返回給客戶端。

寫流程:

1) Client 先訪問 zookeeper,獲取 hbase:meta 表位於哪個 Region Server。

2)訪問對應的 Region Server,獲取 hbase:meta 表,根據讀請求的 namespace:table/rowkey,

查詢出目標數據位於哪個 Region Server 中的哪個 Region 中。並將該 table 的 region 信息以及 meta 表的位置信息緩存在客戶端的 meta cache,方便下次訪問。

3)與目標 Region Server 進行通訊;

4)將數據順序寫入(追加)到 WAL;

5)將數據寫入對應的 MemStore,數據會在 MemStore 進行排序;

6)向客戶端發送 ack;

7) 等達到 MemStore 的刷寫時機後,將數據刷寫到 HFile。

7.4Hbase與Hive的對比

HBase 與 Hive 的對比

1. Hive

(1) 數據倉庫

Hive 的本質其實就相當於將 HDFS 中已經存儲的文件在 Mysql 中做了一個雙射關係,以

方便使用 HQL 去管理查詢。

(2) 用於數據分析、清洗

Hive 適用於離線的數據分析和清洗,延遲較高。

(3) 基於 HDFS、 MapReduce

Hive存儲的數據依舊在 DataNode 上,編寫的HQL語句終將是轉換爲 MapReduce代碼執行。

2. HBase

(1) 數據庫

是一種面向列族存儲的非關係型數據庫。

(2) 用於存儲結構化和非結構化的數據

適用於單表非關係型數據的存儲,不適合做關聯查詢,類似 JOIN 等操作。

(3) 基於 HDFS

數據持久化存儲的體現形式是 HFile存放於 DataNode中,被ResionServer以 region 的形式進行管理。

(4) 延遲較低,接入在線業務使用

面對大量的企業數據, HBase 可以直線單表大量數據的存儲,同時提供了高效的數據訪問速度

7.5Hbase的優化

高可用

在 HBase 中 HMaster 負責監控 HRegionServer 的生命週期,均衡 RegionServer 的負載,

如果 HMaster 掛掉了,那麼整個 HBase 集羣將陷入不健康的狀態,並且此時的工作狀態並

不會維持太久。所以 HBase 支持對 HMaster 的高可用配置

預分區

每一個 region 維護着 StartRow 與 EndRow,如果加入的數據符合某個 Region 維護的

RowKey 範圍,則該數據交給這個 Region 維護。那麼依照這個原則,我們可以將數據所要

投放的分區提前大致的規劃好,以提高 HBase 性能

RowKey 設計

一條數據的唯一標識就是 RowKey,那麼這條數據存儲於哪個分區,取決於 RowKey 處於哪個一個預分區的區間內,設計 RowKey 的主要目的 ,就是讓數據均勻的分佈於所有的region 中,在一定程度上防止數據傾斜。接下來我們就談一談 RowKey 常用的設計方案。

內存優化

HBase 操作過程中需要大量的內存開銷,畢竟 Table 是可以緩存在內存中的,一般會分配整個可用內存的 70%給 HBase 的 Java 堆。但是不建議分配非常大的堆內存,因爲 GC 過程持續太久會導致 RegionServer 處於長期不可用狀態,一般 16~48G 內存就可以了,如果因爲框架佔用內存過高導致系統內存不足,框架一樣會被系統服務拖死。

面試問題:

關係型數據庫優點:1.數據之間有關係,進行數據的增刪改查的時候是非常方便的2.關係型數據庫是有事務操作的,保證數據的完整性和一致性。1.因爲數據和數據是有關係的,底層是運行了大量的算法大量算法會降低系統的效率,會降低性能2.面對海量數據的增刪改查的時候會顯的無能爲力3.海量數據對數據進行維護變得非常的無力因此,關係型數據庫適合處理一般量級的數據。

非關係數據庫的(redis和MangDB)爲了處理海量數據,非關係數據庫設計之初就是爲了替代關係型數據庫的關係

優點:1.海量數據的增刪改查是可以的2.海量數據的維護和處理非常輕鬆

缺點:1.數據和數據沒有關係,他們之間就是單獨存在的2.非關係數據庫沒有關係,沒有強大的事務關係,沒有保證數據的完整性和安全性適合處理海量數據,保證效率,不一定安全(統計數據,例如微博數據)。

1hbase與mysql的區別

MySQL:關係型數據庫,主要面向OLTP,支持事務,支持二級索引,支持sql,支持主從、Group Replication架構模型(本文全部以Innodb爲例,不涉及別的存儲引擎)。

HBase:基於HDFS,支持海量數據讀寫(尤其是寫),支持上億行、上百萬列的,面向列的分佈式NoSql數據庫。天然分佈式,主從架構,不支持事務,不支持二級索引,不支持sql。

兩者屬於不同類型數據庫。HBASE是按列存儲型數據庫,MySQL是關係型數據庫。其中,關係型數據庫(Mysql和Oracle):表和表、表和字段、數據和數據存在着關係。
Hbase的優點:1 列的可以動態增加,並且列爲空就不存儲數據,節省存儲空間.2 Hbase自動切分數據,使得數據存儲自動具有水平scalability.3 Hbase可以提供高併發讀寫操作的支持

Hbase的缺點:1 不能支持條件查詢,只支持按照Row key來查詢.2 暫時不能支持Master server的故障切換,當Master宕機後,整個存儲系統就會掛掉.

補充:1.數據類型,Hbase只有簡單的字符類型,所有的類型都是交由用戶自己處理,它只保存字符串。而關係數據庫有豐富的類型和存儲方式。
2.數據操作:HBase只有很簡單的插入、查詢、刪除、清空等操作,表和表之間是分離的,沒有複雜的表和表之間的關係,而傳統數據庫通常有各式各樣的函數和連接操作。
3.存儲模式:HBase是基於列存儲的,每個列族都由幾個文件保存,不同的列族的文件時分離的。而傳統的關係型數據庫是基於表格結構和行模式保存的
4.數據維護,HBase的更新操作不應該叫更新,它實際上是插入了新的數據,而傳統數據庫是替換修改
5.可伸縮性,Hbase這類分佈式數據庫就是爲了這個目的而開發出來的,所以它能夠輕鬆增加或減少硬件的數量,並且對錯誤的兼容性比較高。而傳統數據庫通常需要增加中間層才能實現類似的功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章