Hbase5分鐘入門(白話讀寫流程)

HBase介紹

1、關係型數據庫與非關係型數據庫

(1)關係型數據庫

在這裏插入圖片描述
​ 關係型數據庫最典型的數據機構是表,由二維表及其之間的聯繫所組成的一個數據組織

優點:

​ 1、易於維護:都是使用表結構,格式一致

​ 2、使用方便:SQL語言通用,可用於複雜查詢

​ 3、複雜操作:支持SQL,可用於一個表以及多個表之間非常複雜的查詢

缺點:

​ 1、讀寫性能比較差,尤其是海量數據的高效率讀寫

​ 2、固定的表結構,靈活度稍欠

​ 3、高併發讀寫需求,傳統關係型數據庫,硬盤IO是一個很大的瓶頸

(2)非關係型數據庫

在這裏插入圖片描述

​ 非關係型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合,可以是文檔或鍵值對

優點:

​ 1、格式靈活:存儲數據的格式可以是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片 形式等等,使用靈活,應用場景廣泛,而關係型數據庫則只支持基礎類型。

​ 2、速度快:nosql可以使用硬盤或者隨機存儲器作爲載體,而關係型數據庫只能使用硬盤

​ 3、高擴展性

​ 4、成本低:nosql數據庫部署簡單,基本都是開源軟件

缺點:

​ 1、不提供sql支持,學習和使用成本較高;

​ 2、無事務處理

​ 3、數據結構相對複雜,複雜查詢方面稍欠

2、HBase簡介

	Use Apache HBase™ when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.

​ HBase的全稱是Hadoop Database,是一個高可靠性,高性能、面向列、可伸縮、實時讀寫的分佈式數據庫。

​ 利用Hadoop HDFS作爲其文件存儲系統,利用Hadoop MapReduce來處理HBase中的海量數據,利用Zookeeper作爲其分佈式協同服務。

​ 主要用來存儲非結構化和半結構化數據的鬆散數據(列存NoSQL數據庫)。

​ 注意:NoSQL的全稱是Not Only SQL,泛指非關係型數據庫。

3、HBase數據模型

在這裏插入圖片描述

(1)rowkey

​ (1)決定一行數據,每行記錄的唯一標識

​ (2)按照字典序排序

​ (3)RowKey只能存儲64K的字節數據

(2)Column Family & Qualifier

​ (1)HBase表中的每個列都歸屬於某個列族,列族必須作爲表模式(schema)定義的一部分預先給出。如 create ‘test’, ‘course’;

​ (2)列名以列族作爲前綴,每個“列族”都可以有多個列成員(column);如course:math, course:english, 新的列族成員(列)可以隨後按需、動態加入;

​ (3)權限控制、存儲以及調優都是在列族層面進行的;

​ (4)HBase把同一列族裏面的數據存儲在同一目錄下,由幾個文件保存。

(3)TimeStamp時間戳

​ (1)在HBase每個cell存儲單元對同一份數據有多個版本,根據唯一的時間戳來區分每個版本之間的差異,不同版本的數據按照時間倒序排序,最新的數據版本排在最前面。

​ (2)時間戳的類型是 64位整型。

​ (3)時間戳可以由HBase(在數據寫入時自動)賦值,此時間戳是精確到毫秒的當前系統時間。

​ (4)時間戳也可以由客戶顯式賦值,如果應用程序要避免數據版本衝突,就必須自己生成具有唯一性的時間戳。

(4)Cell單元格

​ (1)由行和列的座標交叉決定;

​ (2)單元格是有版本的;

​ (3)單元格的內容是未解析的字節數組;

​ 1、由{row key, column( = +), version} 唯一確定的單元。
​ 2、cell中的數據是沒有類型的,全部是字節數組形式存貯。

4、HBase架構

在這裏插入圖片描述

角色介紹:

(1)Client

​ 1、包含訪問HBase的接口並維護cache來加快對HBase的訪問。

(2)Zookeeper

​ 1、保證任何時候,集羣中只有一個活躍master

​ 2、存儲所有region的尋址入口

​ 3、實時監控region server的上線和下線信息,並實時通知master

​ 4、存儲HBase的schema和table元數據

(3)Master

​ 1、爲region server分配region

​ 2、負責region server的負載均衡

​ 3、發現失效的region server並重新分配其上的region

​ 4、管理用戶對table的增刪改操作

(4)RegionServer

​ 1、region server維護region,處理對這些region的IO請求

​ 2、region server負責切分在運行過程中變得過大的region

regionserver組件介紹

(1)region

​ 1、HBase自動把表水平劃分成多個區域(region),每個region會保存一個表裏某段連續的數據

​ 2、每個表一開始只有一個region,隨着數據不斷插入表,region不斷增大,當增大到一個閾值的時候,region就會等分會兩個新的region(裂變)

​ 3、當table中的行不斷增多,就會有越來越多的region。這樣一張完整的表被保存在多個Regionserver 上。

(2)Memstore與storefile

​ 1、一個region由多個store組成,一個store對應一個CF(列族)

​ 2、store包括位於內存中的memstore和位於磁盤的storefile寫操作先寫入memstore,當memstore中的數據達到某個閾值,hregionserver會啓動flashcache進程寫入storefile,每次寫入形成單獨的一個storefile

​ 3、當storefile文件的數量增長到一定閾值後,系統會進行合併(minor、major ),在合併過程中會進行版本合併和刪除工作(majar),形成更大的storefile

​ 4、當一個region所有storefile的大小和數量超過一定閾值後,會把當前的region分割爲兩個,並由hmaster分配到相應的regionserver服務器,實現負載均衡

​ 5、客戶端檢索數據,先在memstore找,找不到去blockcache,找不到再找storefile

注意問題:

​ 1、HRegion是HBase中分佈式存儲和負載均衡的最小單元。最小單元就表示不同的HRegion可以分佈在不同的 HRegion server上。

​ 2、HRegion由一個或者多個Store組成,每個store保存一個columns family。

​ 3、每個Strore又由一個memStore和0至多個StoreFile組成。如圖:StoreFile以HFile格式保存在HDFS上。
在這裏插入圖片描述
在這裏插入圖片描述

5、HBase讀寫流程

(1)讀流程

​ 1、客戶端從zookeeper中獲取meta表所在的regionserver節點信息

​ 2、客戶端訪問meta表所在的regionserver節點,獲取到region所在的regionserver信息

​ 3、客戶端訪問具體的region所在的regionserver,找到對應的region及store

​ 4、首先從memstore中讀取數據,如果讀取到了那麼直接將數據返回,如果沒有,則去blockcache讀取數據

​ 5、如果blockcache中讀取到數據,則直接返回數據給客戶端,如果讀取不到,則遍歷storefile文件,查找數據

​ 6、如果從storefile中讀取不到數據,則返回客戶端爲空,如果讀取到數據,那麼需要將數據先緩存到blockcache中(方便下一次讀取),然後再將數據返回給客戶端。

​ 7、blockcache是內存空間,如果緩存的數據比較多,滿了之後會採用LRU策略,將比較老的數據進行刪除。

(2)寫流程

​ 1、客戶端從zookeeper中獲取meta表所在的regionserver節點信息

​ 2、客戶端訪問meta表所在的regionserver節點,獲取到region所在的regionserver信息

​ 3、客戶端訪問具體的region所在的regionserver,找到對應的region及store

​ 4、開始寫數據,寫數據的時候會先想hlog中寫一份數據(方便memstore中數據丟失後能夠根據hlog恢復數據,向hlog中寫數據的時候也是優先寫入內存,後臺會有一個線程定期異步刷寫數據到hdfs,如果hlog的數據也寫入失敗,那麼數據就會發生丟失)

​ 5、hlog寫數據完成之後,會先將數據寫入到memstore,memstore默認大小是64M,當memstore滿了之後會進行統一的溢寫操作,將memstore中的數據持久化到hdfs中,

​ 6、頻繁的溢寫會導致產生很多的小文件,因此會進行文件的合併,文件在合併的時候有兩種方式,minor和major,minor表示小範圍文件的合併,major表示將所有的storefile文件都合併成一個,具體詳細的過程,後續會講解。

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