溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

HBase的環(huán)境配置及應(yīng)用方法

發(fā)布時(shí)間:2021-08-12 10:03:37 來源:億速云 閱讀:106 作者:chen 欄目:云計(jì)算

本篇內(nèi)容介紹了“ HBase的環(huán)境配置及應(yīng)用方法 ”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、HBase簡介

1.1簡介

hbase是bigtable的開源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存儲(chǔ)、可伸縮、實(shí)時(shí)讀寫的數(shù)據(jù)庫系統(tǒng)。
它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數(shù)據(jù),僅支持單行事務(wù)(可通過hive支持來實(shí)現(xiàn)多表join等復(fù)雜操作)。主要用來存儲(chǔ)非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。與hadoop一樣,Hbase目標(biāo)主要依靠橫向擴(kuò)展,通過不斷增加廉價(jià)的商用服務(wù)器,來增加計(jì)算和存儲(chǔ)能力。

HBase以表的形式存儲(chǔ)數(shù)據(jù)。表有行和列組成。列劃分為若干個(gè)列族(row family)。

1.2 Hbase與傳統(tǒng)數(shù)據(jù)庫的對(duì)比

我們可以先來看一下傳統(tǒng)的關(guān)系型數(shù)據(jù)庫中的表:

HBase的環(huán)境配置及應(yīng)用方法

然后與HBase的表進(jìn)行對(duì)比,hbase的表結(jié)構(gòu),與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫有較大的差別

HBase的環(huán)境配置及應(yīng)用方法

1、一個(gè)表會(huì)按照行劃分為若干個(gè)region,每一個(gè)region分配給一臺(tái)特定的regionserver管理
2、每一個(gè)region內(nèi)部還要一句列族劃分為若干個(gè)HStore
3、每個(gè)HStore中的數(shù)據(jù)會(huì)落地到若干個(gè)HFILE文件中
4、region體積會(huì)隨著數(shù)據(jù)插入而不斷增長,到一定閾值后悔分裂
5、隨著region的分裂,一臺(tái)regionserver上管理的region會(huì)越來越多
6、HMASTER會(huì)根據(jù)regionserver上管理的region數(shù)做負(fù)載均衡
7、region中的數(shù)據(jù)擁有一個(gè)內(nèi)存緩存:memstore,數(shù)據(jù)的訪問優(yōu)先在memstore中進(jìn)行
8、memstore中的數(shù)據(jù)因?yàn)榭臻g有限,所以需要定期flush到文件storefile中,每次flush都是生成新的storefile
9、storefile的數(shù)量隨著時(shí)間也會(huì)不斷增加,regionserver會(huì)定期將大量storefile進(jìn)行合并(merge)


行鍵的設(shè)計(jì)對(duì)數(shù)據(jù)查詢效率的影響非常大。

HBase具有很好的可伸縮性:如果存儲(chǔ)容量不夠的時(shí)候,直接加datanode或者regionservers
hbase可以作為一個(gè)線上系統(tǒng)的底層系統(tǒng)的功能。

Hmaster可以做負(fù)載均衡,監(jiān)控到各個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)存儲(chǔ)情況。
每一個(gè)store(列族)會(huì)有一個(gè)內(nèi)存緩存,存放的是一些最熱的數(shù)據(jù)(最近訪問的),這樣的話讀取數(shù)據(jù)的速度會(huì)快很多。

文件都是有索引的,所以查起來會(huì)比較快的。


region會(huì)在storefile定期進(jìn)行合并操作。

三、HBase環(huán)境搭建

1、首先要去下載一個(gè)HBase的安裝文件: http://hbase.apache.org/,然后解壓到你需要安裝的目錄,如果你已經(jīng)學(xué)到hbase了,我相信這些基本的安裝肯定全部都會(huì)了的。

2、在habse目錄下的conf目錄下找到hbase-env.sh和hbase-site.xml,以及regionservers,然后分別按照下面的進(jìn)行配置,整個(gè)配置過程非常簡單。

在hbase-env.sh中,主要是配置java的環(huán)境變量,還有就是要開啟zookeeper功能,這里要把默認(rèn)的true改成的false,意思就是啟用zookeeper,但是啟用的不是hbase自帶的zookeeper,而是使用我自己安裝的zookeeper。
 

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
 export HBASE_MANAGES_ZK=false

在hbase-site.xml中,主要就是配置hdfs的主機(jī)地址,還有下面的ubuntu1,2,3就是zookeeper的主機(jī)名個(gè)端口2181,不同的機(jī)器可以酌情配置。

configuration>
<property>
        <name>hbase.rootdir</name>
        <value>hdfs://ubuntu2:9000/hbase</value>
</property>
<property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
</property>
<property>
        <name>hbase.zookeeper.quorum</name>
        <value>ubuntu1:2181,ubuntu2:2181,ubuntu3:2181</value>
</property>

</configuration>


3、最后修改regionservers,將默認(rèn)的localhost修改為主機(jī)的地址,這個(gè)配置文件的意思就是設(shè)置從節(jié)點(diǎn),和我們之前配置的hadoop集群都是差不多的,就相當(dāng)于那個(gè)salver。

ubuntu1
ubuntu2
ubuntu3

4、最后將hadoop中的core-site.xml和hdfs-site.xml拷貝到hbase的conf目錄下。

5、然后通過scp將這個(gè)配置好的文件發(fā)往其他的兩個(gè)節(jié)點(diǎn)。

最后我只想說一句不要在這配置文件里面多打了字母,否則會(huì)報(bào)錯(cuò)的。

1、啟動(dòng)所有的hbase進(jìn)程
首先啟動(dòng)zk集群
./zkServer.sh start
啟動(dòng)hbase集群
start-dfs.sh
啟動(dòng)hbase,在主節(jié)點(diǎn)上運(yùn)行:
start-hbase.sh
2、 通過瀏覽器訪問hbase管理頁面
192.168.44.131:60010
3、 為保證集群的可靠性,要啟動(dòng)多個(gè)HMaster
hbase-daemon.sh start master

jps在主節(jié)點(diǎn)上面的效果是:會(huì)啟動(dòng)HRegionServer和HMaster

HBase的環(huán)境配置及應(yīng)用方法

我們可以通過web頁面查看啟動(dòng)的情況:192.168.44.131:60010,也就是你的主節(jié)點(diǎn)的ip或主機(jī)名+端口號(hào)60010就可以了。

HBase的環(huán)境配置及應(yīng)用方法
 

4.2 建表

官方給的例子是:

Examples:

  hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']
  hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']
  hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'
  hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }
  hbase> # Optionally pre-split the table into NUMREGIONS, using
  hbase> # SPLITALGO ("HexStringSplit", "UniformSplit">


那么我們就以例子為準(zhǔn),來新建一個(gè)用戶信息表。表名為user-info,包含兩個(gè)列族(base_info和extra_info),保留3個(gè)版本。

create 'user-info',{NAME=>'base_info',VERSIONS=>3},{NAME=>'extra_info'}

4.3 插入

官方給的語句是:

hbase> put 'ns1:t1', 'r1', 'c1', 'value', ts1

那么我們就按照它的語法來寫:

put 'user-info','rk-100001','base_info:name','張s'
 put 'user-info','rk-100001','base_info:age','20'
put 'user-info','rk-100001','base_info:address','湖南長沙'


在hbase只能一條條的插入,就比如一次只能插入name,那么如果我們想插入age,address就需要一個(gè)個(gè)的put。

4.4 查詢

1、我們可以通過scan來查詢:

scan 'user-info'

HBase的環(huán)境配置及應(yīng)用方法

我們可以從圖中看到它是按key來排序的(字段的名稱會(huì)根據(jù)字典排序)k-value

如果我再插入一行,
put 'user-info','rk100003','base_info:name','angelabby'

一行中的所有字段名+字段值,在存儲(chǔ)的時(shí)候,hbase會(huì)排序,排序的依據(jù)是按照K的字典順序,所有的行也會(huì)有序存儲(chǔ),排序的依據(jù)是rowkey的字典順序。
這個(gè)特性會(huì)影響連續(xù)存放。

2、get取數(shù)據(jù),一次只能取一行數(shù)據(jù)

get 'user-info','rk100003'

4.5 修改

三個(gè)版本:

put 'user-info','rk100003','base_info:name',’yangying'
 put 'user-info','rk100003','base_info:name','baobao'

查看以前版本的值:

scan 'user-info',{VERSIONS=>10}


4.6 刪除

需要先禁用這個(gè)表,然后才可以drop掉。

需要先禁用這個(gè)表,然后才可以drop掉。
disable 'user-info'
drop 'user-info'

五、eclipse中使用HBase

打開eclipse,導(dǎo)入hbase/lib中的所有包。然后就可以愉快的開始寫了,這里以在eclipse中庸hbase建表和插入數(shù)據(jù)為例:

//建表,DDL操作
	public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
	//	Configuration conf=new Configuration();
		//會(huì)加載hbase-site.xml配置文件
		Configuration conf=HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum","ubuntu1:2181,ubuntu2:2181,ubuntu3:2181");
		
		HBaseAdmin  admin=new HBaseAdmin(conf);

		TableName name = TableName.valueOf("user-info");
		HTableDescriptor  tableDescriptor=new HTableDescriptor(name);
		
		//創(chuàng)建列名
		HColumnDescriptor base_info = new HColumnDescriptor("base_info");
		//給列族增加版本約束
		base_info.setMaxVersions(3);
		
		//將列族添加到表描述對(duì)象中
		tableDescriptor.addFamily(base_info);
		
		//用createTable方法創(chuàng)建一個(gè)tabelDescriptor所描述的對(duì)象
		admin.createTable(tableDescriptor);
		
		//關(guān)閉連接
		admin.close();
		
	}

最后我們可以在hbase的shell窗口來查看表是否已建好表。輸入list就可以查詢了
然后來插入數(shù)據(jù):

@Test
	//插入數(shù)據(jù),屬于DML操作
	public void Put() throws IOException{
		Configuration conf=HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum","ubuntu1:2181,ubuntu2:2181,ubuntu3:2181");
		
		HTable hTable = new HTable(conf,"user-info");
		
		Put put=new Put(Bytes.toBytes("rk-10001"));
		put.add("base_info".getBytes(),"name".getBytes(),"wangming".getBytes());
		put.add("base_info".getBytes(),"age".getBytes(),"20".getBytes());
		hTable.put(put);
		hTable.close();
	}


最后我們可以在hbase的shell窗口來查看表是否已插入好數(shù)據(jù)。

HBase的環(huán)境配置及應(yīng)用方法

“ HBase的環(huán)境配置及應(yīng)用方法 ”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI