一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Hbase分布式數(shù)據(jù)庫

 夜貓速讀 2022-06-17 發(fā)布于湖北

一、Hbase數(shù)據(jù)庫概述;

二、Hbase體系結(jié)構(gòu);

三、Hbase數(shù)據(jù)庫模型;

四、總結(jié)Hbase整體特點;

五、案例:搭建Hbase分布式數(shù)據(jù)庫系統(tǒng);

一、Hbase數(shù)據(jù)庫概述;

概述:Hbase是一個基于HDFS的面向列的分布式數(shù)據(jù)庫,源于Google的BigTable基于GFS進行分布式數(shù)據(jù)存儲一樣,前文提到,Hbase是基于流式數(shù)據(jù)訪問,對于第時間延遲的數(shù)據(jù)訪問并不適合在HDFS上運行,所以需要實時性的隨機訪問超大規(guī)模的數(shù)據(jù)集,使用Hbase則是更好的選擇;

作用:Hbase作為典型的非關(guān)系型數(shù)據(jù)庫,Nosql數(shù)據(jù)庫主要分為以下幾類:

?基于鍵值對存儲的類型;

?基于文檔存儲的類型;

?基于列存儲的類型;

?基于圖形數(shù)據(jù)存儲的類型;

在Nosql領(lǐng)域中,Hbase本身不是最優(yōu)秀的,但得益于與hadoop的整合,為其帶來了強大的擴展空間。Hbase本質(zhì)只有插入操作,更新刪除等操作都是通過插入操作來完成,這是由于底層HDFS流式訪問(一次寫入,多次讀取)決定的,每次插入數(shù)據(jù)時,數(shù)據(jù)會帶有“時間戳”的標記,形成多個版本,Hbase對于一個數(shù)據(jù)會保留其固定的版本數(shù)量,如果在查詢時,也是顯示出距離當前時間最近的一個新版本;

二、Hbase體系結(jié)構(gòu);

體系結(jié)構(gòu):

架構(gòu)分析:Hbase體系結(jié)構(gòu)由單個HMaster服務(wù)器和多個HRegion Server服務(wù)器組成,而所有這些服務(wù)器是通過ZooKeeper來進行協(xié)調(diào)并處理各個服務(wù)器運行期間可能遇見的問題;

組件分析:

?HStore:多個HStore組成一個HRegion,本身由兩部分組成:Memstore和Storefile。首先用戶寫入的數(shù)據(jù)存放到Memstore中,當Memstore滿了后刷入Storefile;

?HRegion:由多個HStore組成,Hbase使用表存儲數(shù)據(jù)集,表由行和列組成,但與傳統(tǒng)關(guān)系型數(shù)據(jù)庫不同的是,當表的大小超過設(shè)定的值時,Hbase會自動將表劃分為不同的區(qū)域HRegion(此操作也稱之為HRegion分裂),它是Hbase集群上分布式存儲和負載均衡的最小單位,這一點和HDFS中文件與文件塊存儲的概念類似;

?Hlog:存儲數(shù)據(jù)日志,到達HRegion上的寫操作首先被追加到日志中,然后才被加載到Memstore,主要功能為故障修復(fù),當某臺HRegionServer發(fā)生故障,新的HRegionServer在加載HRegion的時候可以通過Hlog對數(shù)據(jù)進行恢復(fù);

?HRegionServer:由多個HRegion組成,在整個集群中可能存在多個節(jié)點,每個節(jié)點只能運行一個HRegionServer,負責對HDFS中讀寫數(shù)據(jù)和管理HRegion和Hlog;

?HMaster:每臺HRegionServer都會與HMaster進行通信,HMaster的主要任務(wù)就是告訴HRegionServer它需要維護哪些HRegion,具體功能如下:

       1.管理用戶對表的增刪改查操作;

       2.管理HRegionServer的負載均衡,動態(tài)調(diào)整HRegion分布;

       3.在HRegion分裂后,負責新的HRegion的分配;

       4.在HRegionServer停機后,負責失效HRegionServer上的HRegion的遷移;

?ZooKeeper:存儲的是Hbase中的ROOT表(根數(shù)據(jù)表)和META表(元數(shù)據(jù)表),元數(shù)據(jù)表保存普通用戶表的HRegion標識符信息, 標識符格式為:表名+開始主鍵+唯一ID。隨著HRegion的分裂,標識符信息也會發(fā)生變化,分成多個HRegion后,需要由一個根數(shù)據(jù)表來貫穿多個元數(shù)據(jù)表;

此外,ZooKeeper還負責HRegionServer故障時,通知HMaster進行HRegion遷移;若HMaster出現(xiàn)故障,ZooKeeper負責恢復(fù)HMaster,并且保證有且只有一個HMaster正在運行;

?Client:客戶端訪問Hbase的單位,訪問時,首先訪問Zookeeper--ROOT--META--table;

三、Hbase數(shù)據(jù)庫模型;

1.數(shù)據(jù)模型:

表(table):不存儲值為null的數(shù)據(jù),索引是行關(guān)鍵字、列關(guān)鍵字、時間戳;

行關(guān)鍵字(row key):行的主鍵,唯一標識一行數(shù)據(jù);

列族(Colume Family):行中的列被分為“列族”,同一個列族的所有成員具有相同的列族前綴,一個表的列族必須在創(chuàng)建表時預(yù)先定義,格式(列名:修飾符);

列關(guān)鍵字(Colume key):列鍵,格式為::,family是列族名;qualifer是列族修飾符,表示列族中的一個成員;

存儲單元格(Cell):在Hbase中,值作為一個單元保存在單元格中,要定位一個單元,需要滿足“行鍵+列鍵+時間戳”三個要素;

時間戳(Timestamp):插入單元格時的時間戳,默認作為單元格的版本號;

2.存儲方式:

關(guān)系型數(shù)據(jù)庫:

主鍵設(shè)置為name列,查找時根據(jù)學生名字可以很容易的實現(xiàn)查找,那么請思考以下問題;

?如果現(xiàn)在新增加一門課程,如何在不改變表結(jié)構(gòu)的情況下進行保存新課程的成績呢?

?如果tom同學數(shù)學成績參加了補考,如何記錄其同學的兩次數(shù)學成績?

?如若tom同學數(shù)學沒有成績,那么表中值為null,即使為空,也會占用存儲空間;

HBase數(shù)據(jù)庫:

在不同時間插入不同數(shù)據(jù)時,會生成時間戳,并且在列族內(nèi)生成數(shù)據(jù)記錄;

在HBase數(shù)據(jù)庫實際存儲時,其表內(nèi)空值不計入存儲空間內(nèi);

四、總結(jié)Hbase整體特點:

HBase就是這樣一個基于列模式的映射數(shù)據(jù)庫,它只能表示簡單的鍵值的映射關(guān)系。與關(guān)系型數(shù)據(jù)庫相比,它有如下特點:

?數(shù)據(jù)類型:HBase只有簡單的字符串類型,它只保存字符串。而關(guān)系型數(shù)據(jù)庫有豐富的類型選擇和存儲方式;

?數(shù)據(jù)操作:HBase 只有簡單的插入、查詢、刪除、清空等操作,表和表之間是分離的,沒有復(fù)雜的表和表之間的關(guān)系,所以不能、也沒有必要實現(xiàn)表和表之間的關(guān)聯(lián)操作。而關(guān)系型數(shù)據(jù)庫有多種連接操作;

?存儲模式:HBase 是基于列存儲的,每個列族都由幾個文件保存,不同列族的文件是分離的。關(guān)系型數(shù)據(jù)庫是基于表格結(jié)構(gòu)和行模式存儲的;

?數(shù)據(jù)維護:HBase 的更新操作實際上是插入了新的數(shù)據(jù),它的舊版本依然會保留,而不是關(guān)系型數(shù)據(jù)庫的替換修改;

?可伸縮性:HBase 這類分布式數(shù)據(jù)庫就是為了這個目的而開發(fā)出來的,所以它能夠輕松地增加或減少硬件數(shù)量,并且對錯誤的兼容性比較高。而關(guān)系型數(shù)據(jù)庫通常需要增加中間層才能實現(xiàn)類似的功能;

五、案例:搭建Hbase完全分布式數(shù)據(jù)庫系統(tǒng);

案例環(huán)境:

系統(tǒng)類型

IP地址

主機名、角色

所需軟件

Centos 7.4 1708 64bit

192.168.100.101

master

hadoop:namenode

hbase:HMaster

hadoop-2.7.6.tar.gz 

jdk-8u171-linux-x64.tar.gz

hbase-2.0.1-bin.tar.gz

Centos 7.4 1708 64bit

192.168.100.102

slave1

hadoop:datanode

hbase:HRegionServer

hadoop-2.7.6.tar.gz 

jdk-8u171-linux-x64.tar.gz

hbase-2.0.1-bin.tar.gz

Centos 7.4 1708 64bit

192.168.100.103

slave2

hadoop:datanode

hbase:HRegionServer

hadoop-2.7.6.tar.gz 

jdk-8u171-linux-x64.tar.gz

hbase-2.0.1-bin.tar.gz

版本對應(yīng):

下載位置:http://www./index.html#projects-list

Hbase部署環(huán)境:

單機模式:在單臺主機運行Hbase;

偽分布式模式:HBase只在hadoop的namenode節(jié)點運行,與單機模式類似,只是其數(shù)據(jù)文件可以存儲在datanode節(jié)點上;

完全分布式模式:HBase運行在hadoop集群的多個節(jié)點上,通常將HMaster運行在namenode節(jié)點上,將HRegionServer運行在datanode節(jié)點上;

案例步驟(保證多個節(jié)點之間時間的統(tǒng)一):

?搭建Hadoop分布式存儲集群(namenode和datanode);

?在master節(jié)點安裝部署Hbase程序;

?在master節(jié)點配置HBase程序;

?將master節(jié)點的habse程序復(fù)制到slave節(jié)點;

?在master節(jié)點上開啟HBase進程并查看進程;

?驗證slave節(jié)點上的進程狀態(tài);

?訪問網(wǎng)頁,查看HBase運行狀態(tài);

?在master節(jié)點登錄HBase數(shù)據(jù)庫,查看數(shù)據(jù)庫狀態(tài);

?HBase數(shù)據(jù)庫中基本管理操作;

?MapReduce結(jié)合HBase查詢表中行數(shù);

?搭建Hadoop分布式存儲集群(namenode和datanode);

?在master節(jié)點安裝部署Hbase程序;

[root@master ~]# ls hbase-2.0.1-bin.tar.gz

hbase-2.0.1-bin.tar.gz

[root@master ~]# tar zxvf hbase-2.0.1-bin.tar.gz

[root@master ~]# mv hbase-2.0.1 /usr/local/hbase

[root@master ~]# ls /usr/local/hbase

bin         conf  hbase-webapps  lib          NOTICE.txt  RELEASENOTES.md

CHANGES.md  docs  LEGAL          LICENSE.txt  README.txt

[root@master ~]# chown hadoop:hadoop /usr/local/hbase/ -R

?在master節(jié)點配置HBase程序;

[root@master ~]# su - hadoop

[hadoop@master ~]$ vi /usr/local/hbase/conf/hbase-site.xml                     ##HBase站點相關(guān)配置文件

  hbase.rootdir

  hdfs://master:9000/hbase

  配置HRegionServer的數(shù)據(jù)庫文件存放目錄

  hbase.cluster.distributed

  true

  配置HBase為完全分布式方式

  hbase.master

  master:60000

  配置HMaster的地址和端口

  hbase.zookeeper.quorum

  master,slave1,slave2

  配置zookeeper集群服務(wù)器的位置

[hadoop@master ~]$ vi /usr/local/hbase/conf/hbase-env.sh                            ##HBase變量配置文件

export JAVA_HOME=/usr/local/java

export HADOOP_HOME=/usr/local/hadoop

export HBASE_HOME=/usr/local/hbase

export HBASE_MANAGES_ZK=true

注解:export HBASE_MANAGES_ZK=true此配置項意為開啟habse內(nèi)置的zookeeper進程,使其隨HBase進程一同啟動;

[hadoop@master ~]$ vi /usr/local/hbase/conf/regionservers                            ##HBase的節(jié)點

slave1

slave2

?將master節(jié)點的habse程序復(fù)制到slave節(jié)點;

[root@slave1 ~]# mkdir /usr/local/hbase

[root@slave1 ~]# chown hadoop:hadoop /usr/local/hbase/

[root@slave2 ~]# mkdir /usr/local/hbase

[root@slave2 ~]# chown hadoop:hadoop /usr/local/hbase/

[hadoop@master ~]$ scp -r /usr/local/hbase/* hadoop@slave1:/usr/local/hbase

[hadoop@master ~]$ scp -r /usr/local/hbase/* hadoop@slave2:/usr/local/hbase

?在master節(jié)點上開啟HBase進程并查看進程;

注解:如若啟動hbase時,出現(xiàn):錯誤:找不到或無法加載主類;

由于habse版本與hadoop版本導致,或者環(huán)境變量導致;

?驗證slave節(jié)點上的進程狀態(tài);

?訪問網(wǎng)頁,查看HBase運行狀態(tài);

http://192.168.100.101:16010

?在master節(jié)點登錄HBase數(shù)據(jù)庫,查看數(shù)據(jù)庫狀態(tài);

?在master節(jié)點訪問hadoop存儲中數(shù)據(jù),驗證數(shù)據(jù)文件狀態(tài);

?HBase數(shù)據(jù)庫中基本管理操作;

[hadoop@master ~]# /usr/local/hbase/bin/hbase shell

hbase(main):001:0> status                                                 ##查看狀態(tài)

1 active master, 0 backup masters, 2 servers, 0 dead, 1.0000 average load

Took 0.8818 seconds

hbase(main):002:0> create 'class','age','chengji'                     ##創(chuàng)建表,語法:create 表名 列族 列鍵

Created table class

Took 1.5186 seconds                                                                         

=> Hbase::Table - class

hbase(main):003:0> list                                                        ##查看所有表

TABLE                                                                                       

class                                                                                       

1 row(s)

Took 0.0940 seconds                                                                         

=> ["class"]

hbase(main):004:0> describe 'class'                                   ##查看表的詳細信息

Table class is ENABLED                                                                      

class                                                                                       

COLUMN FAMILIES DESCRIPTION                                                                 

{NAME => 'age', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'f

alse', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING =>

'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW'

, CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PR

EFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '

65536'}                                                                                     

{NAME => 'chengji', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR =

> 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING

 => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => '

ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false'

, PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE

=> '65536'}                                                                                 

2 row(s)

Took 0.1701 seconds

hbase(main):012:0> put 'class','tom','age','18'                                   ##添加數(shù)據(jù),語法:put 表名 行鍵 列鍵 值

Took 0.1784 seconds                                                                         

hbase(main):013:0> put 'class','marry','age','20'

Took 0.0262 seconds                                                                         

hbase(main):014:0> scan 'class'                                                        ##掃描class表中數(shù)據(jù)

ROW                      COLUMN+CELL                                                        

 marry                   column=age:, timestamp=1535528846020, value=20                     

 tom                     column=age:, timestamp=1535528825217, value=18                     

2 row(s)

Took 0.0628 seconds

hbase(main):017:0> put 'class','tom','chengji:math','95'                     ##插入數(shù)據(jù)

Took 0.0217 seconds                                                                         

hbase(main):018:0> put 'class','tom','chengji:english','90'

Took 0.0100 seconds                                                                         

hbase(main):019:0> put 'class','marry','chengji:math','85'

Took 0.0130 seconds                                                                         

hbase(main):020:0> put 'class','marry','chengji:english','90'

Took 0.0085 seconds

hbase(main):021:0> scan 'class'

ROW                      COLUMN+CELL                                                        

 marry                   column=age:, timestamp=1535528846020, value=20                     

 marry                   column=chengji:english, timestamp=1535529132585, value=90          

 marry                   column=chengji:math, timestamp=1535529119078, value=85             

 tom                     column=age:, timestamp=1535528825217, value=18                     

 tom                     column=chengji:english, timestamp=1535529101465, value=90          

 tom                     column=chengji:math, timestamp=1535529089638, value=95             

2 row(s)

Took 0.0120 seconds

hbase(main):033:0> scan 'class',{COLUMN=>'chengji:math',LIMIT=>1}              ##根據(jù)條件查找,顯示一行

ROW                      COLUMN+CELL                                                        

 marry                   column=age:, timestamp=1535528846020, value=20                     

 marry                   column=chengji:english, timestamp=1535529132585, value=90          

 marry                   column=chengji:math, timestamp=1535529119078, value=85             

1 row(s)

Took 0.0456 seconds

hbase(main):038:0> get 'class','tom'                                                 ##獲取表中數(shù)據(jù),語法:get 表名 行鍵

COLUMN                   CELL                                                               

 age:                    timestamp=1535528825217, value=18                                  

 chengji:english         timestamp=1535529101465, value=90                                  

 chengji:math            timestamp=1535529089638, value=95                                  

1 row(s)

Took 0.0125 seconds

hbase(main):042:0> get 'class','tom',{COLUMN=>'age:'}                     ##根據(jù)條件獲取表中數(shù)據(jù),語法:get 表名 行鍵 {COLUMN=>列族}

COLUMN                   CELL                                                               

 age:                    timestamp=1535528825217, value=18                                  

1 row(s)

Took 0.0188 seconds

hbase(main):043:0> get 'class','tom','age:'                                          ##根據(jù)條件獲取表中數(shù)據(jù),同上

COLUMN                   CELL                                                               

 age:                    timestamp=1535528825217, value=18                                  

1 row(s)

Took 0.0171 seconds

hbase(main):044:0> get 'class','tom','chengji:english'

COLUMN                   CELL                                                               

 chengji:english         timestamp=1535529101465, value=90                                  

1 row(s)

Took 0.0162 seconds

hbase(main):045:0> delete 'class','tom','chengji:english'                     ##刪除表中數(shù)據(jù)記錄,語法:delete 表名 行鍵 列鍵

Took 0.0367 seconds                                                                         

hbase(main):046:0> get 'class','tom','chengji:english'                            ##獲取表中數(shù)據(jù)記錄,無法獲取

COLUMN                   CELL                                                               

0 row(s)

Took 0.0226 seconds                                                                         

hbase(main):047:0> get 'class','tom'                                                 ##獲取表中tom此行鍵的所有內(nèi)容

COLUMN                   CELL                                                               

 age:                    timestamp=1535528825217, value=18                                  

 chengji:math            timestamp=1535529089638, value=95                                  

1 row(s)

Took 0.0106 seconds

hbase(main):048:0> disable 'class'                                                        ##刪除表之前,需要先將表關(guān)閉disable

Took 0.8495 seconds  

hbase(main):049:0> drop 'class'                                                        ##刪除表

Took 0.4907 seconds                                                                         

hbase(main):050:0> list                                                                      ##查看所有表

TABLE                                                                                       

0 row(s)

Took 0.0086 seconds                                                                         

=> []

hbase(main):051:0> exit

?MapReduce結(jié)合HBase查詢表中行數(shù);

[hadoop@master ~]$ cp /usr/local/hbase/conf/hbase-site.xml /usr/local/hadoop/etc/hadoop/

[hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/hbase/lib/*

[hadoop@master ~]$ scp -r /usr/local/hadoop/etc/hadoop/hadoop-env.sh hadoop@slave1:/usr/local/hadoop/etc/hadoop/

[hadoop@master ~]$ scp -r /usr/local/hbase/conf/hbase-site.xml hadoop@slave1:/usr/local/hbase/conf/

[hadoop@master ~]$ scp -r /usr/local/hadoop/etc/hadoop/hadoop-env.sh hadoop@slave2:/usr/local/hadoop/etc/hadoop/

[hadoop@master ~]$ scp -r /usr/local/hbase/conf/hbase-site.xml hadoop@slave2:/usr/local/hbase/conf/

[hadoop@master ~]$ hadoop jar /usr/local/hbase/lib/hbase-server-2.0.1.jar

RunJar jarFile [mainClass] args...

[hadoop@master ~]$ /usr/local/hbase/bin/hbase shell

[hadoop@master ~]$ /usr/local/hbase/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'haha1'

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲av成人一区二区三区在线| 一区二区在线激情视频| 国产欧美日韩视频91| 国产精品午夜福利免费在线| 国产伦精品一区二区三区精品视频| 蜜臀人妻一区二区三区| 欧美大胆美女a级视频| 免费黄片视频美女一区| 国内外免费在线激情视频| 欧美欧美日韩综合一区| 中文字幕乱子论一区二区三区 | 国产精品亚洲欧美一区麻豆 | 高清不卡一卡二卡区在线| 国产欧美一区二区色综合| 国产日本欧美韩国在线| 亚洲国产天堂av成人在线播放| 人妻少妇av中文字幕乱码高清| 日韩一区二区免费在线观看| 亚洲精品一区三区三区| 日韩精品一区二区三区四区| 日本加勒比在线观看不卡| 日韩av亚洲一区二区三区| 中国美女偷拍福利视频| 亚洲中文字幕有码在线观看| 日韩人妻少妇一区二区| 国产精品久久精品国产| 91福利视频日本免费看看| 少妇激情在线免费观看| 91蜜臀精品一区二区三区| 欧美日韩在线观看自拍| 国产麻豆一线二线三线| 欧美人妻一区二区三区| 好吊妞视频这里有精品| 91老熟妇嗷嗷叫太91| 麻豆国产精品一区二区三区| 一区二区三区日本高清| 国产精品一区二区丝袜| 欧美日韩国产精品自在自线| 国内真实露脸偷拍视频| 熟女少妇久久一区二区三区| 亚洲国产另类久久精品|