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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HBase简介、搭建环境及安装部署

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HBase简介、搭建环境及安装部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HBase簡介

1、HBase是Apache Hadoop的數據庫,能夠對大型數據提供隨機、實時的讀寫訪問,是Google的BigTable的開源實現。

2、HBase的目標是存儲并處理大型的數據,更具體地說僅用普通的硬件配置,能夠處理成千上萬的行和列所組成的大型數據庫。
3、HBase是一個開源的、分布式的、多版本的、面向列的存儲模型。可以直接使用本地文件系統,也可使用Hadoop的HDFS文件存儲系統。

為了提高數據的可靠性和系統的健壯性,并且發揮HBase處理大型數據的能力,還是使用HDFS作為文件存儲系統更佳。

另外,HBase存儲的是松散型數據,具體來說,HBase存儲的數據介于映射(key/value)和關系型數據之間。如下圖所示,HBase存儲的數據從邏輯上看就是一張很大的表,并且它的數據列可以根據需要動態增加。每一個cell中的數據又可以有多個版本(通過時間戳來區別),從下圖來看,HBase還具有 " 向下提供存儲,向上提供運算 " 的特點。

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 Zookeeper

Zookeeper Quorum中除了存儲了-ROOT-表的地址和HMaster的地址,HRegionServer也會把自己以Ephemeral方式注冊到 Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也避免了HMaster的 單點問題;

3 HMaster

每臺HRegionServer都會與HMaster進行通信,HMaster的主要任務就是要告訴每臺HRegion Server它要維護哪些HRegion。
當一臺新的HRegionServer登錄到HMaster時,HMaster會告訴它等待分配數據。而當一臺HRegion死機時,HMaster會把它負責的HRegion標記為未分配,然后再把它們分配到其他的HRegion Server中。
HBase已經解決了HMaster單點故障問題(SPFO),并且HBase中可以啟動多個HMaster,那么它就能夠通過Zookeeper來保證系統中總有一個Master在運行。HMaster在功能上主要負責Table和Region的管理工作,具體包括:

?

4 HRegion
當表的大小超過設置值得時候,HBase會自動地將表劃分為不同的區域,每個區域包含所有行的一個子集。對用戶來說,每個表是一堆數據的集合,靠主鍵來區分。從物理上來說,一張表被拆分成了多塊,每一塊就是一個HRegion。我們用表名+開始/結束主鍵來區分每一個HRegion,一個HRegion會保存一個表里面某段連續的數據,從開始主鍵到結束主鍵,一張完整的表格是保存在多個HRegion上面。?

  • 管理用戶對Table的增刪改查操作
  • 管理HRegionServer的負載均衡,調整Region分布
  • 在Region Split后,負責新Region的分配
  • 在HRegionServer停機后,負責失效HRegionServer上的Region遷移

5 HRegionServer

HRegionServer主要負責響應用戶I/O請求,向HDFS文件系統中讀寫數據,是HBase中最核心的模塊。

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

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

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

6.1 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里面的每個KeyValue對就是一個簡單的byte數組。但是這個byte數組里面包含了很多項,并且有固定的結構。我們來看看里面的具體結構:

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

6.2 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,可參見上文描述。

7 ROOT表和META表
用戶表的Regions元數據被存儲在.META.表中,隨著Region的增多,.META.表中的數據也會增大,并分裂成多個Regions。為了定位.META.表中各個Regions的位置,把.META.表中的所有Regions的元數據保存在-ROOT-表中,最后由Zookeeper記錄-ROOT-表的位置信息。所有客戶端訪問用戶數據前,需要首先訪問Zookeeper獲得-ROOT-的位置,然后方位-ROOT-表獲得.META.表的位置,最后根據.META.表中的信息確定用戶數據存放的位置,-ROOT-表永遠不會被分割,它只有一個Region,這樣可以保證最多需要三次跳轉就可以定位任意一個Region。為了加快訪問速度,.META.表的Regions全部保存在內存中,如果.META.表中的每一行在內存中占大約1KB,且每個Region限制為128M,下圖中的三層結構可以保存Regions的數目為(128M/1KB)*(128/1KB)=2^34個。

HBase安裝

HBase的安裝也有三種模式:單機模式、偽分布模式和完全分布式模式,在這里只介紹完全分布模式。前提是Hadoop集群和Zookeeper已經安裝完畢,并能正確運行。?
第一步:下載安裝包,解壓到合適位置,并將權限分配給安裝用戶(運行Hadoop的賬戶):

從Apache網站上(hbase.apache.org)下載HBase發布包:? hbase-1.2.7-bin.tar.gz,通過上傳軟件上傳至/usr/local/src目錄;

解壓軟件包并移動至/opt/目錄:(所有節點

cd /usr/local/src tar -xzvf hbase-1.2.7-bin.tar.gz mv ./hbase-1.2.7 /opt/hbase-2.0.0

第二步:配置相關的文件
(1)配置hbase-env.sh,該文件在/opt/hbase-2.0.0/conf

export?JAVA_HOME=/usr/java/default? ??#Java安裝路徑 export?HBASE_CLASSPATH=/opt/hbase-1.2.7/conf????#HBase類路徑 export?HBASE_MANAGES_ZK=false? ??#由HBase負責啟動和關閉Zookeeper

(2)配置hbase-site.xml,該文件位于/opt/hbase-2.0.0/conf

<property><name>hbase.rootdir</name><value>hdfs://namenode1:9000/hbase</value> </property> <property><name>hbase.cluster.distributed</name><value>true</value> </property> <property><name>hbase.zookeeper.quorum</name><value>slave01,slave02,slave03</value> </property>

(3)配置conf/regionservers?

slave01 slave02 slave03

第三步運行測試

Distributed HBase Quickstart

See quickstart-fully-distributed for a walk-through of a simple three-node cluster configuration with multiple ZooKeeper, backup HMaster, and RegionServer instances.

Procedure: HDFS Client Configuration

  • Of note, if you have made HDFS client configuration changes on your Hadoop cluster, such as configuration directives for HDFS clients, as opposed to server-side configurations, you must use one of the following methods to enable HBase to see and use these configuration changes:

  • Add a pointer to your HADOOP_CONF_DIR to the HBASE_CLASSPATH environment variable in hbase-env.sh.

  • Add a copy of hdfs-site.xml (or hadoop-site.xml) or, better, symlinks, under ${HBASE_HOME}/conf, or

  • if only a small set of HDFS client configurations, add them to hbase-site.xml.

  • An example of such an HDFS client configuration is dfs.replication. If for example, you want to run with a replication factor of 5, HBase will create files with the default of 3 unless you do the above to make the configuration available to HBase.

    根據官方說明,拷貝Hadoop的hdfs-site.xml文件至${HBASE_HOME}/conf?目錄;

    cd /opt/hbase-1.2.7/bin ./start-hbase.sh

    網頁觀察:http://master:60010

    基本操作

     ?(注意操作后不要加分號)

      (常量不需要用引號引起來,在shell中輸入Object.constants命令可以查看常量) 

      (表名和列名都需要加引號,不區分單雙引號) 

      hbase shell,是Hbase的命令行工具,命令行中執行hbase shell即可進入hbase shell命令行 :

    hbase shell

      1) list ?查看hbase中所有表;

      2) 創建表:?

        create '表名' , '列簇1' , '列簇2'....

    create 'student', 'name','grade','course'

    管理界面中查看student:

    ?

    ?

    ?

    3)describe 查看表結構

    describe '表名' ;

    eg: describe 'student'

    4)插入數據和查看數據

    put '表名','行鍵名','列名','value','列名2','value2','family:列名1','value3'.......

    put 'student','wish','name:','wish'

    5)查詢數據:

    get '表名','行名'

    get 'student','wish'

    6)插入更多數據

    hbase(main):004:0> put 'student','wish','course:English','100' hbase(main):005:0> put 'student','wish','course:Chinese','60' hbase(main):006:0> put 'student','rain','course:Chinese','100' hbase(main):007:0> put 'student','rain','course:English','200' get 'student','wish','course' get 'student','wish',['course'] get 'student','wish',['course','name']

    5)刪除數據 

    delete 'student','wish','course:Math'

    6)刪除表

    需停止表的可用性,再刪除表   

    disable 'student' ???????drop 'student'

    7) 統計行數

    count 'student'

    8)常用Hbase shell命令截圖:

    總結

    以上是生活随笔為你收集整理的HBase简介、搭建环境及安装部署的全部內容,希望文章能夠幫你解決所遇到的問題。

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