文章目录(Table of Contents)
HBase简介
Apache HBase 是一个基于 Hadoop 的、适用于大数据存储的、具有高可扩展性的分布式数据库。
HBase 适用于随机的、实时的大数据的 I/O 访问,它的设计目标是在商品硬件的集群上托管非常大的表(数十亿行乘以百万列)。同时,HBase 作为一款非关系型数据库,起源于谷歌的 Bigtable 。
我们知道,HDFS 是一个分布式文件系统,非常适合存储大型文件。但是它并不是一个通用的文件系统,可能是因为它不能够查找文件中的单个记录。而 HBase 是构建在 HDFS 之上的,它能够为大型表提供快速的记录查找和更新。HBase 在内部将数据放入带索引的“存储文件”中以便于快速查找,而这些文件存放在 HDFS 上。
Windows下HBase安装部署
HBase的伪分布模式是依赖于HDFS的,因此在安装HBase之前需要安装匹配版本的Hadoop。
在我这里,我的Hadoop版本为hadoop-2.8.4,下载的HBase版本为HBase-2.0.2,下载地址如下:
文件下载及解压
首先我们现在官网上下载对应版本的HBase,并进行解压,我这里是解压在了D盘,解压后如下;
修改配置文件
接着我们修改配置文件,./hbase/conf/hbase-site.xml:
打开之后,可以看到<configuration>标签是空的,我们增加下面的内容:
- <configuration>
- <property>
- <name>hbase.rootdir</name>
- <value>hdfs://localhost:9000/hbase</value>
- </property>
- <property>
- <name>hbase.zookeeper.property.dataDir</name>
- <value>/home/hadoop/zookeeper</value>
- </property>
- <property>
- <name>hbase.cluster.distributed</name>
- <value>false</value>
- </property>
- </configuration>
这里的 hbase.cluster.distribute是指HBase以分布式模式进行,这个功能在win下不支持,写成false,否则无法启动(见可能出现的问题第一条)
接着我们修改hbase-env.sh文件,指定JAVA_HOME,这里改成自己的路径,我是之前在环境变量里设置过
所以这里就直接写成了下面的样子;
- export JAVA_HOME=${JAVA_HOME}
环境变量的设置
接下来进行环境变量的设置,环境变量的设置都大同小异,我就直接进行截图的说明;
首先是环境变量新建,里面添加 HBASE_HOME:
接着在Path中添加:
启动HBase服务
在启动HBase之前,我们需要先启动Hadoop;
接着在命令行里输出 start-hbase.cmd即可启动(如果没有添加Path,需要进行hbase/bin/中进行启动);
可以通过jps进行查看:
同时我们可以通过 hadoop fs -ls /hbase进行查看,检查一下HDFS上是否有HBase产生的文件:
HBase数据库模型操作示例
下面使用HBase Shell做一下演示:
在终端输入hbase shell进行HBase Shell(感觉说得好绕啊,其实就是这么回事)
表的一些操作
创建表
这里的 test_1是表名,cf是列族;
列出与描述表
我们使用list进行列出表:
我们使用describe查看表的一些详细信息:
禁用与启用表
在删除表和修改表的配置之前,我们需要先禁用表:
删除表
删除表使用drop命令,如删除上面的表:drop 'test_1'
我就不演示了。
行的一些操作
HBase的行有一个行键和一个或多个列组成,这些列的值与行键相互关联,存储时按照行键的字母顺序进行排列;
插入数据
插入数据使用put命令,我在这里插入多条数据,方便后面的演示:
查看数据
我们可以通过scan获取一张表里的全部数据(这里没有限制)
也可以通过get获取某一行的数据
列与列族的一些操作
HBase 中的一个列(Column)由一个列族和一个列限定符组成,它由一个 : (冒号)字符分隔。
我们可以看上面插入数据的操作,插入时候会有 'cf:a',这里cf就是列族,a就是列限定符;
列族的含义
列族出于性能的原因,在物理上连续地排列一组列及它的值。每个列族都有一组存储属性,比如是否应该将其值缓存在内存中、如何压缩数据或对其行键进行编码等等。表中的每一行都有相同的列族,尽管给定的行可能不会在给定的列族中存储任何数据。
列限定符的含义
列族中的列限定符用于提供指定数据块的索引。举个例子,如果指定一个列族,则其列限定符可能是 content:age,另一个可能是 content:address。虽然在表创建时就已经固定了列族,但列限定符是可变的,并且在不同的行之间可能有很大的差异。
退出HBase
使用 quit 命令进行退出;
关闭HBase服务
我们在终端输入 stop-hbase.cmd 进行关闭HBase的服务;
可能出现的问题
This is not implemented yet. Stay tuned.
这是由于在windows环境启动时,不允许使用分布式的zk,需要把上面配置文件./hbase/conf/hbase-site.xml中的hbase.cluster.distribute改成false即可;
参考资料
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论