亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是HBase

發布時間:2021-12-09 10:46:55 來源:億速云 閱讀:186 作者:小新 欄目:大數據

這篇文章主要介紹了什么是HBase,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、什么是HBase

  HBase 是一個高可靠、高性能、面向列、可伸縮的分布式存儲系統,利用Hbase技術可在廉價PC Server上搭建 大規模結構化存儲集群。

 HBase 是Google Bigtable 的開源實現,與Google Bigtable 利用GFS作為其文件存儲系統類似, HBase 利用Hadoop HDFS 作為其文件存儲系統;Google 運行MapReduce 來處理Bigtable中的海量數據, HBase 同樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable 利用Chubby作為協同服務, HBase 利用Zookeeper作為對應。

二、HBase 設計模型

   HBase 中的每一張表就是所謂的 BigTable。BigTable 會存儲一系列的行記錄,行記錄有三個基本類型的定義:Row Key、Time Stamp、Column。

1、Row Key 是行在 BigTable 中的唯一標識。

2、Time Stamp 是每次數據操作對應關聯的時間戳,可以看做 SVN 的版本。

3、Column 定義為< family>:< label>,通過這兩部分可以指定唯一的數據的存儲列,family 的定義和修改需要 對 HBase 進行類似于 DB 的 DDL 操作,而 label ,不需要定義直接可以使用,這也為動態定制列提供了一種手段 。family 另一個作用體現在物理存儲優化讀寫操作上,同 family 的數據物理上保存的會比較臨近,因此在業務設計的過程中可以利用這個特性。

1、邏輯存儲模型

   HBase 以表的形式存儲數據。表由行和列組成。列劃分為若干個列族(row family),如下圖所示。
          什么是HBase

下面是對表中元素的詳細解析:
Row Key

nosql數據庫們一樣,row key是用來檢索記錄的主鍵。訪問hbase table中的行,只有三種方式:

1 通過單個row key訪問

2 通過row key的range

3 全表掃描

Row key行鍵 (Row key)可以是任意字符串(最大長度是 64KB,實際應用中長度一般為 10-100bytes),在hbase內部,row key保存為字節數組。

存儲時,數據按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,將經常一起讀取的行存儲放到一起。(位置相關性)

注意:
  1、字典序對int排序的結果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行鍵必須用0作左填充。
  2、行的一次讀寫是原子操作 (不論一次讀寫多少列)。

列族

  hbase表中的每個列,都歸屬與某個列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如courses:history , courses:math 都屬于 courses 這個列族。

  訪問控制、磁盤和內存的使用統計都是在列族層面進行的。實際應用中,列族上的控制權限能 幫助我們管理不同類型的應用:我們允許一些應用可以添加新的基本數據、一些應用可以讀取基本數據并創建繼承的列族、一些應用則只允許瀏覽數據(甚至可能因 為隱私的原因不能瀏覽所有數據)。

時間戳

  HBase中通過row和columns確定的為一個存貯單元稱為cell。每個 cell都保存著同一份數據的多個版本。版本通過時間戳來索引。時間戳的類型是 64位整型。時間戳可以由hbase(在數據寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。

為了避免數據存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase提供了兩種數據版本回收方式。一是保存數據的最后n個版本,二是保存最近一段時間內的版本(比如最近七天)。用戶可以針對每個列族進行設置。

Cell

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

2、物理存儲模型

  Table 在行的方向上分割為多個HRegion,每個HRegion分散在不同的RegionServer中。
          什么是HBase
  每個HRegion由多個Store構成,每個Store由一個memStore和0或多個StoreFile組成,每個Store保存一個Columns Family 
        什么是HBase

StoreFile以HFile格式存儲在HDFS中。

三、HBase 存儲架構

  從HBase的架構圖上可以看出,HBase中的存儲包括HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等, 以下是 HBase 存儲架構圖:
  
什么是HBase  

  HBase中的每張表都通過行鍵按照一定的范圍被分割成多個子表(HRegion),默認一個HRegion超過256M就要被分割成兩個,這個過程由HRegionServer管理,而HRegion的分配由HMaster管理。

HMaster的作用:
          1、 為Region server分配region。
          
         2、 負責Region server的負載均衡

   3、發現失效的Region server并重新分配其上的region。

  4、 HDFS上的垃圾文件回收。

    5、 處理schema更新請求。

HRegionServer作用:
  
     1、 維護master分配給他的region,處理對這些region的io請求。

     2、 負責切分正在運行過程中變的過大的region。

     可以看到,client訪問hbase上的數據并不需要master參與(尋址訪問zookeeper和region server,數據讀寫訪問region server),master僅僅維護table和region的元數據信息(table的元數據信息保存在zookeeper上),負載很低。 HRegionServer存取一個子表時,會創建一個HRegion對象,然后對表的每個列族創建一個Store實例,每個Store都會有一個MemStore和0個或多個StoreFile與之對應,每個StoreFile都會對應一個HFile, HFile就是實際的存儲文件。因此,一個HRegion有多少個列族就有多少個Store。 一個HRegionServer會有多個HRegion和一個HLog。

HRegion

  table在行的方向上分隔為多個Region。Region是HBase中分布式存儲和負載均衡的最小單元,即不同的region可以分別在不同的Region Server上,但同一個Region是不會拆分到多個server上。

  Region按大小分隔,每個表一般是只有一個region。隨著數據不斷插入表,region不斷增大,當region的某個列族達到一個閾值(默認256M)時就會分成兩個新的region。

     1、< 表名,startRowkey,創建時間>

   2、由目錄表(-ROOT-和.META.)記錄該region的endRowkey

   HRegion定位:Region被分配給哪個Region Server是完全動態的,所以需要機制來定位Region具體在哪個region server。
   HBase使用三層結構來定位region:

   1、 通過zk里的文件/hbase/rs得到-ROOT-表的位置。-ROOT-表只有一個region。

  2、通過-ROOT-表查找.META.表的第一個表中相應的region的位置。其實-ROOT-表是.META.表的第一個region;.META.表中的每一個region在-ROOT-表中都是一行記錄。
  
 3、通過.META.表找到所要的用戶表region的位置。用戶表中的每個region在.META.表中都是一行記錄。

   -ROOT-表永遠不會被分隔為多個region,保證了最多需要三次跳轉,就能定位到任意的region。client會將查詢的位置信息保存緩存起來,緩存不會主動失效,因此如果client上的緩存全部失效,則需要進行6次網絡來回,才能定位到正確的region,其中三次用來發現緩存失效,另外三次用來獲取位置信息。
   
Store
  
  每一個region由一個或多個store組成,至少是一個store,hbase會把一起訪問的數據放在一個store里面,即為每個ColumnFamily建一個store,如果有幾個ColumnFamily,也就有幾個Store。一個Store由一個memStore和0或者多個StoreFile組成。 HBase以store的大小來判斷是否需要切分region。 
  
MemStore

  memStore 是放在內存里的。保存修改的數據即keyValues。當memStore的大小達到一個閥值(默認64MB)時,memStore會被flush到文件,即生成一個快照。目前hbase 會有一個線程來負責memStore的flush操作。
     
StoreFile

   memStore內存中的數據寫到文件后就是StoreFile,StoreFile底層是以HFile的格式保存。
HFile

   HBase中KeyValue數據的存儲格式,是hadoop的二進制格式文件。 首先HFile文件是不定長的,長度固定的只有其中的兩塊:Trailer和FileInfo。Trailer中有指針指向其他數據塊的起始點,FileInfo記錄了文件的一些meta信息。 Data Block是hbase io的基本單元,為了提高效率,HRegionServer中有基于LRU的block cache機制。每個Data塊的大小可以在創建一個Table的時候通過參數指定(默認塊大小64KB),大號的Block有利于順序Scan,小號的Block利于隨機查詢。每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成,Magic內容就是一些隨機數字,目的是防止數據損壞,結構如下。
 什么是HBase
HFile結構圖如下:
什么是HBase

  Data Block段用來保存表中的數據,這部分可以被壓縮。 Meta Block段(可選的)用來保存用戶自定義的kv段,可以被壓縮。 FileInfo段用來保存HFile的元信息,不能被壓縮,用戶也可以在這一部分添加自己的元信息。 Data Block Index段(可選的)用來保存Meta Blcok的索引。 Trailer這一段是定長的。保存了每一段的偏移量,讀取一個HFile時,會首先讀取Trailer,Trailer保存了每個段的起始位置(段的Magic Number用來做安全check),然后,DataBlock Index會被讀取到內存中,這樣,當檢索某個key時,不需要掃描整個HFile,而只需從內存中找到key所在的block,通過一次磁盤io將整個 block讀取到內存中,再找到需要的key。DataBlock Index采用LRU機制淘汰。 HFile的Data Block,Meta Block通常采用壓縮方式存儲,壓縮之后可以大大減少網絡IO和磁盤IO,隨之而來的開銷當然是需要花費cpu進行壓縮和解壓縮。(備注: DataBlock Index的缺陷。    a) 占用過多內存 b) 啟動加載時間緩慢)

HLog
  HLog(WAL log):WAL意為write ahead log,用來做災難恢復使用,HLog記錄數據的所有變更,一旦region server 宕機,就可以從log中進行恢復。
LogFlusher
  定期的將緩存中信息寫入到日志文件中
LogRoller 
     對日志文件進行管理維護  

四、Hbase 的單機部署安裝步驟

HBase 需要再 Hadoop 環境運行,因此安裝HBase 的前提是必須安裝 Hadoop 環境。

Hadoop版本:hadoop-2.6.0-cdh6.7.0

下載地址:http://archive.cloudera.com/cdh6/cdh/5/hadoop-2.6.0-cdh6.7.0.tar.gz

HBase版本:hbase-1.2.0-cdh6.7.0

下載地址:http://archive.cloudera.com/cdh6/cdh/5/hbase-1.2.0-cdh6.7.0.tar.gz

HBase 的安裝步驟如下所示:

步驟一 、解壓hbase-1.2.0-cdh6.7.0.tar.gz 到指定的目錄下(這里是在/home/hadoop/app/)。

[hadoop@hadoop001 software]$ ll hbase-1.2.0-cdh6.7.0.tar.gz 
-rw-rw-r--. 1 hadoop hadoop 156854981 Apr  1  2016 hbase-1.2.0-cdh6.7.0.tar.gz
[hadoop@hadoop001 software]$ tar -zxvf hbase-1.2.0-cdh6.7.0.tar.gz -C /home/hadoop/app/
[hadoop@hadoop001 software]$ cd ../app/
[hadoop@hadoop001 app]$ ll
drwxr-xr-x. 32 hadoop hadoop 4096 Sep 27 15:21 hbase-1.2.0-cdh6.7.0

步驟二、配置 HBase 的環境變量到 ~/.bash_profile  文件中。

[hadoop@hadoop001 app]$ vi ~/.bash_profile 
export HBASE_HOME=/home/hadoop/appase-1.2.0-cdh6.7.0
export PATH=$HBASE_HOME/bin:$PATH

使配置文件立即生效:

[hadoop@hadoop001 app]$ source ~/.bash_profile

步驟三 、修改 conf/hbase-env.sh。

       1) 去掉 JAVA_HOME 前的 “#”,并將其修改成自己安裝的 Java 路徑。

export JAVA_HOME=/home/hadoop/appk1.8.0_45

       2) 去掉 HBASE_MANAGES_ZK 前的 “#”,并設置其值為 true(HBase 管理自己的 ZooKeeper,這樣就不需要安裝 ZooKeeper)。

export HBASE_MANAGES_ZK=true

步驟四、 打開 conf/hbase-site.xml,添加如下內容。

        hbase.rootdir     需要與之前安裝的 Hadoop 目錄下 conf/core-site.xml 文件中的 fs.default.name 屬性值對應。

        fs.default.name  設置為hdfs://hadoop001:9000/

        hbase.rootdir     設置為hdfs://hadoop001:9000/hbase

        hbase.ZooKeeper.quorum 設置為 默認是:localhost  也可以設置為:hadoop001

        hbase.tmp.dir     設置為之前創建的 tmp 目錄:/usr/java/hbase/tmp 

代碼如下:

<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://hadoop001:9000</value>
        </property>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hadoop001:9000/hbase</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>localhost</value>
        </property>
        <property>
                <name>hbase.tmp.dir</name>
                <value>/home/hadoop/app/hbase-1.2.0-cdh6.7.0/hbase-tmp</value>
        </property>
</configuration>

步驟五 、啟動HBase(前提已經啟動 Hadoop)。

[hadoop@hadoop001 bin]$ ./start-hbase.sh 
starting master, logging to /home/hadoop/app/hbase-1.2.0-cdh6.7.0/logs/hbase-hadoop-master-hadoop001.out
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
[hadoop@hadoop001 bin]$

 步驟六 、在Hbase啟動成功之后,在瀏覽器中輸入網址 http://hadoop001:60010

感謝你能夠認真閱讀完這篇文章,希望小編分享的“什么是HBase”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

两当县| 那曲县| 怀来县| 广宁县| 东平县| 温宿县| 新津县| 图木舒克市| 叶城县| 淮北市| 安平县| 衡阳市| 龙陵县| 西盟| 古交市| 遂昌县| 上高县| 万源市| 石渠县| 阆中市| 湛江市| 张家界市| 邢台市| 吐鲁番市| 航空| 冕宁县| 准格尔旗| 乐亭县| 嘉黎县| 依安县| 小金县| 三门县| 文山县| 桦川县| 平顶山市| 铁岭市| 叙永县| 荃湾区| 明光市| 南岸区| 三穗县|