HBase(01)——HBase資料庫基礎
HBase資料庫介紹
HBase是基於Google BigTable模型開發的,典型的key/value系統。正如Bigtable利用Google檔案系統提供的分散式資料儲存一樣,HBase在Hadoop和HDFS之上提供類似Bigtable的功能。 它是建立在hdfs之上,提供高可靠性、高效能、列儲存、可伸縮、實時讀寫nosql的資料庫系統。 它是Apache Hadoop生態系統中的重要一員,主要用於海量結構化和半結構化資料儲存。 它介於nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索資料,僅支援單行事務(可通過hive支援來實現多表join等複雜操作)。 HBase查詢資料功能很簡單,不支援join等複雜操作,不支援複雜的事務(行級的事務) 與hadoop一樣,Hbase目標主要依靠橫向擴充套件
HBase特點
(翻譯自官網) 線性、模組化、可擴充套件。 嚴格一致的讀寫操作。 表的自動和可配置分片 RegionServers之間的自動故障轉移支援,高可用性。 HBase表支援Hadoop MapReduce作業。 易於使用的Java API,用於客戶端訪問。 阻塞快取和Bloom Filters以進行實時查詢。 提供了跨叢集資料複製。
HBase的儲存機制
HBase是一個面向列的資料庫,在表中它由行排序。 表模式定義只能列族,也就是鍵值對。一個表有多個列族以及每一個列族可以有任意數量的列。後續列的值連續地儲存在磁碟上。表中的每個單元格值都具有時間戳。 總之,在一個HBase: 表是行的集合。 行是列族的集合。 列族是列的集合。 列是鍵值對的集合。 注: 面向列的資料庫是儲存資料表作為資料列的部分,而不是作為行資料。它們擁有列族。
行式資料庫 | 列式資料庫 |
---|---|
它適用於聯機事務處理(OLTP)。 | 它適用於線上分析處理(OLAP)。 |
這樣的資料庫被設計為小數目的行和列。 | 面向列的資料庫設計的巨大表。 |
HBase中的表的特點
大:一個表可以有上十億行,上百萬列 無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態的增加,同一張表中不同的行可以有截然不同的列; 面向列:面向列(族)的儲存和許可權控制,列(族)獨立檢索。 稀疏:對於為空(null)的列,並不佔用儲存空間,因此,表可以設計的非常稀疏。 資料多版本:每個單元中的資料可以有多個版本,預設情況下版本號自動分配,是單元格插入時的時間戳 資料型別單一:Hbase中的資料都是位元組陣列 byte[]。
HBase | RDBMS |
---|---|
無模式,不具有固定列模式的概念;僅定義列族。 | 有模式,描述表的整體結構的約束。 |
專門建立為寬表。 HBase是橫向擴充套件。 | 都是細而專的小表。很難形成規模。 |
沒有任何事務。 | RDBMS是事務性的。 |
反規範化的資料。 | 具有規範化的資料。 |
適合用於半結構以及結構化資料。 | 適合用於結構化資料。 |