Hbase基本原理

一、hbase是什么

?HBase 是一種類似于數據庫的存儲層,也就是說 HBase 適用于結構化的存儲。并且 HBase 是一種列式的分布式數據庫,是由當年的 Google 公布的 BigTable 的論文而生。HBase 底層依舊依賴 HDFS 來作為其物理存儲。

?


?

二、hbase的列式存儲結構

行式存儲:傳統的數據庫是關系型的,且是按行來存儲的

?其中只有張三把一行數據填滿了,李四王五趙六的行都沒有填滿。因為這里的行結構是固定的,每一行都一樣,即使你不用,也必須空到那里,而不能沒有。

?列式存儲:

?HBase是一個面向列的數據庫,在表中它由行排序。表模式定義只能列族,也就是鍵值對。一個表有多個列族以及每一個列族可以有任意數量的列。后續列的值連續地存儲在磁盤上。表中的每個單元格值都具有時間戳。總之,在一個HBase:

  • 表是行的集合。
  • 行是列族的集合。
  • 列族是列的集合。
  • 列是鍵值對的集合。

?

Row key行鍵 (Row key): 可以是任意字符串(最大長度是 64KB,實際應用中長度一般為 10-100bytes),在Hbase內部,row key保存為字節數組。存儲時,數據按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,將經常一起讀取的行存儲放到一起。(位置相關性)。

列族: Hbase表中的每個列,都歸屬與某個列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如courses:history,courses:math 都屬于courses 這個列族。訪問控制、磁盤和內存的使用統計都是在列族層面進行的。實際應用中,列族上的控制權限能幫助我們管理不同類型的應用:我們允許一些應用可以添加新的基本數據、一些應用可以讀取基本數據并創建繼承的列族、一些應用則只允許瀏覽數據(甚至可能因為隱私的原因不能瀏覽所有數據)。

時間戳: Hbase中通過row和columns確定的為一個存貯單元稱為cell。每個 cell都保存著同一份數據的多個版本。版本通過時間戳來索引。時間戳的類型是 64位整型。時間戳可以由Hbase(在數據寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。 為了避免數據存在過多版本造成的的管理 (包括存貯和索引)負擔,Hbase提供了兩種數據版本回收方式。一是保存數據的最后n個版本,二是保存最近一段時間內的版本(比如最近七天)。用戶可以針對每個列族進行設置。

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

?


?三、hbase架構

?


Zookeeper

?Zookeeper 是作為 HBase Master 的 HA 解決方案。也就是說,是 Zookeeper 保證了至少有一個 HBase Master 處于運行狀態。并且 Zookeeper 負責 Region 和 Region Server 的注冊。

HMaster:

HBase Master 用于協調多個?HRegion Server,偵測各個? HRegion Server 之間的狀態,并平衡?HRegion Server 之間的負載。HBase Master 還有一個職責就是負責分配 Region 給?HRegion Server。HBase 允許多個 Master 節點共存,但是這需要 Zookeeper 的幫助。不過當多個 Master 節點共存時,只有一個 Master 是提供服務的,其他的 Master 節點處于待命的狀態。當正在工作的 Master 節點宕機時,其他的 Master 則會接管 HBase 的集群。

  1. 為Region server分配region,負責region server的負載均衡
  2. 管理用戶對Table的增、刪、改、查操作
  3. 發現失效的region server并重新分配其上的region
  4. GFS上的垃圾文件回收
  5. 在HRegionServer停機后,負責失效HRegionServer 上的Regions遷移

HDFS:

HDFS是Hbase運行的底層文件系統

HRegionServer

HRegionServer是RegionServer的實現,服務和管理Regions,集群中HRegionServer運行在DataNode上。

對于一個 HRegion Server 而言,其包括了多個?HRegion。HRegion Server 的作用只是管理表格,以及實現讀寫操作。Client 直接連接 HRegion Server,并通信獲取 HBase 中的數據。對于 Region 而言,則是真實存放 HBase 數據的地方,也就說 Region 是 HBase 可用性和分布式的基本單位。如果當一個表格很大,并由多個 CF 組成時,那么表的數據將存放在多個 Region 之間,并且在每個 Region 中會關聯多個存儲的單元(Store)。

HRegion

Region 是真實存放 HBase 數據的地方,也就說 Region 是 HBase 可用性和分布式的基本單位;每個HRegion對應了Table中的一個Region,隨著數據的不斷加入,region會不斷增大,當region增大一個閥值時,region會等分為兩個region。當region分裂越來越多時,都將在Region Server上這時將無法滿足負載均衡,所以Hmaster?將會發起協調的作用,將給table的所有region平均分配到所有的region?Server上。

HRegion中由多個HStore組成。每個HStore對應了Table中的一個Column Family的存儲,可以看出每個Column Family其實就是一個集中的存儲單元,因此最好將具備共同IO特性的column放在一個Column Family中,這樣最高效。HStore包括內存memstore?和位于磁盤的storeFile;數據寫入時先進入memstore,當memstore中的數據到達閥值后,HRegion Server?會啟動flashcache?進程將內存的數據寫入磁盤storeFile。每次寫入都會形成一個單獨的storeFile文件。當storeFile文件的數量到達一個閥值時,系統會將storeFile文件合并,在合并時會進行版本的合并和刪除文件(合并時會刪除低版本的數據),形成一個更大的storeFile。在合并期間無法訪問數據。

客服端查找數據時,先在memstroe查找,然后storeFile。

HLOG

?

轉載于:https://www.cnblogs.com/jalja/p/11441801.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248187.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最終的動畫函數封裝(2)

<button>點擊觸發1</button><button>點擊觸發2</button><div></div><style>*{margin: 0;padding: 0;}div{width: 100px;height: 100px;background-color: red;position: relative;top: 100px;left: 0;}.div1{display: block;width: …

第二次JAVA作業

感覺和C語言后面都差不多&#xff0c;就是開頭的定義和輸入輸出有點差別&#xff0c;多寫幾次應該能搞清楚開頭的定義&#xff0c;接下來是四道題目的截圖。 第一題&#xff1a; 第二題&#xff1a; 第三題&#xff1a; 第四題&#xff1a; 轉載于:https://www.cnblogs.com/YSh…

springmvc框架下Filter過濾器中過濾文件后 后續 controller為空的問題

開發過程中遇到過濾文件類型的問題&#xff0c;需要校驗文件的頭信息&#xff0c;&#xff0c;在過濾器中通過request獲取文件流信息 但是后續的controller中的MultipartFile一直都是空的&#xff0c;網上的網友的方案使用了一堆比如 使用BodyReaderHttpServletRequestWrapper…

js(Dom+Bom)第七天(1)

JavaScript BOM介紹 概念 BOM&#xff08;Browser Object Model&#xff09;即瀏覽器對象模型。 本質&#xff1a; 通過對象抽象瀏覽器中的一些功能 例如&#xff1a;&#xff08;刷新頁面&#xff0c;alert,confirm,pormpt,跳轉 ...&#xff09;BOM頂級對象 window對象是js中…

「十二省聯考 2019」皮配——dp

題目 【題目描述】 #### 題目背景一年一度的綜藝節目《中國好碼農》又開始了。本季度&#xff0c;好碼農由 Yazid、Zayid、小 R、大 R 四位夢想導師坐鎮&#xff0c;他們都將組建自己的夢想戰隊&#xff0c;并率領隊員向夢想發起沖擊。 四位導師的**派系**不盡相同&#xff0c;…

收藏一個在線思維導圖的制作網站

https://www.processon.com/ 轉載于:https://www.cnblogs.com/132818Creator/p/11447077.html

js(Dom+Bom)第七天(2)

webAPI 01-動畫封裝 應用到的知識點 點擊事件 給元素設置一個絕對定位 定時器(setInterval) 封裝動畫1的步驟: 讓元素設置為絕定位設置元素的開始位置(從哪開始移動)設置元素的目標位置(移動到哪)設置元素每次移動的距離設置元素每次移動的時間間隔(越短越好) 封裝動畫1遇…

鏈表中環的入口結點

題目描述 給一個鏈表&#xff0c;若其中包含環&#xff0c;請找出該鏈表的環的入口結點&#xff0c;否則&#xff0c;輸出null。 分析 第一步&#xff1a;確定一個鏈表中是否有環 我們可以用兩個指針來解決&#xff0c;定義兩個指針&#xff0c;同時從鏈表的頭結點觸發&#xf…

java 線程之線程狀態

Thread 類中的線程狀態&#xff1a; public enum State {NEW,//新建RUNNABLE,// 執行態BLOCKED, //等待鎖&#xff08;在獲取鎖的池子里&#xff09;WAITING,//等待狀態TIMED_WAITING,//定時等待TERMINATED; //終止 } 創建狀態&#xff08;NEW&#xff09;&#xff1a;當一個線…

目標元素拖動

<div class"box"><div class"title">拖拽效果</div></div>* {margin: 0;padding: 0;}.box {width: 350px;height: 300px;border: 1px solid #ccc;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);cursor…

操作系統原理之內存管理(第四章第二部分)

一、基本分頁存儲管理方式 1、分?存儲管理的基本原理&#xff1a; 頁&#xff1a;將?個進程的邏輯地址空間分成若?個??相等的?頁框&#xff1a;將物理內存空間分成與???相同的若?個存儲塊分?存儲&#xff1a;將進程中的若??分別裝?多個可以不相鄰的?框中頁內碎片…

C#代碼總結02---使用泛型來獲取Asp前臺頁面全部控件,并進行屬性修改

該方法&#xff1a;主要用于對前臺頁面的不同類型&#xff08;TextBox、DropDownList、等&#xff09;或全部控件進行批量操作&#xff0c;用于批量修改其屬性&#xff08;如&#xff0c;Text、Enable&#xff09;。 private void GetControlList<T>(ControlCollection c…

d3.js 教程 模仿echarts柱狀圖

由于最近工作不是很忙&#xff0c;隧由把之前的charts項目用d3.js重寫的一下&#xff0c;其實d3.js文檔很多&#xff0c;但是入門不是很難&#xff0c;可是想真的能做一個完成的&#xff0c;交互良好的圖還是要下一番功夫的。今天在echarts找到了一個柱狀圖&#xff0c;如圖。 …

簡單的動畫函數封裝(2)

<div></div><!-- <span></span> --><button class"btn1">點擊500</button><button class"btn2">點擊800</button>div{width: 100px;height: 100px;background-color: red;position: absolute;top: …

【蔡勒公式 】根據給定的年月日求出對應星期幾

蔡勒公式 蔡勒&#xff08;Zeller&#xff09;公式&#xff0c;是一個計算星期的公式&#xff0c;隨便給一個日期&#xff0c;就能用這個公式推算出是星期幾。時間復雜度&#xff1a;O(1)。具體的在紅書P229有。 若要計算的日期是在1582年10月4日或之前&#xff0c;公式則為&am…

MFC的程序,不想顯示窗口,任務欄里也不顯示

在dialog的oninitdialog里設置如下屬性&#xff0c;很簡單&#xff0c;網上一些亂七八糟的做法&#xff0c;一行代碼就能搞定啊 SetWindowPos(&CWnd::wndNoTopMost,0,0,0,0,SWP_HIDEWINDOW); ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); 轉載于:https://www.cnblog…

放大鏡制作(2)—此方法比較容易理解

<div class"box" id"box"><!--左側的盒子--><div class"left_img"><!--圖片--><img src"images/small.jpg" class"aaa" alt"小圖片"/><!--黃色小盒子--><div class"…

call / apply / bind

對于 call / apply / bind 來說&#xff0c;他們的首要目的是用于改變執行上下文的 this 指針。 call / apply 對 call / apply 的使用&#xff0c;一般都如下&#xff0c;用于改變執行環境的上下文。只是 call 接受的是一個一個的參數&#xff0c;而 apply 則是接受的是一個參…

js(Dom+Bom)第八天—Swiper(插件)

Swiper插件(庫) 01-基本介紹 Swiper 是一款免費以及輕量級的移動設備觸控滑塊的js框架&#xff0c;使用硬件加速過渡&#xff08;如果該設備支持的話&#xff09;。主要使用于移動端的網站、移動web apps&#xff0c;native apps和hybrid apps。主要是為IOS而設計的&#xff…

第七節:EF Core調用SQL語句和存儲過程

一. 查詢類(FromSql) 1.說明 A. SQL查詢必須返回實體的所有屬性字段。 B. 結果集中的列名必須與屬性映射到的列名相匹配。 C. SQL查詢不能包含關聯數據 D. 除Select以為的其它SQL語句無法運行。 2.調用SQL語句的幾種情況 A. 基本的原生SQL查詢 B. 利用$內插語法進行傳遞 C. 原生…