'連你也能看懂的大數據之Hadoop——Hbase,得之幸之'

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HRegionServer包含兩大部分:HRegion部分和HLog部分,HRegion部分由很多個HRegion組成,每一個HRegion又由很多個Store組成,每一個Store存儲的實際上是一個列族(ColumnFamily)下的數據。在此的ColumnFamily與上一期介紹的Table中的ColumnFamily對應,由此可以看出ColumnFamily是一個集中的存儲單元,因此具有相同I/O特性的列應儘量設計在一個ColumnFamily中,這樣最高效。

Store存儲是HBase存儲的核心,它由兩部分組成:一部分是MemStore,一部分是StoreFile。用戶寫入的數據首先會放入MemStore,當MemStore寫滿了以後會將其變成一個StoreFile。由於MemStore運行在內存中,所以用戶只要完成數據寫入內存就可以立即返回,保證了Hbase I/O高性能。當StoreFile文件數量增長到一定的閾值時會觸發合併操作,將多個StoreFile合併成一個StoreFile,合併的過程中會將冗餘的數據進行刪除或合併的操作。StoreFile在完成合並操作以後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後會觸發拆分操作,同時把當前的StoreFile拆分成2個子文件,並分別分配到相應的HRegionServer上,這麼做的目的是避免StoreFile文件過大導致單個Region壓力較大,起到壓力分擔的效果。

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HRegionServer包含兩大部分:HRegion部分和HLog部分,HRegion部分由很多個HRegion組成,每一個HRegion又由很多個Store組成,每一個Store存儲的實際上是一個列族(ColumnFamily)下的數據。在此的ColumnFamily與上一期介紹的Table中的ColumnFamily對應,由此可以看出ColumnFamily是一個集中的存儲單元,因此具有相同I/O特性的列應儘量設計在一個ColumnFamily中,這樣最高效。

Store存儲是HBase存儲的核心,它由兩部分組成:一部分是MemStore,一部分是StoreFile。用戶寫入的數據首先會放入MemStore,當MemStore寫滿了以後會將其變成一個StoreFile。由於MemStore運行在內存中,所以用戶只要完成數據寫入內存就可以立即返回,保證了Hbase I/O高性能。當StoreFile文件數量增長到一定的閾值時會觸發合併操作,將多個StoreFile合併成一個StoreFile,合併的過程中會將冗餘的數據進行刪除或合併的操作。StoreFile在完成合並操作以後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後會觸發拆分操作,同時把當前的StoreFile拆分成2個子文件,並分別分配到相應的HRegionServer上,這麼做的目的是避免StoreFile文件過大導致單個Region壓力較大,起到壓力分擔的效果。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HLog用來存儲數據日誌,其採用的是先寫日誌的方式,即數據在寫入MemStore之前,會先寫一份數據到HLog文件之中。HLog文件會定期滾動保存新的數據,刪除已經存入StoreFile的數據。這麼做的原因在於當HRegionServer出現意外終止時,MemStore仍在內存中運行,保存在其中的數據將會丟失。此時HMaster首先會處理遺留的HLog文件,將不同Region的Log數據進行拆分,分別放到相應的Region之下,再將失效的Region重新分配。領取這些Region的HRegionServer在Load Region的過程中,會發現有歷史的HLog需要處理,因此會重新加載HLog中的數據到MemStore中,然後保存到StoreFile,以此完成數據恢復。

Hbase的存儲格式

Hbase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括HFile和HLogFile兩種文件格式。

HFile存儲格式

HFile是一種二進制格式文件,用於存儲Hbase裡的Key-Value數據。實際上StoreFile就是對HFile做了輕量級包裝整合,即StoreFile底層就是HFile。

HFile主要分為六個部分:

1) Data Block:保存表中的數據。

2) Meta Block:保存用戶自定義的Key-Value鍵值對。

3) File Info:保存HFile的元信息。

4) Data Block Index:Data Block的索引,每條索引的key是被索引的Block的第一條記錄的key。

5) Meta Block Index:Meta Block的索引。

6) Trailer:保存了每一段的偏移量。

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HRegionServer包含兩大部分:HRegion部分和HLog部分,HRegion部分由很多個HRegion組成,每一個HRegion又由很多個Store組成,每一個Store存儲的實際上是一個列族(ColumnFamily)下的數據。在此的ColumnFamily與上一期介紹的Table中的ColumnFamily對應,由此可以看出ColumnFamily是一個集中的存儲單元,因此具有相同I/O特性的列應儘量設計在一個ColumnFamily中,這樣最高效。

Store存儲是HBase存儲的核心,它由兩部分組成:一部分是MemStore,一部分是StoreFile。用戶寫入的數據首先會放入MemStore,當MemStore寫滿了以後會將其變成一個StoreFile。由於MemStore運行在內存中,所以用戶只要完成數據寫入內存就可以立即返回,保證了Hbase I/O高性能。當StoreFile文件數量增長到一定的閾值時會觸發合併操作,將多個StoreFile合併成一個StoreFile,合併的過程中會將冗餘的數據進行刪除或合併的操作。StoreFile在完成合並操作以後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後會觸發拆分操作,同時把當前的StoreFile拆分成2個子文件,並分別分配到相應的HRegionServer上,這麼做的目的是避免StoreFile文件過大導致單個Region壓力較大,起到壓力分擔的效果。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HLog用來存儲數據日誌,其採用的是先寫日誌的方式,即數據在寫入MemStore之前,會先寫一份數據到HLog文件之中。HLog文件會定期滾動保存新的數據,刪除已經存入StoreFile的數據。這麼做的原因在於當HRegionServer出現意外終止時,MemStore仍在內存中運行,保存在其中的數據將會丟失。此時HMaster首先會處理遺留的HLog文件,將不同Region的Log數據進行拆分,分別放到相應的Region之下,再將失效的Region重新分配。領取這些Region的HRegionServer在Load Region的過程中,會發現有歷史的HLog需要處理,因此會重新加載HLog中的數據到MemStore中,然後保存到StoreFile,以此完成數據恢復。

Hbase的存儲格式

Hbase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括HFile和HLogFile兩種文件格式。

HFile存儲格式

HFile是一種二進制格式文件,用於存儲Hbase裡的Key-Value數據。實際上StoreFile就是對HFile做了輕量級包裝整合,即StoreFile底層就是HFile。

HFile主要分為六個部分:

1) Data Block:保存表中的數據。

2) Meta Block:保存用戶自定義的Key-Value鍵值對。

3) File Info:保存HFile的元信息。

4) Data Block Index:Data Block的索引,每條索引的key是被索引的Block的第一條記錄的key。

5) Meta Block Index:Meta Block的索引。

6) Trailer:保存了每一段的偏移量。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

其中,Data Block和Meta Block通常採用壓縮方式存儲,這樣能大大減少磁盤I/O,但是會增加CPU壓縮和解壓縮的開銷。

HLogFile存儲格式

HLogFile的存儲格式是WAL(Write Ahead Log),記錄了數據的所有變更,一旦數據修改,就可以從Log中進行恢復。每個RegionServer維護一個HLog,這樣不同Region的日誌會混在一起,目的是不斷的追加單個文件,同時寫多個文件時可以減少磁盤尋址次數,提高I/O能力。但這樣做也有缺陷,如果RegionServer下線,為了恢復其上的數據時,需要對RegionServer上的Log進行拆分,然後分發到其他Region上進行恢復。

HLogFile從物理意義上看是一個普通的Hadoop Sequence File。Sequence File 的Key是HLogKey對象,記錄了寫入數據的歸屬信息。HlogSequeceFile 的Value 是HBase的KeyValue對象,即對應HFile中的KeyValue。HLogFile的存儲格式如下圖所示:

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HRegionServer包含兩大部分:HRegion部分和HLog部分,HRegion部分由很多個HRegion組成,每一個HRegion又由很多個Store組成,每一個Store存儲的實際上是一個列族(ColumnFamily)下的數據。在此的ColumnFamily與上一期介紹的Table中的ColumnFamily對應,由此可以看出ColumnFamily是一個集中的存儲單元,因此具有相同I/O特性的列應儘量設計在一個ColumnFamily中,這樣最高效。

Store存儲是HBase存儲的核心,它由兩部分組成:一部分是MemStore,一部分是StoreFile。用戶寫入的數據首先會放入MemStore,當MemStore寫滿了以後會將其變成一個StoreFile。由於MemStore運行在內存中,所以用戶只要完成數據寫入內存就可以立即返回,保證了Hbase I/O高性能。當StoreFile文件數量增長到一定的閾值時會觸發合併操作,將多個StoreFile合併成一個StoreFile,合併的過程中會將冗餘的數據進行刪除或合併的操作。StoreFile在完成合並操作以後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後會觸發拆分操作,同時把當前的StoreFile拆分成2個子文件,並分別分配到相應的HRegionServer上,這麼做的目的是避免StoreFile文件過大導致單個Region壓力較大,起到壓力分擔的效果。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HLog用來存儲數據日誌,其採用的是先寫日誌的方式,即數據在寫入MemStore之前,會先寫一份數據到HLog文件之中。HLog文件會定期滾動保存新的數據,刪除已經存入StoreFile的數據。這麼做的原因在於當HRegionServer出現意外終止時,MemStore仍在內存中運行,保存在其中的數據將會丟失。此時HMaster首先會處理遺留的HLog文件,將不同Region的Log數據進行拆分,分別放到相應的Region之下,再將失效的Region重新分配。領取這些Region的HRegionServer在Load Region的過程中,會發現有歷史的HLog需要處理,因此會重新加載HLog中的數據到MemStore中,然後保存到StoreFile,以此完成數據恢復。

Hbase的存儲格式

Hbase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括HFile和HLogFile兩種文件格式。

HFile存儲格式

HFile是一種二進制格式文件,用於存儲Hbase裡的Key-Value數據。實際上StoreFile就是對HFile做了輕量級包裝整合,即StoreFile底層就是HFile。

HFile主要分為六個部分:

1) Data Block:保存表中的數據。

2) Meta Block:保存用戶自定義的Key-Value鍵值對。

3) File Info:保存HFile的元信息。

4) Data Block Index:Data Block的索引,每條索引的key是被索引的Block的第一條記錄的key。

5) Meta Block Index:Meta Block的索引。

6) Trailer:保存了每一段的偏移量。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

其中,Data Block和Meta Block通常採用壓縮方式存儲,這樣能大大減少磁盤I/O,但是會增加CPU壓縮和解壓縮的開銷。

HLogFile存儲格式

HLogFile的存儲格式是WAL(Write Ahead Log),記錄了數據的所有變更,一旦數據修改,就可以從Log中進行恢復。每個RegionServer維護一個HLog,這樣不同Region的日誌會混在一起,目的是不斷的追加單個文件,同時寫多個文件時可以減少磁盤尋址次數,提高I/O能力。但這樣做也有缺陷,如果RegionServer下線,為了恢復其上的數據時,需要對RegionServer上的Log進行拆分,然後分發到其他Region上進行恢復。

HLogFile從物理意義上看是一個普通的Hadoop Sequence File。Sequence File 的Key是HLogKey對象,記錄了寫入數據的歸屬信息。HlogSequeceFile 的Value 是HBase的KeyValue對象,即對應HFile中的KeyValue。HLogFile的存儲格式如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

這下對大數據之Hadoop-hbase有個瞭解了吧?想要更深入學習的話,小編這裡有一套大數據從入門道精通的視頻教程~~~

大家只需要轉發此文,關注小編之後,私信小編“學習”就可以拿到手了~~~~~~~還有馬老師的Java基礎視頻教程附贈~~~

"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HRegionServer包含兩大部分:HRegion部分和HLog部分,HRegion部分由很多個HRegion組成,每一個HRegion又由很多個Store組成,每一個Store存儲的實際上是一個列族(ColumnFamily)下的數據。在此的ColumnFamily與上一期介紹的Table中的ColumnFamily對應,由此可以看出ColumnFamily是一個集中的存儲單元,因此具有相同I/O特性的列應儘量設計在一個ColumnFamily中,這樣最高效。

Store存儲是HBase存儲的核心,它由兩部分組成:一部分是MemStore,一部分是StoreFile。用戶寫入的數據首先會放入MemStore,當MemStore寫滿了以後會將其變成一個StoreFile。由於MemStore運行在內存中,所以用戶只要完成數據寫入內存就可以立即返回,保證了Hbase I/O高性能。當StoreFile文件數量增長到一定的閾值時會觸發合併操作,將多個StoreFile合併成一個StoreFile,合併的過程中會將冗餘的數據進行刪除或合併的操作。StoreFile在完成合並操作以後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後會觸發拆分操作,同時把當前的StoreFile拆分成2個子文件,並分別分配到相應的HRegionServer上,這麼做的目的是避免StoreFile文件過大導致單個Region壓力較大,起到壓力分擔的效果。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HLog用來存儲數據日誌,其採用的是先寫日誌的方式,即數據在寫入MemStore之前,會先寫一份數據到HLog文件之中。HLog文件會定期滾動保存新的數據,刪除已經存入StoreFile的數據。這麼做的原因在於當HRegionServer出現意外終止時,MemStore仍在內存中運行,保存在其中的數據將會丟失。此時HMaster首先會處理遺留的HLog文件,將不同Region的Log數據進行拆分,分別放到相應的Region之下,再將失效的Region重新分配。領取這些Region的HRegionServer在Load Region的過程中,會發現有歷史的HLog需要處理,因此會重新加載HLog中的數據到MemStore中,然後保存到StoreFile,以此完成數據恢復。

Hbase的存儲格式

Hbase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括HFile和HLogFile兩種文件格式。

HFile存儲格式

HFile是一種二進制格式文件,用於存儲Hbase裡的Key-Value數據。實際上StoreFile就是對HFile做了輕量級包裝整合,即StoreFile底層就是HFile。

HFile主要分為六個部分:

1) Data Block:保存表中的數據。

2) Meta Block:保存用戶自定義的Key-Value鍵值對。

3) File Info:保存HFile的元信息。

4) Data Block Index:Data Block的索引,每條索引的key是被索引的Block的第一條記錄的key。

5) Meta Block Index:Meta Block的索引。

6) Trailer:保存了每一段的偏移量。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

其中,Data Block和Meta Block通常採用壓縮方式存儲,這樣能大大減少磁盤I/O,但是會增加CPU壓縮和解壓縮的開銷。

HLogFile存儲格式

HLogFile的存儲格式是WAL(Write Ahead Log),記錄了數據的所有變更,一旦數據修改,就可以從Log中進行恢復。每個RegionServer維護一個HLog,這樣不同Region的日誌會混在一起,目的是不斷的追加單個文件,同時寫多個文件時可以減少磁盤尋址次數,提高I/O能力。但這樣做也有缺陷,如果RegionServer下線,為了恢復其上的數據時,需要對RegionServer上的Log進行拆分,然後分發到其他Region上進行恢復。

HLogFile從物理意義上看是一個普通的Hadoop Sequence File。Sequence File 的Key是HLogKey對象,記錄了寫入數據的歸屬信息。HlogSequeceFile 的Value 是HBase的KeyValue對象,即對應HFile中的KeyValue。HLogFile的存儲格式如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

這下對大數據之Hadoop-hbase有個瞭解了吧?想要更深入學習的話,小編這裡有一套大數據從入門道精通的視頻教程~~~

大家只需要轉發此文,關注小編之後,私信小編“學習”就可以拿到手了~~~~~~~還有馬老師的Java基礎視頻教程附贈~~~

連你也能看懂的大數據之Hadoop——Hbase,得之幸之
"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HRegionServer包含兩大部分:HRegion部分和HLog部分,HRegion部分由很多個HRegion組成,每一個HRegion又由很多個Store組成,每一個Store存儲的實際上是一個列族(ColumnFamily)下的數據。在此的ColumnFamily與上一期介紹的Table中的ColumnFamily對應,由此可以看出ColumnFamily是一個集中的存儲單元,因此具有相同I/O特性的列應儘量設計在一個ColumnFamily中,這樣最高效。

Store存儲是HBase存儲的核心,它由兩部分組成:一部分是MemStore,一部分是StoreFile。用戶寫入的數據首先會放入MemStore,當MemStore寫滿了以後會將其變成一個StoreFile。由於MemStore運行在內存中,所以用戶只要完成數據寫入內存就可以立即返回,保證了Hbase I/O高性能。當StoreFile文件數量增長到一定的閾值時會觸發合併操作,將多個StoreFile合併成一個StoreFile,合併的過程中會將冗餘的數據進行刪除或合併的操作。StoreFile在完成合並操作以後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後會觸發拆分操作,同時把當前的StoreFile拆分成2個子文件,並分別分配到相應的HRegionServer上,這麼做的目的是避免StoreFile文件過大導致單個Region壓力較大,起到壓力分擔的效果。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HLog用來存儲數據日誌,其採用的是先寫日誌的方式,即數據在寫入MemStore之前,會先寫一份數據到HLog文件之中。HLog文件會定期滾動保存新的數據,刪除已經存入StoreFile的數據。這麼做的原因在於當HRegionServer出現意外終止時,MemStore仍在內存中運行,保存在其中的數據將會丟失。此時HMaster首先會處理遺留的HLog文件,將不同Region的Log數據進行拆分,分別放到相應的Region之下,再將失效的Region重新分配。領取這些Region的HRegionServer在Load Region的過程中,會發現有歷史的HLog需要處理,因此會重新加載HLog中的數據到MemStore中,然後保存到StoreFile,以此完成數據恢復。

Hbase的存儲格式

Hbase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括HFile和HLogFile兩種文件格式。

HFile存儲格式

HFile是一種二進制格式文件,用於存儲Hbase裡的Key-Value數據。實際上StoreFile就是對HFile做了輕量級包裝整合,即StoreFile底層就是HFile。

HFile主要分為六個部分:

1) Data Block:保存表中的數據。

2) Meta Block:保存用戶自定義的Key-Value鍵值對。

3) File Info:保存HFile的元信息。

4) Data Block Index:Data Block的索引,每條索引的key是被索引的Block的第一條記錄的key。

5) Meta Block Index:Meta Block的索引。

6) Trailer:保存了每一段的偏移量。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

其中,Data Block和Meta Block通常採用壓縮方式存儲,這樣能大大減少磁盤I/O,但是會增加CPU壓縮和解壓縮的開銷。

HLogFile存儲格式

HLogFile的存儲格式是WAL(Write Ahead Log),記錄了數據的所有變更,一旦數據修改,就可以從Log中進行恢復。每個RegionServer維護一個HLog,這樣不同Region的日誌會混在一起,目的是不斷的追加單個文件,同時寫多個文件時可以減少磁盤尋址次數,提高I/O能力。但這樣做也有缺陷,如果RegionServer下線,為了恢復其上的數據時,需要對RegionServer上的Log進行拆分,然後分發到其他Region上進行恢復。

HLogFile從物理意義上看是一個普通的Hadoop Sequence File。Sequence File 的Key是HLogKey對象,記錄了寫入數據的歸屬信息。HlogSequeceFile 的Value 是HBase的KeyValue對象,即對應HFile中的KeyValue。HLogFile的存儲格式如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

這下對大數據之Hadoop-hbase有個瞭解了吧?想要更深入學習的話,小編這裡有一套大數據從入門道精通的視頻教程~~~

大家只需要轉發此文,關注小編之後,私信小編“學習”就可以拿到手了~~~~~~~還有馬老師的Java基礎視頻教程附贈~~~

連你也能看懂的大數據之Hadoop——Hbase,得之幸之
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HRegionServer包含兩大部分:HRegion部分和HLog部分,HRegion部分由很多個HRegion組成,每一個HRegion又由很多個Store組成,每一個Store存儲的實際上是一個列族(ColumnFamily)下的數據。在此的ColumnFamily與上一期介紹的Table中的ColumnFamily對應,由此可以看出ColumnFamily是一個集中的存儲單元,因此具有相同I/O特性的列應儘量設計在一個ColumnFamily中,這樣最高效。

Store存儲是HBase存儲的核心,它由兩部分組成:一部分是MemStore,一部分是StoreFile。用戶寫入的數據首先會放入MemStore,當MemStore寫滿了以後會將其變成一個StoreFile。由於MemStore運行在內存中,所以用戶只要完成數據寫入內存就可以立即返回,保證了Hbase I/O高性能。當StoreFile文件數量增長到一定的閾值時會觸發合併操作,將多個StoreFile合併成一個StoreFile,合併的過程中會將冗餘的數據進行刪除或合併的操作。StoreFile在完成合並操作以後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後會觸發拆分操作,同時把當前的StoreFile拆分成2個子文件,並分別分配到相應的HRegionServer上,這麼做的目的是避免StoreFile文件過大導致單個Region壓力較大,起到壓力分擔的效果。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HLog用來存儲數據日誌,其採用的是先寫日誌的方式,即數據在寫入MemStore之前,會先寫一份數據到HLog文件之中。HLog文件會定期滾動保存新的數據,刪除已經存入StoreFile的數據。這麼做的原因在於當HRegionServer出現意外終止時,MemStore仍在內存中運行,保存在其中的數據將會丟失。此時HMaster首先會處理遺留的HLog文件,將不同Region的Log數據進行拆分,分別放到相應的Region之下,再將失效的Region重新分配。領取這些Region的HRegionServer在Load Region的過程中,會發現有歷史的HLog需要處理,因此會重新加載HLog中的數據到MemStore中,然後保存到StoreFile,以此完成數據恢復。

Hbase的存儲格式

Hbase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括HFile和HLogFile兩種文件格式。

HFile存儲格式

HFile是一種二進制格式文件,用於存儲Hbase裡的Key-Value數據。實際上StoreFile就是對HFile做了輕量級包裝整合,即StoreFile底層就是HFile。

HFile主要分為六個部分:

1) Data Block:保存表中的數據。

2) Meta Block:保存用戶自定義的Key-Value鍵值對。

3) File Info:保存HFile的元信息。

4) Data Block Index:Data Block的索引,每條索引的key是被索引的Block的第一條記錄的key。

5) Meta Block Index:Meta Block的索引。

6) Trailer:保存了每一段的偏移量。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

其中,Data Block和Meta Block通常採用壓縮方式存儲,這樣能大大減少磁盤I/O,但是會增加CPU壓縮和解壓縮的開銷。

HLogFile存儲格式

HLogFile的存儲格式是WAL(Write Ahead Log),記錄了數據的所有變更,一旦數據修改,就可以從Log中進行恢復。每個RegionServer維護一個HLog,這樣不同Region的日誌會混在一起,目的是不斷的追加單個文件,同時寫多個文件時可以減少磁盤尋址次數,提高I/O能力。但這樣做也有缺陷,如果RegionServer下線,為了恢復其上的數據時,需要對RegionServer上的Log進行拆分,然後分發到其他Region上進行恢復。

HLogFile從物理意義上看是一個普通的Hadoop Sequence File。Sequence File 的Key是HLogKey對象,記錄了寫入數據的歸屬信息。HlogSequeceFile 的Value 是HBase的KeyValue對象,即對應HFile中的KeyValue。HLogFile的存儲格式如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

這下對大數據之Hadoop-hbase有個瞭解了吧?想要更深入學習的話,小編這裡有一套大數據從入門道精通的視頻教程~~~

大家只需要轉發此文,關注小編之後,私信小編“學習”就可以拿到手了~~~~~~~還有馬老師的Java基礎視頻教程附贈~~~

連你也能看懂的大數據之Hadoop——Hbase,得之幸之
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
"

通過之前的介紹,我們瞭解了Hadoop框架下兩個核心技術,我們發現這兩個核心技術有一個共同的不足:操作數據延時性較高,不適合實時操作的場景。那麼今天我們來看看Hadoop框架下可以實現實時讀寫訪問的組件——Hbase。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

工程師

什麼是Hbase?

曉智

Hbase全稱為Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase在Hadoop生態圈中的位置

通過之前的介紹我們瞭解到:MapReduce是Hadoop生態圈中的分佈式計算框架,HDFS為Hadoop生態圈中的分佈式文件存儲的服務,那麼Hbase在Hadoop框架中扮演著什麼樣的角色呢?簡單來說,Hbase類似於傳統的關係型數據庫,是Hadoop框架中的結構化數據存儲服務,是一種列式的分佈式數據庫。換言之:HDFS管理的是存放在多個硬盤上的數據文件,而Hbase管理的是類似於key—value映射的表。即便如此,Hbase的底層依舊依賴 HDFS 來作為其物理存儲。

此外,Hbase的工作還需要zookeeper的協助,Zookeeper在此提供一些配置服務,維護元信息和命名空間等服務,Hbase在Hadoop生態圈中的位置如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Hbase與傳統關係數據庫的區別

在傳統的數據庫RDBMS(Relational Database Management System)中,數據是按照行存儲的,沒有索引的查詢將使用大量的I/O,建立索引和視圖需要花費大量的時間和資源,面對查詢需求,數據庫必須大量膨脹才能滿足性能要求。而在Hbase中,數據是按列存儲的,查詢時只訪問所涉及的列,大量降低系統I/O,數據類型一致,可以高效壓縮存儲。下面我們來具體看看數據在兩類數據庫中排布方式的區別:

  • 數據在 RDBMS 中的排布示例
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
  • 數據在 HBase 中的排布(邏輯上)
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

從上面示例表中,我們可以看出,在 HBase 中有Column Family 的概念,簡稱為 CF。CF 一般用於將相關的列(Column)組合起來。上述例子中,“姓”和“名”組合成為info,組合的形式是類似於字典的key-value形式。在物理上 HBase 其實是按 CF 存儲的,只是按照 Row-key 將相關 CF 中的列關聯起來。物理上的數據排布大致可以如下表所示。

  • 數據在 HBase 中的排布
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

在瞭解了兩種數據庫在數據排布方式上的區別後,我們來看看它們在其他方面的區別,具體如下表所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

通過對比Hbase和RDBMS的區別,我們可以發現Hbase對數據的存儲方式和數據結構進行了修改和規整,讓其更加善於去處理大數據的場景,但也因此導致Hbase有其對應的侷限性。Hbase的設計目標並不是替代RDBMS,而是對RDBMS的一個重要補充。因此我們在使用的時候,應該按照具體應用場景來判斷該使用哪種類型的數據庫。

HBase的特點和侷限

  • 特點:

1)表規模大:一個表可以有上億行,上百萬列。

2)面向列:面向列的存儲和權限控制,列獨立檢索。

3)稀疏性:對於為空的列,並不佔用存儲空間,因此表可以設計的非常稀疏。

  • 侷限:

1)只能做簡單的key-value查詢,複雜的統計sql做不到。

2)只能在row-key 上做快速查詢。


上一期我們瞭解了Hbase是一個高可靠性、高性能、面向列、可伸縮的分佈式數據庫,並且對比了它與傳統關係數據庫的區別。本期我們來看看Hbase 背後的原理,瞭解它是如何實現高效I/O的。

Hbase的存儲結構

Hbase的存儲結構基於Hadoop的HDFS存儲,所以Hbase的存儲具備HDFS的特性。Hbase的存儲結構如下圖所示,我們來一一解讀圖中的關鍵角色。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

Client

Hbase的客戶端Client使用遠程過程調用(RPC)與HMaster和HRegionServer進行通信,如果接受到用戶管理類請求,則Hbase Client與HMaster進行通信,如果接受到用戶數據讀寫類請求,則Hbase Client與HRegionSever進行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也會將自己註冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也保證了集群中總有一個Master在運行。

HMaster

HMaster和HRegionServer依然遵從簡單的主從關係,其體系結構圖如下所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HMaster服務器負責管理所有的HRegion服務器和Table表,其本身不存儲數據。HMaster主要實現的功能包括:

  • 管理用戶對Table的增刪改查操作。
  • 管理HRegionServer的負載均衡,調整HRegion的分佈。
  • 在Region 拆分以後,負責新Region的分配。
  • 當HRegionServer停機以後,負責Region的遷移。

HRegionServer

HRegionServer主要負責響應用戶I/O需求,向HDFS文件系統中讀寫數據,是Hbase最核心的模塊。原理如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HRegionServer包含兩大部分:HRegion部分和HLog部分,HRegion部分由很多個HRegion組成,每一個HRegion又由很多個Store組成,每一個Store存儲的實際上是一個列族(ColumnFamily)下的數據。在此的ColumnFamily與上一期介紹的Table中的ColumnFamily對應,由此可以看出ColumnFamily是一個集中的存儲單元,因此具有相同I/O特性的列應儘量設計在一個ColumnFamily中,這樣最高效。

Store存儲是HBase存儲的核心,它由兩部分組成:一部分是MemStore,一部分是StoreFile。用戶寫入的數據首先會放入MemStore,當MemStore寫滿了以後會將其變成一個StoreFile。由於MemStore運行在內存中,所以用戶只要完成數據寫入內存就可以立即返回,保證了Hbase I/O高性能。當StoreFile文件數量增長到一定的閾值時會觸發合併操作,將多個StoreFile合併成一個StoreFile,合併的過程中會將冗餘的數據進行刪除或合併的操作。StoreFile在完成合並操作以後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後會觸發拆分操作,同時把當前的StoreFile拆分成2個子文件,並分別分配到相應的HRegionServer上,這麼做的目的是避免StoreFile文件過大導致單個Region壓力較大,起到壓力分擔的效果。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

HLog用來存儲數據日誌,其採用的是先寫日誌的方式,即數據在寫入MemStore之前,會先寫一份數據到HLog文件之中。HLog文件會定期滾動保存新的數據,刪除已經存入StoreFile的數據。這麼做的原因在於當HRegionServer出現意外終止時,MemStore仍在內存中運行,保存在其中的數據將會丟失。此時HMaster首先會處理遺留的HLog文件,將不同Region的Log數據進行拆分,分別放到相應的Region之下,再將失效的Region重新分配。領取這些Region的HRegionServer在Load Region的過程中,會發現有歷史的HLog需要處理,因此會重新加載HLog中的數據到MemStore中,然後保存到StoreFile,以此完成數據恢復。

Hbase的存儲格式

Hbase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括HFile和HLogFile兩種文件格式。

HFile存儲格式

HFile是一種二進制格式文件,用於存儲Hbase裡的Key-Value數據。實際上StoreFile就是對HFile做了輕量級包裝整合,即StoreFile底層就是HFile。

HFile主要分為六個部分:

1) Data Block:保存表中的數據。

2) Meta Block:保存用戶自定義的Key-Value鍵值對。

3) File Info:保存HFile的元信息。

4) Data Block Index:Data Block的索引,每條索引的key是被索引的Block的第一條記錄的key。

5) Meta Block Index:Meta Block的索引。

6) Trailer:保存了每一段的偏移量。

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

其中,Data Block和Meta Block通常採用壓縮方式存儲,這樣能大大減少磁盤I/O,但是會增加CPU壓縮和解壓縮的開銷。

HLogFile存儲格式

HLogFile的存儲格式是WAL(Write Ahead Log),記錄了數據的所有變更,一旦數據修改,就可以從Log中進行恢復。每個RegionServer維護一個HLog,這樣不同Region的日誌會混在一起,目的是不斷的追加單個文件,同時寫多個文件時可以減少磁盤尋址次數,提高I/O能力。但這樣做也有缺陷,如果RegionServer下線,為了恢復其上的數據時,需要對RegionServer上的Log進行拆分,然後分發到其他Region上進行恢復。

HLogFile從物理意義上看是一個普通的Hadoop Sequence File。Sequence File 的Key是HLogKey對象,記錄了寫入數據的歸屬信息。HlogSequeceFile 的Value 是HBase的KeyValue對象,即對應HFile中的KeyValue。HLogFile的存儲格式如下圖所示:

連你也能看懂的大數據之Hadoop——Hbase,得之幸之

這下對大數據之Hadoop-hbase有個瞭解了吧?想要更深入學習的話,小編這裡有一套大數據從入門道精通的視頻教程~~~

大家只需要轉發此文,關注小編之後,私信小編“學習”就可以拿到手了~~~~~~~還有馬老師的Java基礎視頻教程附贈~~~

連你也能看懂的大數據之Hadoop——Hbase,得之幸之
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
連你也能看懂的大數據之Hadoop——Hbase,得之幸之
連你也能看懂的大數據之Hadoop——Hbase,得之幸之

附贈

"

相關推薦

推薦中...