Hbase的安装与实践(一)

一、Hbase介绍

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

HBase与传统关系数据库的对比分析

  1. 数据类型:关系数据库采用关系模型,具有丰富的数据类型和存储方式,HBase则采用了更加简单的数据模型,它把数据存储为未经解释的字符串;
  2. 数据操作:关系数据库中包含了丰富的操作,其中会涉及复杂的多表连接。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表和表之间的关系;
  3. 存储模式:关系数据库是基于行模式存储的。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的;
  4. 数据索引:关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引——行键,通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来;
  5. 数据维护:在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留;
  6. 可伸缩性:关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

组成架构

了解更多请参考博客:分布式数据库 HBase(详解) - 知乎 (zhihu.com)

二、全分布模式Hbase集群安装与配置

实验环境

centos系统

masters主机和slave1主机,并且确保两台主机都已经配置好hadoop和zookeeper

Hbase安装

注意:以下操作都在master主机进行

1、下载Hbase的二进制包,下载地址位于Apache HBase – Apache HBase Downloads,然后解压到目录/usr/local下。

sudo cp /home/qyf/Desktop/hbase-1.2.4-bin.tar /usr/local
sudo tar -xvf hbase-1.2.4-bin.tar

2、输入下面的代码修改环境变量

sudo vi /etc/profile

 添加如下内容:

export HBASE_HOME=/usr/local/hbase-1.2.4
export PATH=$PATH:$HBASE_HOME/bin:/$HBASE_HOME/sbin

使其生效:

source /etc/profile

3、修改刚刚解压的hbase文件夹权限

sudo chmod -R 777 /usr/local/hbase-1.2.4

Hbase配置

1、进入解压的文件夹hbase-1.2.4文件夹下conf文件夹,编辑里面的hbase-env.sh文件,输入以下内容打开该文件:

sudo vi hbase-env.sh

进入以后,逐行寻找"export JAVA_HOME="    "这一行,修改为export JAVA_HOME=/usr/java/jdk,并把前面的注释去掉

2、修改Hbase配置文件hbase-site.xml文件,修改内容如下:

<configuration>
        <property>
	      <name>hbase.rootdir</name>
	      <value>hdfs://master:9000/hbase</value>
	    </property>
	    <property>
	      <name>hbase.cluster.distributed</name>
	      <value>true</value>
	    </property>
	    <property>
	      <name>hbase.zookeeper.quorum</name>
	      <value>master,slave1</value>
	    </property>
	    <property>
	      <name>hbase.zookeeper.property.dataDir</name>
	      <value>/usr/local/hbase-1.2.4/zookeeper</value>
	    </property>
</configuration>

3、修改regionservers文件,删掉localhost,添加下面的内容

slave1

注意,这里面填的是运行HRegionServer的服务器,实际名字按个人配置的来,我这里是slave1

然后进入slave1主机,向/usr/local文件夹添加用户权限

sudo chmod -R 777 /usr/local

写好后,返回master主机,运行下面的代码

sudo scp -r /usr/local/hbase-1.2.4 qyf@slave1:/usr/local

注意:根据个人主机名字修改上面的内容

4、依次输入下面两行代码,依次启动Hadopp、Hbase服务

start-all.sh
start-hbase.sh

如果启动成功,则会显示下面的内容:

[qyf@master conf]$ start-hbase.sh
slave1: starting zookeeper, logging to /usr/local/hbase-1.2.4/bin/../logs/hbase-qyf-zookeeper-slave1.out
master: zookeeper running as process 8463. Stop it first.
starting master, logging to /usr/local/hbase-1.2.4/logs/hbase-qyf-master-master.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
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
slave1: starting regionserver, logging to /usr/local/hbase-1.2.4/bin/../logs/hbase-qyf-regionserver-slave1.out
slave1: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
slave1: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

三、使用Hbase Shell

               Hbase为用户提供了一个非常方便的工具Hbase Shell,它支持绝大部分Hbase命令,可以高效的创建、删除、修改表,以下是Hbase Shell常用的命令

输入下面的命令,启动Hbase Shell

hbase shell

下面使用一些常用的命令:

1、创建表

create 't1','f1'

上面的命令创建了表t1,列族f1

2、添加数据

put 't1','row1','f1:name','zhangsan'

上面的命令向表t1添加一条数据,其中RowKey的值为row1,name列的值为”zhangsan“

执行下面的命令,向表t1中添加一条数据,RowKey的值为row2,age列的值为”18“

put 't1','row2','f1:age','18'

3、扫描表

scan 't1'

执行该命令扫描表t1,并查看数据描述

hbase(main):004:0> scan 't1'
ROW                           COLUMN+CELL                                                                         
 row1                         column=f1:name, timestamp=1712654963152, value=zhangsan                             
 row2                         column=f1:age, timestamp=1712654997540, value=18                                    
2 row(s) in 0.0200 seconds

4、修改表

put 't1','row1','f1:name','lisi'

修改row1中的name列的值,将”zhangsan“改为”lisi“

再执行scan命令,发现row1中name列的值变为了“lisi”

hbase(main):006:0> scan 't1'
ROW                           COLUMN+CELL                                                                         
 row1                         column=f1:name, timestamp=1712655075552, value=lisi                                 
 row2                         column=f1:age, timestamp=1712654997540, value=18                                    
2 row(s) in 0.0100 seconds

5、删除特定单元格

delete 't1','row1','f1:name'

执行该命令可以删除表中RowKey为row1的行的单元格name,再执行scan命令,可以看到RowKey为row1的行不存在了,因为row1只有一个单元格name,既然后者已被删除,前者也不存在了

hbase(main):008:0> scan 't1'
ROW                           COLUMN+CELL                                                                         
 row2                         column=f1:age, timestamp=1712654997540, value=18                                    
1 row(s) in 0.0100 seconds

6、删除一整行数据

deleteall 't1','row2'

执行上面的命令,可以删除RowKey为row2的行中的所有单元格

hbase(main):010:0> scan 't1'
ROW                           COLUMN+CELL                                                                         
0 row(s) in 0.0070 seconds

再执行scan命令可以看到RowKey为row2的行已经不存在了

7、删除整张表

disable 't1'
drop 't1'

删除整张表,需要先禁用表,然后再删除表

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值