Hbase原理的介紹和使用場景分析
主流nosql
MongoDB、Hbase、Redis
本文只介紹Hbase:
HBase資料模型
名稱空間
名稱空間是對錶的邏輯分組,不同的名稱空間類似於關係型資料庫中的不同的Database資料庫。利用名稱空間,在多租戶場景下可做到更好的資源和資料隔離。
表
對應於關係型資料庫中的一張張表,HBase以“表”為單位組織資料,表由多行組成。
行
行由一個RowKey和多個列族組成,一個行有一個RowKey,用來唯一標示。
列族
每一行由若干列族組成,每個列族下可包含多個列,如上ImployeeBasicInfoCLF和DetailInfoCLF即是兩個列族。列族是列共性的一些體現。注意:物理上,同一列族的資料儲存在一起的。
列限定符
列由列族和列限定符唯一指定,像如上的name、age即是ImployeeBasicInfoCLF列族的列限定符。
單元格
單元格由RowKey、列族、列限定符唯一定位,單元格之中存放一個值(Value)和一個版本號。
時間戳
單元格內不同版本的值按時間倒序排列,最新的資料排在最前面
HBase 優點
1) 儲存容量大,一個表可以容納上億行,上百萬列;
2)可通過版本進行檢索,能搜到所需的歷史版本資料;
3)負載高時,可通過簡單的新增機器來實現水平切分擴充套件,跟Hadoop的無縫整合保障了其資料可靠性(HDFS)和海量資料分析的高效能(MapReduce);
4)在第3點的基礎上可有效避免單點故障的發生。
HBase 缺點
基於Java語言實現及Hadoop架構意味著其API更適用於Java專案;
node開發環境下所需依賴項較多、配置麻煩(或不知如何配置,如持久化配置),缺乏文件;
佔用記憶體很大,且鑑於建立在為批量分析而優化的HDFS上,導致讀取效能不高;
API相比其它 NoSql 的相對笨拙。
思考幾個問題
1、region是如何劃分?
hbase的表中的行rowkey按照字典順序進行排序
在行的方向上基於rowkey分割為多個region
2、region是如何分配管理的?
一張表上面有多個region被隨機分配到叢集中的regionserver中進行管理,由master進行隨機分配
同一個regionserver上可以管理不同表中的region,每個rengionserver上管理的regin的數量是均衡。
每張表預設建立時候只用一個region,隨著表中資料量的增大到一定閥值(10G),會自動分為兩個region,分割後region會被master再次分配給regionserver去管理
當某臺機器的regionserver發生當機,那麼其管理的region丟失管理,master把這臺regionserver管理的region重新分配給其他的regionserver去管理
HBase 適用場景
1線上業務查詢:訂單,商品,快遞單號,如歷史訂單
2離線業務的儲存
Hbase三個重要的機制
flush機制:
思考:一個regionserver上面有多個region。即多個metastore,當單個metastore沒有達到128M。但是整個regionserver,metastore的總大小已經很大了,比如已經佔用了20個metastore,每個120M,2.4G
當metastore達到128MB的時候,會把資料flush成為storeFile <property> <name>hbase.hregion.max.filesize</name> <value>10737418240</value> <source>hbase-default.xml</source> </property>
當regionserver上全部的metastore達到40%的時候,強制阻塞操作,直接把metastore中資料,flush成storeFile <property> <name>hbase.regionserver.global.memstore.upperLimit</name> <value>0.4</value> <source>hbase-default.xml</source> </property>
當regionserver上全部的metastore達到38%的時候,把佔比比較大的metastore中資料,flush成storeFile <property> <name>hbase.regionserver.global.memstore.lowerLimit</name> <value>0.38</value> <source>hbase-default.xml</source> </property> |
compact機制:
當storeFile越來越多,會觸發compact機制,把多個storeFile合併成一個大的storeFile
合併分為兩個:小合併(min compact) 大合併(major compact)
split機制:
當合並後的storeFile越來越大,(10G)就會觸發split機制。把region一分為二
預設的老版本的是248M
Hbase寫入資料的流程
1.client先去zookeeper訪問,從zookeeper中獲取meta表
2.通過讀取meta表,確定region所在的regionserver的伺服器
3.client直接向這臺伺服器發出寫入資料的請求
4.regionserver接到請求,然後響應
5.client首先把資料寫入Hlog中,防止丟失
6.把資料寫入metastore進行快取。預設的大小是128M
7.當Hlog和metastore全部完成,這次寫入才算成功
8.當資料達到128M的時候,發生flush機制把資料變為storeFile
9.當storeFile越來越多,會觸發compact(壓緊)機制,把多個storeFile合併成一個大的storeFile
10.當合並後的storeFile越來越大,(10G)會觸發split機制,把region拆分為2個region,
一個列簇對應一個store,一個store下面會有多個storeFile,最終落地在HDFS,形成Hfile
相關文章
- ThreadLocal 原理和使用場景分析thread
- Redis - 介紹與使用場景Redis
- RabbitMQ 的應用場景以及基本原理介紹MQ
- RabbitMQ的應用場景以及基本原理介紹MQ
- MySQL全面瓦解22:索引的介紹和原理分析MySql索引
- Hbase和Hive的特點,和應用場景Hive
- 理解索引:HBase介紹和架構索引架構
- Hadoop叢集中Hbase的介紹、安裝、使用Hadoop
- 面試中的 ThreadLocal 原理和使用場景面試thread
- sql中in和exists的原理及使用場景。SQL
- GPU的介紹 以及原理的分析GPU
- Hbase一:Hbase介紹及特點
- 輪換代理介紹及適用場景介紹
- 數字沙盤的四大應用場景分析介紹
- 訊息匯流排Bus介紹及使用場景-訊息佇列和RabbitMQ介紹及安裝佇列MQ
- ArrayList和LinkedList底層原理的區別和使用場景
- 阿里雲資料管理DMS的無鎖變更功能主要原理和適用場景介紹阿里
- ThreadLocal的使用場景分析thread
- JUC之CountDownLatch的原始碼和使用場景分析CountDownLatch原始碼
- 說一說V-Layout框架的原理和使用場景框架
- 非同步神器:CompletableFuture實現原理和使用場景非同步
- LayerMask 的介紹和使用
- BlockingQueue 的介紹和使用BloC
- 快速入門Redis呼叫Lua指令碼及使用場景介紹Redis指令碼
- Java Shutdown Hook 場景使用和原始碼分析JavaHook原始碼
- Kafka簡介、基本原理、執行流程與使用場景Kafka
- 簡單易懂的 Go 泛型使用和實現原理介紹Go泛型
- Fiddler(一)Fiddler介紹及應用場景
- RabbitMQ 簡介以及使用場景MQ
- mybatis原理,配置介紹及原始碼分析MyBatis原始碼
- web worker的介紹和使用Web
- Redis介紹和使用Redis
- The Graph介紹和使用
- servlet的生命週期和工作原理介紹Servlet
- Angular forRoot 方法的使用場合介紹Angular
- 如何使用HBase?大資料儲存的兩個實戰場景大資料
- 【RAC】Oracle RAC上線測試場景介紹Oracle
- 雲端計算日常運用場景介紹!