日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

第四章-分布式数据库HBase

發布時間:2025/3/21 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四章-分布式数据库HBase 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第四章-分布式數據庫HBase

文章目錄

  • 第四章-分布式數據庫HBase
    • HBase簡介
    • HBase數據模型
      • 數據模型概念
      • 概念視圖
      • 物理視圖
      • 面向列的存儲
    • HBase實現原理
      • HBase功能組件
      • 表和Region
      • Region的定位
    • HBase運行機制
      • HBase系統架構
      • Region工作原理

HBase簡介

BigTable是一個分布式存儲系統,利用 MapReduce分布式并行計算模型來處理海量數據,使用谷歌分布式文件系統 GFS作為底層數據存儲,可以擴展到PB級別的數據和上千臺機器,具備廣泛應用性、可擴展性、高性能和高可用性等特點。

HBase是一個高可靠、高性能、面向列、可伸縮的分布式數據庫,是谷歌 BigTable的開源實現,主要用來存儲非結構化和半結構化的松散數據。HBase的目標是處理非常龐大的表,可以通過水平擴展的方式,利用廉價計算機集群處理由超過10億行數據和數百萬列元素組成的數據表。

  • 利用 MapReduce來處理 HBase中的海量數據,實現高性能運算
  • 利用 HDFS作為高可靠的底層存儲,利用廉價集群提供海量數據存儲能力
  • 利用 Zookeeper提供協同服務,實現穩定服務和錯誤恢復
  • Sqoop為 Hbase提供高效便捷的 RDBMS數據導入功能
  • Pip和 Hive提供了高層語言支持

HBase與傳統關系數據庫的區別

傳統關系數據庫HBase
數據類型采用關系模型,具有豐富的數據類型和存儲方式采用了更加簡單的數據模型,把數據存儲為未經解釋的字符串,用戶需要自己編寫程序解析字符串
數據操作包含了豐富的操作,其中會涉及復雜的多表連接不存在復雜的表與表之間的關系,只有簡單的插入、查詢、刪除、清空等,不能實現表與表的連接查詢
存儲模式基于行模式存儲基于列存儲,不同列族的文件是分離的。可以降低 I/O開銷,支持大量并發用戶查詢
數據索引通常可以針對不同列構建復雜的多個索引,以提高數據訪問性能只有一個索引——行鍵,HBase中的所有訪問方法,或通過行鍵訪問,或通過行鍵掃描
數據維護更新操作會用最新的當前值去替換記錄中原來的舊值,舊值被覆蓋后就不會存在執行更新操作時,并不會刪除數據舊的版本,而是生成一個新的版本,舊有的版本仍然保留
可伸縮性很難實現橫向擴展,縱向擴展的空間也比較有限能夠通過在集群中增加或者減少硬件數量來實現性能的伸縮

HBase也有自身的局限性,比如不支持事務,因此無法實現跨行的原子性。

HBase數據模型

數據模型概念

HBase是一個稀疏、多維度、排序的映射表,這張表的索引是行鍵、列族、列限定符和時間戳。每個值是一個未經解釋的字符串,沒有數據類型。用戶在表中存儲數據,每一行都有一個可排序的行鍵和任意多的列。

表在水平方向由一個或者多個列族組成,一個列族中可以包含任意多個列,同一個列族里面的數據存儲在一起。列族支持動態擴展,可以很輕松地添加一個列族或列,無需預先定義列的數量以及類型,所有列均以字符串形式存儲,用戶需要自行進行數據類型轉換。HBase中執行更新操作時,并不會刪除數據舊的版本, 而是生成一個新的版本,舊有的版本仍然保留。

HBase數據模型的相關概念

概念描述
HBase采用表來組織數據,表由行和列組成,列劃分為若干個列族
每個 HBase表都由若干行組成,每個行由行鍵(row key)來標識
列族一個 HBase表被分組成許多“列族”(Column Family)的集合,它是基本的訪問控制單元
列限定符列族里的數據通過列限定符(或列)來定位
單元格在 HBase表中,通過行、列族和列限定符確定一個“單元格”(cell),單元格中存儲的數據沒有數據類型,總被視為字節數組 byte[ ]。每個單元格可以保存一個數據的多個版本,對應不同的時間戳。
時間戳每個單元格都保存著同一份數據的多個版本,這些版本采用時間戳進行索引。一個單元格的不同版本是根據時間戳降序的順序進行存儲的,最新的版本可以最先被讀取

HBase中使用坐標來定位表中的數據,需要根據行鍵、列族、列限定符和時間戳來確定一個單元格,因此,可以視為一個“四維坐標”,即 [行鍵, 列族, 列限定符, 時間戳]。

鍵值
[“201505003”, “Info”, “email”, 1174184619081]“xie@qq.com”
[“201505003”, “Info”, “email”, 1174184620720]“you@163.com”

概念視圖

在 HBase的概念視圖中,一個表可以視為一個稀疏,多維的映射關系。每個行都包含相同的列族,盡管行不需要在每個列族中存儲數據。

這是一個存儲網頁的 HBase表的片段。

  • 行鍵是一個反向 URL(即 com.cnn.www),之所以這么存放,是因為 HBase是按照行鍵的字典序來排序存儲數據的,采用反向 URL的方式,可以讓來自同一個網站的數據內容都保存在一個相鄰的位置,在按照行鍵的值進行水平分區時,就可以盡量把來自同一個網站的數據劃分到同一個分區(Region)中。
  • contents列族用來存儲網頁內容。
  • anchor列族包含了任何引用這個頁面的錨鏈接文本。

物理視圖

在概念視圖層面,HBase每個表是由許多行組成的;但是在物理存儲層面,它是采用了基于列的存儲方式,這也是 HBase和傳統關系數據庫的重要區別。

上面的概念視圖在物理存儲的時候,HBase表會按照 contents、anchor這兩個列族分別存放,屬于同一個列族的數據保存在一起。同時,和每個列族一起存放的還包括行鍵和時間戳。

在概念視圖中,有些列是空的,即這些列上面不存在值。在物理視圖中,這些空的列不會被存儲成 null,而是根本就不會被存儲,當請求這些空白的單元格時,會返回 null值。

面向列的存儲

行式數據庫使用 NSM(N-ary Storage Model)存儲模型,一個元組(或行)會被連續地存儲在磁盤頁中。在從磁盤中讀取數據時,需要從磁盤中順序掃描每個元組的完整內容,然后從每個元組中篩選出查詢所需要的屬性。如果每個元組只有少量屬性的值對于查詢是有用的,那么 NSM就會浪費很多磁盤空間和內存帶寬。

列式數據庫采用 DSM(Decomposition Storage Model)存儲模型,目的是最小化無用的 I/O。DSM會對關系進行垂直分解,并為每個屬性分配一個子關系,每個子關系單獨存儲,每個子關系只有當其相應的屬性被請求時才會被訪問。DSM的缺陷是:執行連接操作時需要昂貴的元組重構代價。

行式數據庫主要適合于小批量的數據處理,如聯機事務型數據處理,我們平時熟悉的 Oracle、MySQL等關系數據庫都屬于行式數據庫。

列式數據庫主要適合于批量數據處理和即席查詢(Ad-Hoc Query),它可以降低 I/O開銷,支持大量用戶并發查詢,其數據處理速度比傳統方法快100倍。列式數據庫主要用于數據挖掘、決策支持和地理信息系統等查詢密集型系統中。

HBase實現原理

HBase功能組件

HBase的實現包括三個主要的功能組件:

  • 庫函數:鏈接到每個客戶端
  • 一個 Master主服務器
  • 許多個 Region服務器

Region服務器負責存儲和維護分配給自己的 Region,處理來自客戶端的讀寫請求。

主服務器 Master負責管理和維護 HBase表的分區信息,維護 Region服務器列表,檢測集群中的 REgion服務器,合理分配 Region實現負載均衡,以及處理模式的變化,如表和列族的創建 。

客戶端并不是直接從 Master主服務器上讀取數據,而是在獲得 Region的存儲位置信息后,直接從 Region 服務器上讀取數據。

表和Region

對于每個 HBase表,表中的行是根據行鍵的值的字典序進行維護的。因此分布式存儲時需要根據行鍵的值對表中的行進行分區,每個行區間構成一個分區,被稱為“Region”。它包含了位于某個值域區間內的所有數據,是負載均衡和數據分發的基本單位,這些 Region會被分發到不同的服務器上。

每一個表格最初都只包含一個 Region,隨著數據的不斷插入,Region會持續增大,當一個 Region中包含的行數量達到一個閾值時,就會被自動等分成兩個新的 Region。隨著表中行的數量持續增加,就會分裂出越來越多的 Region。

Master主服務器會把不同的 Region分配到不同的 Region服務器上,但是同一個 Region是不會被拆分到多個服務器上的。每個 Region的最佳大小取決于單臺服務器的有效處理能力,通常建議是1GB~2GB。每個 Region服務器負責管理一個 Region集合,通常一個集合是10~1000個 Region。

Region的定位

每一個 Region都有一個 RegionID來標識它的唯一性,為了定位每個 Region所在的位置,就可以構建一張映射表。映射表的每行包含兩項內容,一個是 Region標識符,另一個是 Region服務器標識符,這一行就表示 Region和 Region服務器之間的對應關系。這個映射表也被稱為“元數據表”,又名“.META.表”。為了加快訪問速度,.META.表的全部 Region都會被保存在內存中。

當 HBase表中的 Region數據非常龐大時, .META.表也會被分裂 成多個 Region。為了定位這些 Region,再構建一個新的映射表,記錄所有元數據的具體位置,就是“根數據表”,又名“-ROOT-表”。-ROOT-表是不能被分割的,永遠只存在一個 Region用于存放-ROOT-表 ,這個 Region的名字是寫死的,Master服務器永遠知道它的位置。

客戶端訪問用戶數據之前,需要首先訪問 Zookeeper,獲取-ROOT-表的位置信息,然后訪問-ROOT-表,獲取.META.表的信息,接著訪問.META.表,找到所需的 Region具體位于哪個 Region服務器,最后才會到該 Region服務器讀取數據。

為了加快尋址過程,一般會在客戶端做緩存,把查詢過的位置信息緩存起來。這樣以后訪問相同數據時,就可以直接從客戶端緩存中獲取 Region的位置信息,而不需要每次都經歷一個“三級尋址”過程。

綜上所述,HBase使用類似 B+樹的三層結構來保存 Region位置信息。

層次名稱作用
第一層Zookeeper文件記錄了-ROOT-表的位置信息
第二層-ROOT-表記錄了.META.表的 Region位置信息,-ROOT-表只有一個 Region。通過-ROOT-表就可以訪問.META.表中的數據
第三層.META.表記錄了用戶數據表的 Region位置信息,.META.表可以有多個 Region,保存了 HBase中所有用戶數據表的 Region位置信息

HBase運行機制

HBase系統架構

HBase的系統架構包括客戶端、Zookeeper服務器、Master服務器、Region服務器。HBase一般采用 HDFS作為底層數據存儲。

客戶端:包含訪問 HBase的接口,同時在緩存中維護著已經訪問過的 Region位置信息,用來加快后續數據訪問過程。HBase客戶端使用 HBase的 RPC機制與 Master服務器和 Region服務器進行通信。

Zookeeper:Zookeeper存儲-ROOT-表的地址和 Master地址, Region Server主動向 Zookeeper注冊,使得 Master可隨時感知 各 Region Server的健康狀態。Zookeeper可以幫助選舉出一個 Master作為集群的總管,并保證在任何時刻總有唯一一個 Master在運行,這就避免了Master的“單點失效”問題。

Master主服務器:Master主要負責表和Region的 管理工作

  • 管理用戶對表的增加、刪除、修改等操作
  • 實現不同Region服務器之間的負載均衡
  • 在Region分裂或合并后,負責重新調整Region的分布
  • 對發生故障失效的Region服務器上的Region進行遷移

Region服務器:HBase中最核心的模塊,負責維 護分配給自己的Region,并響應用戶的讀寫請求。

Region工作原理

Region服務器內部管理了一系列 Region對象和一個共用的 HLog文件。HLog文件是磁盤上面的記錄文件,記錄了所有的更新操作。每個 Region對象又是由多個 Store組成的,,每個 Store又包含了一個 MemStore和若干個 StoreFile。其中,MemStore是在內存中的緩存,保存最近更新的數據,StoreFile是磁盤中的文件。

這些文件都是 B樹結構,方便快速讀取。StoreFile在底層的實現方式是 HDFS文件系統的 HFile,HFile的數據塊通常采用壓縮方式存儲,壓縮之后可以大大減少網絡 I/O和磁盤 I/O。

Store是 Region服務器的核心,每個 Store對應了表中的一個列族的存儲。當用戶寫入數據時,系統首先把數據放入 MemStore緩存,當緩存滿時,就會刷新到磁盤中的一個 StoreFile文件中。StoreFile達到一定的數量之后就會觸發文件合并操作,多個 StoreFile合并成一個大的 StoreFile文件,這個StoreFile會越來越大。當StoreFile文件的大小超過一定的閾值時,就會觸發文件分裂操作。同時,當前的父 Region會被分裂成2個子 Region,父 Region會下線,新分裂出的2個子 Region會被 Master分配到相應的 Region服務器上。

HBase采用 HLog來保證系統發生故障時可以恢復到正常狀態。HBase系統為每個Region服務器配置了一個HLog 文件,它是一種預寫式日志(Write Ahead Log)。用戶更新數據必須首先寫入日志后,才能寫入 MemStore緩存,并且,直到 MemStore緩存內容 對應的日志已經寫入磁盤,該緩存內容才能被刷新寫入磁盤。

Zookeeper會實時監測每個 Region服務器的狀態,當某個 Region服務器發生故障時,Zookeeper會通知 Master。Master首先會處理該故障 Region服務器上面遺留的 HLog文件,這個遺留的HLog文件中包含了來自多個 Region對象的日志記錄。系統會根據每條日志記錄所屬的 Region對象對 HLog數據進行拆分,分別放到相應 Region對象的目錄下,然后,再將失效的 Region重新分配到可用的 Region服務器中,并把與該 Region對象相關的 HLog日志記錄也發送給相應的 Region服務器。

Region服務器領取到分配給自己的 Region對象以及與之相關的 HLog日志記錄以后,會重新做一遍日志記錄中的各種操作,把日志記錄中的數據寫入到 MemStore緩存中,然后,刷新到磁盤的 StoreFile文件中,完成數據恢復。

HBase系統中,每個 Region服務器只需要維護一個 HLog文件,所有的 Region對象共用一個 HLog。這樣可以減少磁盤尋址次數,提高對表的寫操作性能。

總結

以上是生活随笔為你收集整理的第四章-分布式数据库HBase的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。