Hadoop生态(3)——HBase安装使用

今天是2019年农历的最后一天,来把年前学习大数据的最后一个部分总结一下——HBase。

HBase简介

HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。

  • HBase把数据存储为未经解释的字符串,用户可以把不同格式的结构化数据和非结构化数据都序列化成字符串保存到HBase中
  • 数据操作只有简单点的插入、查询、删除、清空等,通常只采用单表的主键查询,所以HBase无法实现像关系数据库中那样表与表之间的连接查询
  • HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的,可以降低IO开销,支持大量并发用户查询,同一个列族中的数据会被一起进行压缩
  • HBase只有一个索引:行键。可以使用MapReduce来快速高效地生成索引表
  • 在执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留
  • 实现了灵活的水平扩展

数据模型相关概念

HBase采用表来组织数据,表由行和列组成,列被划分为若干个列族。

表由若干行组成,每个行由行键来标识。存储时,数据一般按照行间的字典序排序存储。

列族

一个HBase表被分组成许多“列族”的集合,它是基本的访问控制单元。列族需要在表创建时就定义好。表中每个列都归属于某个列族,数据可以被存放到列族的某个列下面。

列限定符(列)

列族里的数据通过列来定位,列不用事先定义,也不需要在不同行之间保持一致。

单元格

通过行、列族、列可以确定一个“单元格”。单元格中存储的数据没有数据类型,总被视为字节数组byte[]。每个单元格可以保存一个数据的多个版本,不同版本对应一个不同的时间戳。

时间戳

每个单元格都保存者同一份数据的多个版本,这些版本采用时间戳进行索引,时间戳一般是64位整型。每次对一个单元格执行操作(新建、修改、删除)时,HBase都会隐式地自动生成并存储一个时间戳。
在这里插入图片描述

HBase伪分布式安装

本人这里选用的是HBase2.1.8,HBase依赖于Hadoop,两者之间的版本有一种对应关系,官网有给出对应关系Apache HBase,如果使用了不对应的版本可能会出现问题。

安装前提

  1. JAVA环境的安装
  2. Hadoop对应版本的安装,本人使用的是3.2.1
  3. Zookeeper安装,本人使用的是3.5.1。

HBase依赖于Zookeeper,所以其实它自带有一个内置的Zookeeper,但是使用内置的Zookeeper的话不好管理,出现问题也不知道是HBase本身还是自带的Zookeeper的锅,所以这里建议大家使用外置的Zookeeper,安装也非常方便,可以参考本人的上一篇博客。

安装包

去官网下载对应版本的压缩包,移动到虚拟机里去,解压后放到自己习惯的位置
从HBase2.0开始,带有-bin后缀的压缩包才是编译过可运行的文件

tar -zxvf hbase-2.1.8-bin.tar.gz
mv hbase-2.1.8-bin hbase
sudo mv hbase /usr/local

配置文件

HBase的所有配置文件都是在根目录的conf文件夹底下

hbase-env.sh

在这个文件里我们需要配置一些HBase运行需要的局部环境变量。
切换目录,打开文件后添加以下内容:

cd /user/local/hbase/conf
sudo gedit hbase-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/usr/local/hadoop/etc/hadoop
export HADOOP_HOME=/usr/local/hadoop
  • Hbase_MANAGES_ZK:选择是否使用自带的Zookeeper,我们当然设置为false
  • HBASE_CLASSPATH:类路径,我们指向Hadoop的配置文件目录,使用一些Hadoop的依赖

hbase-site.xml

hbase-stie.xml是主要的配置文件。

sudo gedit hbase-site.xml
<configuration>
	<property>
		<name>hbase.rootdir</name>
		<value>hdfs://localhost:9000/habase</value>
	</property>
	<property>
		<name>hbase.zookeeper.quorum</name>
		<value>localhost</value>
	</property>
	<property>
		<name>hbase.zookeeper.property.clientPort</name>
		<value>2181</value>
	</property>
	<property>
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>
	<property>
		<name>hbase.zookeeper.property.dataDir</name>
		<value>/usr/local/zookeeper/data/zoo</value>
	</property>
	<property> 
		<name>hbase.tmp.dir</name> 
		<value>/usr/local/hbase/tmp</value> 
	</property>
	<property>
        <name>hbase.wal.provider</name>
        <value>filesystem</value>
 	</property>
	<property>
		<name>hbase.unsafe.stream.capability.enforce</name>
		<value>false</value>
	</property>
</configuration>
  • hbase.rootdir:HBase的存储系统,可以选择使用HDFS,也可以使用本地文件系统,我们选择HDFS更好
  • hbase.zookeeper.quorum:Zookeeper的运行位置,也就是它运行所在主机的IP,就是本机
  • hbase.zookeeper.property.clientPort:Zookeeper的运行端口
  • hbase.cluster.distributed:是否选择分布式,选择是(虽然是伪分布式)。如果这里选择false,那么HBase依然会运行自带的Zookeeper
  • hbase.zookeeper.property.dataDir:Zookeeper的数据目录,要与Zookeeper配置的路径一致
  • hbase.tmp.dir:HBase的临时文件存储位置
  • hbase.wal.provider:这个是非必须的,可能会出现java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper,就加这句话
  • hbase.unsafe.stream.capability.enforce:这个也是非必须的,如果抛出如下异常,加上就行
java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.

如果你在hbase.zookeeper.quorum这里添加了多个Zookeeper节点,那么需要在regionservers下面添加这些节点,因为regionservers文件里默认只添加了localhost。
到这里为止就配置完成了,HBase的日志文件在根目录的logs文件夹下面,出现问题可以去里面翻日志。

HBase简单操作

启动

根据我们上面的配置方式,HBase的启动流程为:HDFS -> Zookeeper -> HBase。
根据每个人不同的配置,按照顺序启动这些服务,HBase的启动命令是

./start-hbase.sh
start-dfs.sh
cd /usr/local/zookeeper/bin
./zkServer.sh start
cd /usr/local/hbase/bin
./start-hbase.sh

耐心等待它们启动,稍等一段时间,用jps查看进程,如果是如图所示那样就说明启动成功。

jps

在这里插入图片描述

关闭

关闭的时候要按照启动的逆序关闭这些进程
在这里插入图片描述

基本操作

首先要进入HBase的操作脚本

hbase shell

list:查看所有表

list

在这里插入图片描述

create:创建表

create ‘表名’, ‘列族1’, ‘列族2’

create 'student', 'info', 'grade'

在这里插入图片描述

describe:查看表结构

describe 'student'

在这里插入图片描述

put:插入数据

put ‘表名’, ‘行键’, ‘列族:列’, ‘值’ …………

put 'student', 'hadoop', 'grade:math', '100'

在这里插入图片描述

get:查询数据

get ‘表名’, ‘行键’

get 'student', 'hadoop'

在这里插入图片描述

delete:删除数据

delete ‘表名’, ‘行键’, ‘列族:列’

delete 'student', 'hadoop', 'grade:math'

在这里插入图片描述

disable,drop:删除表

在删除表之前先要禁用表

disable 'student'
drop 'student'

在这里插入图片描述

Web查看

在虚拟机浏览器输入localhost:16010或者在主机输入 虚拟机IP:16010(桥接网卡模式)都可以打开网页查看HBase信息。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值