HBase(基於HDFS)的介紹及安裝


一:HBase簡介

(一)HBase了解(實現大<普通PC集群、十億行,百萬列>數據隨機、實時存取操作

前提:

基於Hdfs的查詢由於其存儲機制的限制,導致查詢速度響應緩慢,無法解決一些對速度有要求的場景;
傳統數據庫雖然查詢快,但是無法支撐海量數據。因此就出現了HBase這種"數據庫"。

HBase是一個高可靠、高性能、面向列、可伸縮的分布式數據庫,是建立在hdfs之上,被設計用來提供高可靠性,高性能、列存儲、可伸縮、多版本,的Nosql的分布式數據存儲系統(相對於文件系統查詢等操作效率更高,實時性更高),實現對大型數據的實時,隨機的讀寫請求。更是彌補了hive不能低延遲、以及行級別的增刪改的缺點。

   HBASE依賴於hdfs做底層的數據存儲    HBASE依賴於MapReduce做數據計算    HBASE依賴於zookeeper做服務協調

HBase基於Hdfs作為默認推薦的存儲引擎,采用基於kv結構的存儲方式,內部基於LSM算法進行數據排序,可以支持基於rowkey的快速檢索,但是不適合復雜的數據分析,比如join,group等。

另外:相對於其他關系型數據庫《優點:主要用於處理復雜的表與表之間關系,進行各自關聯查詢》,而HBase不提供表與表之間的關聯查詢(對於關系的處理很弱---也用不到分表),只進行簡單的查詢數據,幾乎沒有事務特性

二:HBase邏輯架構

(一)傳統數據庫結構

傳統的數據庫需要事先定義數據表的結構,並指定數據的類型,一旦創建就不能改變,修改的代價比較高。

而HBase則是采用kv的存儲方式,按照列族把不同的數據組織在一起。

(二)HBase數據庫結構

 

要查詢某一個具體字段的值,需要指定坐標:表名--->行鍵--->列族(ColumnFamily):列名(Qualifier)--->版本

三:HBase數據組織形式(大到小)

namespace:命名空間

一般就是邏輯上用於表的區分,類似數據庫中的database。在最終物理文件存儲的時候,會根據namespace切分目錄。

table:表

類似於數據庫中的table

column family:列族

相同列族的列會存放在一起。

row:行

由基於字符串的rowkey唯一指定,rowkey全局不能重復,按照字典序順序存儲,rowkey的設計對最終的查詢起到關鍵性作用。

column:列

用於存放字段的數據內容。

version:版本

如果數據存在多個版本,那么每個時間戳(版本)會對應一個數據。

四:物理架構

HBase底層基於hdfs構建,因此最終數據都存儲於hdfs中。整個HBase有三種核心角色: 

Master:負責節點的管理 RegionServer:負責數據的讀寫 Client:維護連接池,緩存元數據

另外Zookeeper是一個不可缺少的角色,查詢或者寫入都依賴於zk,因為zk中存儲了元數據位置的相關信息

因此可以看到,HBase中的Master其實是一個相對弱化的Master。

五:HBase核心組件RegionServer

HBase中核心的組件就是這個RegionServer,它是由WAL和Region組成。

WAL是一種順序寫入的日志,全稱是write ahead log,主要用於備份數據,當機器宕機后內存中的數據丟失,可以通過預寫日志進行恢復。
Region是主要的存儲結構,一個Region就代表一個數據分片,HBase默認提供了很多分片的機制,也可以在創建表時自定義分片。
Region內部由多個Store組成,每個Store代表一個列族,查詢的時候也是每個Store單獨進行查詢。
Store由memstore和Hfile組成,一般一個列族對應一個Store。新的數據寫入時,會先記錄在WAL中,然后存儲在內存中的memstore。
當數據量到達一定的閾值時,memstore中的數據會形成HFile寫入hdfs。讀數據的時候,會從memstore以及Hfile中讀取。

六:HBase尋址過程

HBase采用三級尋址方式(不會再多級了,因為每級尋址范圍夠大),並且客戶端不會每次都從頭查詢數據位置,會在客戶端建立緩存,提高查詢效率(因為空間、時間就近,極有可能 重復查詢該數據或者數據附件數據)

七:HBase體系架構

Client

包含訪問HBase的接口並維護cache來加快對HBase的訪問

Zookeeper

保證任何時候,集群中只有一個master
存貯所有Region的尋址入口。
實時監控Region server的上線和下線信息。並實時通知Master
存儲HBase的schema和table元數據

Master

為Region server分配region
負責Region server的負載均衡
發現失效的Region server並重新分配其上的region
管理用戶對table的增刪改操作

RegionServer

Region server維護region,處理對這些region的IO請求
Region server負責切分在運行過程中變得過大的region 

HLog(WAL log)---存放最新最新數據和操作(小文件)

– HLog文件就是一個普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,
        除了table和 region名字外,同時還包括sequence number和timestamp,timestamp是” 寫入時間”,sequence number的起始值為0,
       或者是最近一次存入文件系 統中sequence number。
– HLog SequeceFile的Value是HBase的KeyValue對象,即對應HFile中的 KeyValue

Region

– HBase自動把表水平划分成多個區域(region),每個region會保存一個表 里面某段連續的數據;每個表一開始只有一個region,隨着數據不斷插 入表,
       region不斷增大,當增大到一個閥值的時候,region就會等分會 兩個新的region(裂變);
– 當table中的行不斷增多,就會有越來越多的region。這樣一張完整的表 被保存在多個Regionserver上。

Memstore 與 storefile

– 一個region由多個store組成,一個store對應一個CF(列族)
– store包括位於內存中的memstore和位於磁盤的storefile寫操作先寫入 memstore,當memstore中的數據達到某個閾值,
       hregionserver會啟動 flashcache進程寫入storefile,每次寫入形成單獨的一個storefile
– 當storefile文件的數量增長到一定閾值后,系統會進行合並(minor、 major compaction),在合並過程中會進行版本合並和刪除工作 (majar),
       形成更大的storefile。
– 當一個region所有storefile的大小和超過一定閾值后,會把當前的region 分割為兩個,並由hmaster分配到相應的regionserver服務器,實現負載均衡。
– 客戶端檢索數據,先在memstore找,找不到再找storefile  (會將搜索的最多的數據存放在memstore中,而不用去讀取storefile
– HRegion是HBase中分布式存儲和負載均衡的最小單元。最小單元就表 示不同的HRegion可以分布在不同的HRegion server上。
– HRegion由一個或者多個Store組成,每個store保存一個columns family。
– 每個Strore又由一個memStore和0至多個StoreFile組成。

如圖:StoreFile 以HFile格式保存在HDFS上。

八:應用場景

從上面的架構可以看出HBase適合海量數據、基於列的存儲,並且列比較稀疏的場景。典型的應用場景有:

1 用戶畫像

用戶畫像在精准營銷、個性化推薦等場景都有很重要的意義。因此每個用戶是一個rowkey,不同的用戶所擁有的畫像標簽不一樣,可以用不同的column來表示。在精准營銷的場景,則可以根據營銷的粒度(如店鋪),在用戶Id前面拼接店鋪id,查詢的時候可以通過指定開始和結束的范圍,實現快速查詢。

2 用戶行為

如果要分析單個用戶的行為,則可以通過設計某個字段最大版本數,存儲用戶的各種行為數據。當需要分析時,可以搭配Impala或者presto(需要自定義數據源),基於rowkey快速抓取用戶行為鏈路,進行分析。

九:安裝HBase

(一)確保zk集群安裝完畢

(二)要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下

(三)修改hbase-env.sh環境配置文件

    export JAVA_HOME=/home/hadoop/App/jdk1.8.0_241
    //告訴hbase使用外部的zk export HBASE_MANAGES_ZK=false

(四)修改hbase-site.xml配置文件

    <configuration>
        <!-- 指定hbase在HDFS上存儲的路徑 -->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://ns1/hbase</value>    //無法解析,所以需要我們拷貝Hadoop下的兩個配置文件
        </property>
        <!-- 指定hbase是分布式的 -->
        <property>
                <name>hbase.cluster.distributed</name>
                 <value>true</value>
        </property>
        <!-- 指定zk的地址,多個用“,”分割 -->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>hadoopH5:2181,hadoopH6:2181,hadoopH7:2181</value>
        </property>
    </configuration>

(五)配置regionservers節點信息,修改regionservers文件

hadoopH5
hadoopH6
hadoopH7

(六)拷貝文件到其他節點(可以刪除文檔目錄再傳)

hadoopH3本地上傳到hadoopH4、H5、H6、H7。使用scp命令進行

(七)HBase啟動測試

會自動在啟動節點中設置Master

 

注意在hadoopH4中也啟動一個master用於設置高可用

./hbase-daemon.sh start master

web頁面訪問:

通過kill一個master可以測試另一個的使用,實現HA:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM