HBase學習(一):認識HBase

来源:https://www.cnblogs.com/a-horse-mosaic/archive/2018/07/06/9272198.html
-Advertisement-
Play Games

一.大數據發展背景 現今是數據飛速膨脹的大數據時代,大數據強調3V特征,即Volume(量級)、Varity(種類)和Velocity(速度)。 ·Volume(量級):TB到ZB。 ·Varity(種類):結構化到結構化和非結構化。 ·Velocity(速度):批量數據到流數據處理。 據統計全球8 ...


一.大數據發展背景

現今是數據飛速膨脹的大數據時代,大數據強調3V特征,即Volume(量級)、Varity(種類)和Velocity(速度)。

 

  ·Volume(量級):TB到ZB。

  ·Varity(種類):結構化到結構化和非結構化。

  ·Velocity(速度):批量數據到流數據處理。

據統計全球80%的數據是非結構化的或者半結構化的,剩下的才是傳統的結構化數據。傳統關係型資料庫處理能力有限。HBase的出現彌補了Hadoop只能離線批處理的不足,同時能夠存儲小文件,提供海量數據的隨機檢索。

 

二.NoSQL

NoSQL,是Not only SQL的縮寫,泛指非關係型的資料庫。與關係型資料庫相比,NoSQL存在許多顯著的不同點,其中最重要的是NoSQL不使用SQL作為查詢語言。
其數據存儲可以不需要固定的表模式,也通常會避免使用SQL的JOIN操作,一般又都具備水平可擴展的特性。NoSQL的實現具有兩個特征:使用硬碟和把隨機存儲器作存儲載體。

1.傳統關係型資料庫的缺陷

(1)高併發讀寫的瓶頸關係型資料庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬碟I/O卻無法承受。

例如,人人網的實時統計線上用戶狀態,記錄熱門帖子的點擊次數,投票計數等,都是相對高併發寫請求的需求。
(2)可擴展性的限制
對於很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移,而不能通過橫向添加節點的方式實現無縫擴展。
(3)事務一致性的負面影響
事務執行的結果必須是使資料庫從一個一致性狀態變到另一個一致性狀態。保證資料庫一致性是指當事務完成時,必須使所有數據都具有一致的狀態。在關係型資料庫中,所有的規則必須應用到事務的修改上,以便維護所有數據的完整性,這隨之而來的是性能的大幅度下降。因此資料庫事務管理成了高負載下的一個沉重負擔。
(4)複雜SQL查詢的弱化
任何大數據量的Web系統都非常忌諱幾個大表間的關聯查詢,以及複雜的數據分析類型的SQL查詢,更多的情況往往只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大地弱化了,所以這部分功能不能得到充分發揮。


2.NoSQL資料庫的優勢
(1)擴展性強
NoSQL資料庫種類繁多,但是一個共同的特點就是去掉關係型資料庫的關係特性,若數據之間是弱關係,則非常容易擴展。例如,HBase、Cassandra等系統的水平擴展性能非常優越,非常容易實現支撐數據從TB到PB級別的過渡。
(2)併發性能好
NoSQL資料庫具有非常良好的讀寫性能,這得益於它的弱關係性,資料庫的結構簡單。一般MySQL使用QueryCache,這是一種大粒度的Cache,而NoSQL的Cache是記錄級的,是一種細粒度的Cache,
(3)數據模型靈活
NoSQL無須事先為要存儲的數據建立欄位,隨時可以存儲自定義的數據格式。NoSQL允許使用者隨時隨地添加欄位,並且欄位類型可以是任意格式。Hadoop最適合的應用場景是離線批量處理數據,其離線分析的效率非常高,HBase的列式存儲的特性支撐它實時隨機讀取、基於KEY的特殊訪問需求。

 

三.HBase是什麼
HBase(Hadoop Database)是一個高可靠、高性能、面向列、可伸縮的分散式資料庫,利用HBase技術可在廉價PC上搭建起大規模結構化存儲集群。HBase參考Google的BigTable建模,使用類似GFS的HDFS作為底層文件存儲系統,在其上可以運行MapReduce批量處理數據,使用ZooKeeper作為協同服務組件。HBase的整個項目使用Java語言實現,HBase還是一種非關係型資料庫,即NoSQL資料庫。發行版本中偶數版本是穩定發佈版,而奇數版本都是開發版,基本不對外發佈,存在0.94、0.96、0.98三個大版本。其中stable文件夾包含了最新的穩定發佈版本。與Hadoop的關係,HBase嚴重依賴Hadoop的HDFS組件,HBase使用HDFS作為底層存儲系統。Hadoop的組件之一MapReduce可以直接訪問HBase,但是,這不是必需的,因為HBase中最重要的訪問方式是原生JavaAPI,而不是MapReduce這樣的批量操作方式。

 

HBase的特性
HBase作為一個典型的NoSQL資料庫,可以通過行鍵(Rowkey)檢索數據僅支持單行事務,主要用於存儲非結構化和半結構化的鬆散數據。與Hadoop相同,HBase設計目標主要依靠橫向擴展,通過不斷增加廉價的商用伺服器來增加計算和存儲能力。HBase具備的一些非常顯著的特點:

1.容量巨大
HBase的單表可以有百億行、百萬列,數據矩陣橫向和縱向兩個維度所支持的數據量級都非常具有彈性。
傳統的關係型資料庫,如Oracle和MySQL等,如果數據記錄在億級別,查詢和寫入的性能都會呈指數級下降,所以更大的數據量級對傳統資料庫來講是一種災難。
而HBase對於存儲百億、千億甚至更多的數據都不存在任何問題。更加多的列:千萬和億級別,這種非常特殊的應用場景,並不是說HBase不支持,而是這種情況下訪問單個Rowkey可能造成訪問超時,如果限定某個列則不會出現這種問題。

2.面向列
HBase是面向列的存儲和許可權控制,並支持列獨立檢索,列式存儲資料庫。
列式存儲不同於傳統的關係型資料庫,其數據在表中是按某列存儲的,這樣在查詢只需要少數幾個欄位的時候,能大大減少讀取的數據量,比如一個欄位的數據聚集存儲,那就更容易為這種聚集存儲設計更好的壓縮和解壓演算法。

傳統行式資料庫的特性如下:
  ·數據是按行存儲的。
  ·沒有索引的查詢使用I/O。
  ·建立索引和物化視圖需要花費的時間和資源。
  ·面對查詢需求,資料庫必須被膨脹才能滿足需求。

列式資料庫的特性如下:
  ·數據按列存儲,即每一列單獨存放。
  ·數據即索引。
  ·只訪問查詢涉及的列,可以降低系統I/O。
  ·每一列由一個線索來處理,即查詢的併發處理性能高。
  ·數據類型一致,數據特征相似,可以高效壓縮。

列式存儲不但解決了數據稀疏性問題,最大程度上節省存儲開銷,而且在查詢發生時,僅檢索查詢涉及的列,能夠降低磁碟I/O

3.稀疏性
在大多數情況下,採用傳統行式存儲的數據往往是稀疏的,即存在為空(NULL)的列,而這些列都是占用存儲空間的,這就造成存儲空間的浪費。對於HBase來講,為空的列並不占用存儲空間,因此,表可以設計得非常稀疏。

4.擴展性
HBase底層文件存儲依賴HDFS,從“基因”上決定了其具備可擴展性。
同時,HBase的Region和RegionServer的概念對應的數據可以分區,分區後數據可以位於不同的機器上,所以在HBase核心架構層面也具備可擴展性。HBase的擴展性是熱擴展,在不停止現有服務的前提下,可以隨時添加或者減少節點。

5.高可靠性
HBase提供WAL和Replication機制。前者保證了數據寫入時不會因集群異常而導致寫入數據的丟失;後者保證了在集群出現嚴重問題時,數據不會發生丟失或者損壞。而且HBase底層使用HDFS,HDFS本身的副本機制很大程度上保證了HBase的高可靠性。同時,協調服務的ZooKeeper組件是經過工業驗證的,具備高可用性和高可靠性。

6.高性能
底層的LSM數據結構和Rowkey有序排列等架構上的獨特設計,使得HBase具備非常高的寫入性能。Region切分、主鍵索引和緩存機制使得HBase在海量數據下具備一定的隨機讀取性能,該性能針對Rowkey的查詢能夠達到毫秒級別。

 

四.HBase的核心功能模塊

Hadoop框架包含兩個核心組件:HDFSMapReduce,其中HDFS是文件存儲系統,負責數據存儲MapReduce是計算框架,負責數據計算
HBase資料庫的核心組件共有4個,它們分別是:客戶端Client協調服務模塊ZooKeeper主節點HMasterRegion節點RegionServer

 

(1)客戶端Client
客戶端Client是整個HBase系統的入口。使用者直接通過客戶端操作HBase。客戶端使用HBase的RPC機制與HMaster和RegionServer進行通信。對於管理類操作,Client與HMaster進行RPC通信;對於數據讀寫類操作,Client與RegionServer進行RPC交互。
這裡客戶端可以是多個,並不限定是原生Java介面,還有Thrift、Avro、Rest等客戶端模式,甚至MapReduce也可以算作一種客戶端。

(2)協調服務組件ZooKeeper
ZooKeeperQuorum(隊列)負責管理HBase中多HMaster的選舉、伺服器之間狀態同步等。
HBase中ZooKeeper實例負責的協調工作有:存儲HBase元數據信息實時監控RegionServer存儲所有Region的定址入口,當然還有最常見的功能就是保證HBase集群中只有一個HMaster節點

(3)主節點HMaster

HMaster沒有單點問題,在HBase中可以啟動多個HMaster,通過ZooKeeper的Master選舉機制保證總有一個Master正常運行並提供服務,其他HMaster作為備選時刻準備(當目前HMaster出現問題時)提供服務。
HMaster主要負責Table和Region的管理工作:
  ·管理用戶對Table的增、刪、改、查操作。
  ·管理RegionServer的負載均衡,調整Region分佈。
  ·在Region分裂後,負責新Region的分配。
  ·在RegionServer死機後,負責失效RegionServer上的Region遷移。

(4)Region節點HRegionServer

HRegionServer主要負責響應用戶I/O請求,向HDFS文件系統中讀寫數據,是HBase中最核心的模塊。HRegionServer內部管理了一系列HRegion對象,每個HRegion對應了Table中的一個RegionHRegion由多個HStore組成,每個HStore對應了Table中的一個ColumnFamily的存儲。可以看出每個ColumnFamily其實就是一個集中的存儲單元,因此最好將具備共同I/O特性的列放在一個ColumnFamily中,這樣能保證讀寫的高效性。
HStore存儲是HBase存儲的核心,由兩部分組成:MemStore和StoreFile。

MemStore是Sorted Memory Buffer,用戶寫入的數據首先會放入MemStore中,當MemStore滿了以後會緩衝(flush)成一個StoreFile(底層實現是HFile),當StoreFile文件數量增長到一定閾值,會觸發Compact操作,將多個StoreFiles合併成一個StoreFile,在合併過程中會進行版本合併和數據刪除,因此可以看出HBase其實只有增加數據,所有的更新和刪除操作都是在後續的Compact過程中進行的,這使得用戶的寫操作只要進入記憶體中就可以立即返回,保證了HBaseI/O的高性能。StoreFiles在觸發Compact操作後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值後,會觸發Split操作,同時把當前Region分裂成2個Region,父Region會下線,新分裂的2個子個子Region會被HMaster分配到相應的HRegionServer上,使得原先1個Region的壓力得以分流到2個Region上。

每個HRegionServer中都有一個HLog對象,HLog是一個實現WriteAheadLog的類,在每次用戶操作寫入MemStore的同時,也會寫一份數據到HLog文件中,HLog文件定期會滾動出新,並刪除舊的文件(已持久化到StoreFile中的數據)。在HRegionServer意外終止後HMaster會通過ZooKeeper感知到首先處理遺留的HLog文件將其中不同Region的Log數據進行拆分,分別放到相應Region的目錄下,然後再將失效的Region重新分配,領取到這些Region的HRegionServer在載入Region的過程中,會發現有歷史HLog需要處理,因此會將HLog中的數據回放到MemStore中,然後緩衝(flush)到StoreFiles,完成數據恢復

 

 

本博客所有內容來源於網路、書籍、和各類手冊。

 

內容均為非盈利,旨為方便查詢、總結備份、開源分享。

 

部分轉載內容均有註明出處,如有侵權請告知,馬上刪除。 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 字元集是一套文字元號及其編碼,比較規則的集合。第一個字元集是ascll(american standard code for information interchange)。 1. 選擇合適的字元集 對於資料庫來說,字元集很重要,因為資料庫存儲的數據大部分是各種文字,字元集對資料庫的存儲,處理性能 ...
  • koa項目用mongoose與mongodb交互,始終報錯FormModel is not defined,就是自己定義的model實例始終不能找到,但是明明定義了,這時候就要看大小寫了,當創建一個model實例的時候,往往會起和model實例一樣的名稱,這時一定要區分大小寫,或者乾脆起一個別的名稱 ...
  • Logminer依賴於2個包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g預設已安裝 Logminer 基本使用步驟 <1>. Specify a LogMiner dictionary. 指定Logminer字典 <2>. Specify a list of redo ...
  • 本文是說明如何獲取死鎖日誌記錄的,不是說明如何解決死鎖問題的。 MySQL的死鎖可以通過show engine innodb status;來查看,但是show engine innodb status;只能顯示最新的一條死鎖,該方式無法完全捕獲到系統發生的死鎖信息。如果想要記錄所有的死鎖日誌,打開 ...
  • 背景 近年來大數據BigData、人工智慧AI、物聯網Iot等行業發展迅猛,很多人都想要從事大數據技術開發工作,但是,請問要怎麼做,路線是什麼?從哪裡開始學?學哪些?這是一個大問題。對於我自己來說,最近也在學一些大數據開發相關的技術,所以之前整理了一份《大數據技術學習路線》,希望對你有所幫助。 推薦 ...
  • 2、Which two are true about Optimizer Statistics? ❑ A) They do not persist across Instance restarts. ❑ B) They are automatically updated when DDL state ...
  • -- # https://dev.mysql.com/doc/refman/8.0/en/charset-database.html -- create database aixinyz; -- 默認為:latin1,以安裝MYSQL時,默認,當害安裝時選了UTF-8就好了,沒有隻能代碼實現 -- ... ...
  • 一. BloB和Text 1. 合成索引 合成索引可以提高大文本欄位BLOB和Text的查詢性能, 合成索引是在表中增加一個欄位存放散列值,這種技術只能用於精確匹配的查詢,可以使用md5()或sha1,crc23() 來生成散列值, 數值型散列值可以提高存儲效率 。下麵演示下 上面展示了合成索引的用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...