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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hbase 详细介绍以及简单的Hbase命令操作(入门必备)

發布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hbase 详细介绍以及简单的Hbase命令操作(入门必备) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hbase

  • 1、Hbase簡介
    • (1)基礎介紹
    • (2)Hbase特點
  • 2、Hbase體系結構
    • (1) Client
    • (2)Master
    • (3)HRegionServer
    • (4)Zookeeper
    • (6 )HBase存儲格式
  • 3、Hbase和其他數據庫的區別
  • 4、Hbase生態圈的技術
  • 5、Hbase 邏輯架構
  • 6、Hbase 的基礎命令
    • (1)命名空間NAMESPACE
    • (2)表 TABLE
    • (3)簡單命令

1、Hbase簡介

(1)基礎介紹

HBase的原型是Google的BigTable論文,受到了該論文思想的啟發,目前作為Hadoop的子項目來開發維護,用于支持結構化的數據存儲。

HBase是Google Bigtable的開源實現,但是也有很多不同之處。比如:Google
Bigtable利用GFS作為其文件存儲系統,HBase利用Hadoop
HDFS作為其文件存儲系統;Google運行MAPREDUCE來處理Bigtable中的海量數據,HBase同樣利用Hadoop
MapReduce來處理HBase中的海量數據;Google
Bigtable利用Chubby作為協同服務,HBase利用Zookeeper作為對應。

(2)Hbase特點

海量存儲

  • Hbase適合存儲PB級別的海量數據,在PB級別的數據以及采用廉價PC存儲的情況下,能在幾十到百毫秒內返回數據。這與Hbase的極易擴展性息息相關。正式因為Hbase良好的擴展性,才為海量數據的存儲提供了便利。
  • 傳統關系型數據庫,單表不會超過五百萬,超過要做分表分庫,不會超過30列。
  • Hbase單表可以有百億行、百萬列,數據矩陣橫向和縱向兩個維度所支持的數據量級都非常具有彈性

列式存儲

  • 這里的列式存儲其實說的是列族存儲,Hbase是根據列族來存儲數據的。列族下面可以有非常多的列,列族在創建表的時候就必須指定。
  • 面向列的存儲和權限控制,并支持獨立檢索,可以動態增加列,即,可單獨對列進行各方面的操作。
  • 列式存儲,其數據在表中是按照某列存儲的,這樣在查詢只需要少數幾個字段的時候,能大大減少讀取的數量

極易擴展

  • Hbase的擴展性主要體現在兩個方面,一個是基于上層處理能力(RegionServer)的擴展,一個是基于存儲的擴展(HDFS)。
  • 通過橫向添加RegionSever的機器,進行水平擴展,提升Hbase上層的處理能力,提升Hbsae服務更多Region的能力。
  • 備注:RegionServer的作用是管理region、承接業務的訪問,這個后面會詳細的介紹通過橫向添加Datanode的機器,進行存儲層擴容,提升Hbase的數據存儲能力和提升后端存儲的讀寫能力。

高并發

  • 由于目前大部分使用Hbase的架構,都是采用的廉價PC,因此單個IO的延遲其實并不小,一般在幾十到上百ms之間。這里說的高并發,主要是在并發的情況下,Hbase的單個IO延遲下降并不多。能獲得高并發、低延遲的服務。

稀疏

  • 稀疏主要是針對Hbase列的靈活性,在列族中,你可以指定任意多的列,在列數據為空的情況下,是不會占用存儲空間的。
  • 為空的列并不占用存儲空間,表可以設計的非常稀疏。不必像關系型數據庫那樣需要預先知道所有列名然后再進行null填充

總結

  • 面向列,容量大,寫入比mysql快但是讀取沒有,超過五百萬條數據的話建議讀寫用Hbase

2、Hbase體系結構

HBase的服務器體系結構遵從簡單的主從服務器架構,它由HRegion Server群和HBase Master服務器構成。
HBase Master負責管理所有的HRegion Server,而HBase中的所有RegionServer都是通過ZooKeeper來協調,并處理HBase服務器運行期間可能遇到的錯誤。
HBase Master Server本身并不存儲HBase中的任何數據,HBase邏輯上的表可能會被劃分成多個Region,然后存儲到HRegion Server群中。HBase Master Server中存儲的是從數據到HRegion Server的映射。因此HBase體系結構如下圖

(1) Client

  • HBase Client 使用HBase的RPC機制與HMaster和HRegionServer進行通信:對于管理類操作,Client與HMaster進行RPC;對于數據讀寫類操作,Client與HRegionServer進行RPC;

(2)Master

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

(3)HRegionServer

  • 0.94之后的HRegionServer:圖片來自Map-R網站

  • 0.94之前的HRegionServer

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

  • HRegionServer內部管理了一系列HRegion對象,每個HRegion對應了Table中的一個Region,HRegion中由多個HStore組成。每個HStore對應了Table中的一個Column Family的存儲,可以看出每個Column Family其實就是一個集中的存儲單元,因此最好將具備共同IO特性的column放在一個Column Family中,這樣最高效。

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

  • 在理解了上述HStore的基本原理后,還必須了解一下HLog的功能,因為上述的HStore在系統正常工作的前提下是沒有問題的,但是在分布式系統環境中,無法避免系統出錯或者宕機,因此一旦HRegionServer意外退出,MemStore中的內存數據將會丟失,這就需要引入HLog了。每個HRegionServer中都有一個HLog對象,HLog是一個實現Write Ahead Log的類,在每次用戶操作寫入MemStore的同時,也會寫一份數據到HLog文件中(HLog文件格式見后續),HLog文件定期會滾動出新的,并刪除舊的文件(已持久化到StoreFile中的數據)。當HRegionServer意外終止后,HMaster會通過Zookeeper感知到,HMaster首先會處理遺留的 HLog文件,將其中不同Region的Log數據進行拆分,分別放到相應region的目錄下,然后再將失效的region重新分配,領取 到這些region的HRegionServer在Load Region的過程中,會發現有歷史HLog需要處理,因此會Replay HLog中的數據到MemStore中,然后flush到StoreFiles,完成數據恢復。

(4)Zookeeper

  • 對于 HBase 而言,Zookeeper 的作用是至關重要的。首先 Zookeeper 是作為 HBase Master 的 HA 解決方案。也就是說,是 Zookeeper 保證了至少有一個 HBase Master 處于運行狀態。并且 Zookeeper 負責 Region 和 Region Server 的注冊。其實 Zookeeper 發展到目前為止,已經成為了分布式大數據框架中容錯性的標準框架。不光是 HBase,幾乎所有的分布式大數據相關的開源框架,都依賴于 Zookeeper 實現 HA。

(6 )HBase存儲格式

HBase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括上述提出的兩種文件類型:

1.HFile, HBase中KeyValue數據的存儲格式,HFile是Hadoop的二進制格式文件,實際上StoreFile就是對HFile做了輕量級包裝,即StoreFile底層就是HFile2.HLog File,HBase中WAL(Write Ahead Log) 的存儲格式,物理上是Hadoop的Sequence File

在分布式系統環境中,無法避免系統出錯或者宕機,因此一旦HRegionServer意外退出,MemStore中的內存數據將會丟失,這就需要引入HLog了。每個HRegionServer中都有一個HLog對象,HLog是一個實現Write Ahead Log的類,在每次用戶操作寫入MemStore的同時,也會寫一份數據到HLog文件中(HLog文件格式見后續),HLog文件定期會滾動出新的,并刪除舊的文件(已持久化到StoreFile中的數據)。當HRegionServer意外終止后,HMaster會通過Zookeeper感知到,HMaster首先會處理遺留的 HLog文件,將其中不同Region的Log數據進行拆分,分別放到相應region的目錄下,然后再將失效的region重新分配,領取 到這些region的HRegionServer在Load Region的過程中,會發現有歷史HLog需要處理,因此會Replay HLog中的數據到MemStore中,然后flush到StoreFiles,完成數據恢復。

HFile

下圖是HFile的存儲格式:

首先HFile文件是不定長的,長度固定的只有其中的兩塊:Trailer和FileInfo。正如圖中所示的,Trailer中有指針指向其他數據塊的起始點。File Info中記錄了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data Index和Meta Index塊記錄了每個Data塊和Meta塊的起始點。

Data Block是HBase I/O的基本單元,為了提高效率,HRegionServer中有基于LRU的Block Cache機制。每個Data塊的大小可以在創建一個Table的時候通過參數指定,大號的Block有利于順序Scan,小號Block利于隨機查詢。每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內容就是一些隨機數字,目的是防止數據損壞。后面會詳細介紹每個KeyValue對的內部構造。

HFile

HFile里面的每個KeyValue對就是一個簡單的byte數組。但是這個byte數組里面包含了很多項,并且有固定的結構。我們來看看里面的具體結構:

開始是兩個固定長度的數值,分別表示Key的長度和Value的長度。緊接著是Key,開始是固定長度的數值,表示RowKey的長度,緊接著是RowKey,然后是固定長度的數值,表示Family的長度,然后是Family,接著是Qualifier,然后是兩個固定長度的數值,表示Time Stamp和Key Type(Put/Delete)。Value部分沒有這么復雜的結構,就是純粹的二進制數據了。

HLogFile

上圖中示意了HLog文件的結構,其實HLog文件就是一個普通的Hadoop Sequence File,Sequence File 的Key是HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,除了table和region名字外,同時還包括 sequence number和timestamp,timestamp是“寫入時間”,sequence number的起始值為0,或者是最近一次存入文件系統中sequence number。

HLog Sequece File的Value是HBase的KeyValue對象,即對應HFile中的KeyValue,可參見上文描述。

3、Hbase和其他數據庫的區別

常用數據庫HBase、MongoDB、RedisOracle、DB2、MySQL
存儲格式文檔、鍵值對、圖結構表格式,行和列
存儲規范鼓勵冗余規范性,避免重復
存儲擴展橫向擴展,分布式縱向擴展(橫向擴展有限)
查詢方式結構化查詢語言SQL非結構化查詢
事務不支持事務一致性支持事務
性能讀寫性能高讀寫性能差
成本簡單易部署,開源,成本低成本高

4、Hbase生態圈的技術

Lily – 基于HBase的CRM
OpenTSDB – HBase面向時間序列數據管理
Kylin – HBase上的OLAP
Phoenix – SQL操作HBase工具
Splice Machine – 基于HBase的OLTP
Apache Tephra – HBase事務支持
TiDB – 分布式SQL DB
Apache Omid - 優化事務管理
Yarn application timeline server v.2 遷移到HBase
Hive metadata存儲可以遷移到HBase
Ambari Metrics Server將使用HBase做數據存儲

5、Hbase 邏輯架構

RowKey : 主鍵(最大64kb,實際使用10~100bytes)

  • 數據根據RowKey排序

  • HRegion大小達到一定值時,裂變

  • HBase Table中的行的三種方式:

    1.通過單個 RowKey 訪問 get 'TAB_NAME','COL_FAMILY_NAME'2.通過 RowKey 的 range(正則) 3.全表掃描 scan 'TAB_NAME'

ColumnFamily

  • 列族在在物理存儲上對應于 HDFS 上的一個目錄。
  • HBase 表中的每個列,都歸屬于某個列族。
  • 列族是表的 schema 的一部分(而列不是),必須在使用表之前定義。
  • 列名都以列族作為前綴。例如 courses:history,courses:math 都屬于 courses 這個列族。
  • 每一個列族對應一個 Store,也對應 HDFS 一個目錄,類似于 Hive 分區操作一樣,HBase相當于按列族進行了分區

Cell

  • 由{RowKey, ColumnFamily, Version} 唯一確定的單元
  • 類似于excel的一個單元格,數據以字節存儲,沒有類型

Time Stamp

  • rowkey -> ColumnFamily:Column 確定cell
  • 每個Cell中保存著一份數據的多個版本:以由精確到毫秒的64位整數存儲,可以由HBase寫入是自動生成或用戶指定
  • 若用戶指定為避免版本沖突,一定要用單Cell中不重復的時間戳
  • 單元格中的數據以時間戳倒序排序
  • 為避免Cell數據過大,HBase提供兩種機制:保留最新的N條數據,或保留截止當下多長時間的數據

6、Hbase 的基礎命令

命令類別命令
Generalversion,status,whoami,help
DDLalter,create, describe, disable,drop, enable, exists, is_disabled, is_enabled, list
DMLcount,delete,deleteall,get,get_counter, incr,put,scan,truncate
Toolsassign,balance_switch,balancer,close_region,compact,flush,major_compact,move,split,unassign,zk_dump
Replicationadd_peer,disable_peer,enable_peer,remove_peer,start_replication,stop_replication

(1)命名空間NAMESPACE

  • list_namespace
  • create_namespace ‘NS_NAME’
  • describe_namespace ‘NS_NAME’
  • 兩個特殊命名空間
    • 1、hbase => 存hbase內部表
    • 2、default => 沒有指定命令空間的表,默認存在該default下

(2)表 TABLE

  • list
  • ist_namespace_tables ‘NS’
  • create
    • 完整方式:create ‘NS:表名’,{NAME=>‘列族1名’,VERSION=‘版本號’,TTL=‘超時時間’,BLOCKCACHE=‘是否緩存’},{…}…
      • VERSION: 版本號:默認最小版本號:0
      • TTL: 超時設定:默認值FOREVER
      • BLOCKCACHE: 設定列族是否緩存:默認為true
    • 簡易方式:create ‘[NS:]表名’,‘列族1名’,‘列族2名’…
  • hp.enable
  • hp.disable
  • hp.drop 禁用后才可以刪除

(3)簡單命令

create 'kb08:handphone',{NAME=>'base',VERSION=>'0'},{NAME=>'price'} desc 'kb08:handphone' exists 'kb08:handphone' is_disabled 'kb08:handphone'put 'kb08:handphone','huawei','base:seriesNo','nova4' put 'kb08:handphone','huawei','base:cpu','4c8t' put 'kb08:handphone','huawei','base:resolution','1024*768'### SELECT ####hp = get_table 'kb08:handphone'hp.scanhp.get 'huawei'[,'base:cpu']### UPDATE ####hp.put 'huawei','base:cpu','8c16t'#### DELETE ####hp.delete 'iphone','price:retailPrice'hp.deleteall 'iphone'truncate 'kb08:handphone'

參考
https://www.cnblogs.com/ggjucheng/p/3380169.html
https://my.oschina.net/u/189445/blog/596325
https://developer.ibm.com/zh/technologies/analytics/articles/ba-cn-bigdata-hbase/

總結

以上是生活随笔為你收集整理的Hbase 详细介绍以及简单的Hbase命令操作(入门必备)的全部內容,希望文章能夠幫你解決所遇到的問題。

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