大白話詳解大數據HBase,老劉真的很用心

2020-12-13 老劉情感影視

老劉今天複習HBase知識發現很多資料都沒有把概念說清楚,有很多專業名詞一筆帶過沒有解釋。比如這個框架高性能、高可用,那什麼是高性能、高可用?怎麼實現的高性能高可用?沒說!

如果面試官聽了你說的,會有什麼反應?我的感覺就是你說的東西都是別人的,沒有自己的理解。所以老劉才會寫用大白話講大數據這個系列,就是爭取把東西講清楚,講明白!如果覺得老劉寫得不錯,給老劉點個讚吧!

01 HBase知識點

第1點:HBase的定義

官網畫紅框中直接就說,HBase是一個分布式、可擴展的大數據存儲Hadoop資料庫。試想下,你是面試官,別人這樣回答你,你會不會滿意?老劉覺得學的東西要用自己的話講出來,才是真正的掌握。

在老劉看來,HBase,即Hadoop database,即Hadoop資料庫。

它的數據通常存儲在HDFS上,HDFS為HBase提供了高可靠性的底層存儲的支持;利用Hadoop MapReduce來處理HBase中的海量數據,為HBase提供了高性能的計算能力;利用ZooKeeper為HBase提供了穩定的服務。

根據上述所說,就可以總結為HBase是一個建立在HDFS之上,具有高可靠、高性能、可擴展、支持海量數據存儲的分布式資料庫。

一般是在存儲數據比較大的時候,並且對讀寫性能要求比較高的時候,才會用到HBase資料庫。

那你們知道什麼是讀寫性能比較高嗎?那就是讀的比較快、寫的也比較快的時候,才是讀寫性能比較高!

第2點:HBase的特點

1)極易擴展

HBase底層依賴HDFS,當磁碟空間不足的時候,我們只需要動態增加DataNode節點就可以了。當然也可以通過增加伺服器來對集群的存儲進行擴容。

2)海量存儲

可以存儲大批量的數據。在存儲海量數據的前提下,能在幾十到百毫秒內返回數據。這點和HBase的極易擴展性非常相關。正因為HBase良好的擴展性,才為海量數據的存儲提供了便利。

3)列式存儲(這裡一定要搞清楚列式存儲和行式存儲的區別)

這裡的列式存儲其實說的是列族存儲,HBase是根據列族來存儲數據的。列族下面可以有非常多的列,列族在創建表的時候就必須要指定了。

4)稀疏

稀疏主要是針對HBase列的靈活性,在列族中,你可以指定任意多的列,在列數據為空的情況下,是不會佔用存儲空間的。

5)數據類型單一

它所有的數據都是以字節數組進行存儲。

第3點:HBase表的數據模型

先給出一張HBase的設計表,根據這張表進行介紹表的結構。

rowkey行鍵

1)它是表(table)的主鍵,table中的記錄按照rowkey的字典序進行排序,這裡就必須要說說什麼是字典序?

有多機構的資料就是一筆帶過,一點也不負責,讓人非常不爽。老劉就不得不去搜搜字典序排序的相關知識。

通俗地講,字典序排序大概就是兩個作比較的內容從第一個字母開始比較,按照ASCII碼錶比較大小,小的放在前面,第一個相同就比較下一個,都相同且一個比較完了,則短的排在前面。

常見ASCII碼的大小規則:0~9<A~Z<a~z

2)rowkey行鍵它可以是任意的字符串,其中它的最大長度是 64KB,實際應用中長度一般為 10-100bytes。

Column Family列族

1)HBase表中的每個列,都歸屬於某個列族。

2)列族是表的schema的一部分(而列不是),即建表時至少指定一個列族。

3)比如我們創建user表,包含info、data兩個列族,代碼就為create 'user', 'info', 'data'。

Column列

列肯定是表的某一個列族下的一個列,用列族名:列名表示,比如`info`列族下的`name`列,就表示為`info:name`。

Cell單元格

如上圖,我們通過指定rowkey行鍵、列族、列,就可以確定的一個Cell單元格。在Cell中的數據是沒有任何類型的,全部都是以字節數組的形式進行存儲的。

Timestamp時間戳

這個說的就是可以對表中的Cell多次賦值,每次賦值操作時的時間戳timestamp,可看成Cell值的版本號version number。

也就是一個Cell可以有多個版本的值的意思。

第4點:HBase架構

從圖中可以看出,這是一個非常典型的主從架構。下面詳細說下各個組件:

Client客戶端

Client它是操作HBase集群的入口,利用Client,再通過RPC與HMaster進行通信,可以完成表的增、刪、改操作。也可以通過RPC與RegionServer通信,完成讀寫表數據的操作。

一般我們可以利用HBase shell或者Java API進行編程,完成上述表的操作。

ZooKeeper集群

ZooKeeper是什麼有什麼用,老劉已經在ZooKeeper框架那篇文章中詳細講解了,大家可以去看看。那它在HBase集群中的作用,就非常明顯了,① 它實現了HMaster的高可用,多HMaster間進行主備選舉。② 保存了HBase的元數據信息meta表。③ 對HMaster和HRegionServer各個節點進行監控。

HMaster

HBase集群也是主從架構,HMaster是主角色,是集群的老大,主要負責管理表和Region。

那它管理表和Region做一些什麼呢?

1)管理Client對表的增刪改的一些操作;

2)管理Region的操作就會比管理Client多一點。當Region分裂後,負責新Region分配到指定的HRegionServer上;當HRegionServer宕機後,負責其上的region的遷移;以及管理HRegionServer之間的負載均衡。

那大家有沒有了解負載均衡,什麼是負載均衡?

舉個例子,一個網站最開始建立的時候,它的訪問量比較小,但當它的流量變得特別大的時候,並發量就變得特別大了,網站就會出現訪問延遲的一些現象。這個時候呢,就需要用到負載均衡了。以前這個網站是一個單一伺服器,現在就可以配置多個伺服器集群,那樣就可以把訪問流量分發到集群中的不同伺服器上,這樣就大大減少了單一伺服器上的壓力,也就是負載均衡想要做的事。

HRegionServer

它是HBase集群中從角色,是集群中的小弟。它主要負責響應客戶端的讀寫數據請求,以及負責管理一系列的Region。

Region

它是HBase集群中分布式存儲的最小單元,一個Region對應一個Table表的部分數據。簡單理解就是表存儲在HBase中,並且都是以Region為單位進行存儲。

第5點:HBase shell命令

說一些常用的基礎操作命令:

創建user表,包含info、data兩個列族create 'user', 'info', 'data'使用put命令向user表中插入信息,row key為rk0001,列族info中添加名為name的列,值為zhangsanput 'user', 'rk0001', 'info:name', 'zhangsan'獲取user表中row key為rk0001的所有信息(即所有cell的數據)get 'user', 'rk0001'獲取user表中row key為rk0001,info列族的所有信息get 'user', 'rk0001', 'info'更新數據操作 將user表的f1列族版本數改為5alter 'user', NAME => 'info', VERSIONS => 5刪除數據以及刪除表操作刪除user表row key為rk0001,列標示符為info:name的數據delete 'user', 'rk0001', 'info:name'清空表數據truncate 'user'刪除表首先需要先讓該表為disable狀態,使用命令:disable 'user'然後使用drop命令刪除這個表drop 'user'注意:如果直接drop表,會報錯:Drop the named table. Table must first be disabled創建user表,包含info、data兩個列族create 'user', 'info', 'data'使用put命令向user表中插入信息,row key為rk0001,列族info中添加名為name的列,值為zhangsanput 'user', 'rk0001', 'info:name', 'zhangsan'獲取user表中row key為rk0001的所有信息(即所有cell的數據)get 'user', 'rk0001'獲取user表中row key為rk0001,info列族的所有信息get 'user', 'rk0001', 'info'更新數據操作 將user表的f1列族版本數改為5alter 'user', NAME => 'info', VERSIONS => 5刪除數據以及刪除表操作刪除user表row key為rk0001,列標示符為info:name的數據delete 'user', 'rk0001', 'info:name'清空表數據truncate 'user'刪除表首先需要先讓該表為disable狀態,使用命令:disable 'user'然後使用drop命令刪除這個表drop 'user'注意:如果直接drop表,會報錯:Drop the named table. Table must first be disabled再說一下HBase的高級操作命令:

顯示伺服器狀態status 'node01'顯示HBase當前用戶whoami顯示當前所有的表list統計指定表的記錄數count 'user' 檢查表是否存在,適用於表量特別多的情況exists 'user'檢查表是否啟用或禁用is_enabled 'user'is_disabled 'user'禁用一張表/啟用一張表disable 'user'enable 'user'刪除一張表,記得在刪除表之前必須先禁用drop上述都是HBase shell命令的內容,還有用JAVA API進行表操作的內容,但是這部分老劉就不講解了,有需要的話,可以聯繫老劉,我會分享給你。

02 HBase總結

今天是HBase知識點的第一部分,老劉儘量用大白話講這些知識點講述出來了,如果還有疑問,可以聯繫老劉哦!

最後希望今天講的內容對大數據感興趣的同學有幫助,也希望能夠得到大家的批評和指點。

相關焦點

  • HBase調優 | HBase Compaction參數調優
    hbase.hstore.compaction.min當某個列族下的HFile 文件數量超過這個值,則會觸發 minor compaction操作 默認是3,比較小,建議設置10-15 這個值影響是: 設置過小會導致合併文件太頻繁,特別是頻繁bulkload 或者數據量比較大的情況下 設置過大又會導致一個列族下面的HFile 數量比較多,
  • 不拘一格降HBase,數據存儲的利器,學完摸清Google存儲套路——大數據課程更新09.01
    本次更新大數據第七階段:《分布式資料庫HBase》全部課程及課程資料。本階段介紹HBase 是一個分布式的、面向列的分布式資料庫,HBase是基於Google 開源的bigtable的實現,面向列的非關係性資料庫。在大數據分布式處理中,HBase是必不可少的數據存儲「利器」。
  • HBase原理 | HBase Compaction介紹與參數調優
    Minor Compaction稱為小合併,主要是選取一些小的、相鄰的HFile將他們合併成較大的HFile,並刪除HFile中的過期數據。Major Compaction稱為大合併,會將一個列族下的所有HFile合併成一個大的HFile,同時刪除過期數據、已刪除數據(打了Delete標記的)、版本過大的數據等三類無效數據。
  • 10大HBase常見運維工具整理
    HBase組件介紹HBase作為當前比較熱門和廣泛使用的NoSQL資料庫,由於本身設計架構和流程上比較複雜,對大數據經驗較少的運維人員門檻較高,本文對當前HBase上已有的工具做一些介紹以及總結。#清除HBase下的所有數據hbase clean --cleanAll使用參數如下:
  • 大數據查詢——HBase讀寫設計與實踐
    從數據量及查詢要求來看,分布式平臺上具備大數據量存儲,且提供實時查詢能力的組件首選 HBase。根據需求做了初步的調研和評估後,大致確定 HBase 作為主要存儲組件。將需求拆解為寫入和讀取 HBase 兩部分。
  • 深入 HBase 架構解析
    可是即使客戶端有緩存,在初始階段需要三次請求才能直到用戶Table真正所在的位置也是性能低下的,而且真的有必要支持那麼多的HRegion嗎?或許對Google這樣的公司來說是需要的,但是對一般的集群來說好像並沒有這個必要。
  • HBase與mapreduce集成
    在公司中,大多數都是hbase和mapreduce共同進行業務操作,hbase多數都是讀寫操作,hbase和hadoop在內部已經封裝好了,我們要做的就是調用。常見的模式1、從hbase讀取數據將hbase的數據作為map的輸入2、將數據寫入hbase將hbase作為reduce輸出3、從hbase讀,再寫入hbase
  • 從零開始學習大數據系列(六十二)HBase Client API使用入門
    -- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client --><dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> &
  • Hbase命令大全
    cell中的數據是沒有類型的,全部是字節碼形式存貯。    hbase按照時間戳降序排列各時間版本,其他映射建按照升序排序。時間戳版本號 timestamp    每個cell都保存著同一份數據的多個版本。版本通過時間戳來索引。時間戳的類型是 64位整型。時間戳可以由hbase(在數據寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。
  • HBase的讀寫和javaAPI的使用
    一、hbase系統管理表hbase:namespace,記錄了hbase中所有namespace的信息 ,當前系統下有哪些namespace信息scan 'hbase:namespace'hbase:meta,記錄了region信息scan 'hbase:meta'二、讀寫思想client(get、scan)rowkey條件(1)由於rowkey是存儲在region
  • Hive整合HBase完整筆記(親測)
    (1)測試數據文件創建測試文件course.csv第一列為課程名稱,第二列為課程分數(2)數據加載到HDFS在hdfs文件系統中創建hive-hbase目錄,並加載測試數據。查看hdfs文件目錄從查詢語句的執行結果可以看出,Hive表中的數據和hdfs上的數據一致。
  • HBase基礎學習之bulkload了解
    之前在學習importTSV我們準備兩份數據這兩份數據在導入hbase後,數據還是存在的,我們如果想要實現和hive中類似「剪切」的功能該怎麼辦?這種可以跨過先寫入memstore,直接將數據轉換為storefile文件。
  • HBase二級索引方案
    Apache Phoenix: 功能圍繞著SQL on hbase,支持和兼容多個hbase版本, 二級索引只是其中一塊功能。 二級索引的創建和管理直接有SQL語法支持,使用起來很簡便, 該項目目前社區活躍度和版本更新迭代情況都比較好。
  • Flink SQL 實戰:HBase 的結合應用
    docker run -it --network=host -p 2181:2181 -p 60011:60011 docker.io/guxinglei/myhbase:latest bash進入容器,啟動 HBase 集群,以及啟動 rest server,後續方便我們用 REST API 來讀取 Flink SQL 寫進 HBase 的數據
  • 好程式設計師大數據培訓分享大數據技術Hbase和Hive詳解
    好程式設計師大數據培訓分享大數據技術Hbase和Hive詳解,今天給大家介紹一下關於零基礎學習大數據視之HBASE和HIVE是多麼重要的技術,那麼兩者有什麼區別呢?下面我們一起來看一下吧。
  • 如何將Hive與HBase整合聯用
    不僅如此,還能通過 Hive 將數據批量地導入到 HBase 中。Hive 與 HBase 整合的實現是利用兩者本身對外的 API 接口互相通信來完成的,其具體工作交由 Hive 的 lib 目錄中的 hive-hbase-handler-xxx.jar 工具類來實現對 HBase 數據的讀取。
  • 「HBase筆記」從洗襪子到hbase(hbase是什麼鬼東西)
    2、介於 nosql和 RDBMS之間,數據只能通過主鍵(row key)和主鍵的range進行檢索。3、只支持單行事務(可以通過hive支持實現複雜的操作,比如多表join)。4、通常用於存儲結構化和半結構化鬆散數據。5、Hbase查詢數據功能非常簡單,不支持像join這樣的複雜操作和複雜事務(在行級別)。
  • HBase學習之路 (四)HBase的API操作
    HBase學習之路 (四)HBase的API操作Eclipse環境搭建具體的jar的引入方式可以參考http://www.cnblogs.com/qingyunzong/p/8623309.htmlHBase API操作表和數據  1 import java.io.IOException;  2 import java.util.Date;  3  4 import
  • 關於Hbase的一些常見問題
    一、通常向HBase批量導入數據有三種常用方式1、使用HBase提供的TableOutputFormat,原理是通過一個Mapreduce作業將數據導入HBase2、還有一種方式就是使用HBase原生Client
  • 通過Java API 像 MySQL一樣查詢HBASE
    隨著大數據的應用普及,HBASE作為一種非常適應海量數據存儲和查詢的資料庫也逐步流行起來。