一、HBase简介
先看一张图
Hadoop的生态圈有猪(Pig)、蜂窝(Hive)、动物园管理者(Zookeeper)……
先来说说HBase和Hive的区别
- HBase与Hive都是架构在Hadoop之上的。都是用Hadoop作为底层存储的。
- Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作
的缺陷的项目 。- 想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop 。
- Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。
- Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。
- Hive借用Hadoop的MapReduce来完成一些Hive中的命令的执行
- HBase是物理表,不是逻辑表,提供一个超大的内存Hash表,搜索引擎通过它来存储索引,方便查询操作。
- HBase是列存储。
- HDFS作为底层存储,HDFS是存放文件的系统,而HBase负责组织文件。
- Hive需要用到HDFS存储文件,需要用到MapReduce计算框架。
好吧,不扯那么多,本篇的主角是HBase
HBase: 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase能做什么?
准实时查询、海量数据的储存(上百亿行,上百万列)HBase应用场景:
交通、金融、电商、移动通信HBase的特点:
容量大、面向列、多版本、稀疏性(空列不占空间)、扩展性(依赖HDFS,通过增加Hadoop节点来增加容量)、高可靠性、高性能、不支持条件查询。
先来了解一下HBase架构体系:
HBase 中首先会有列簇(Column Family)的概念,列簇一般用于将相关的列(Column)组合起来。在物理上 HBase 其实是按列簇存储的,只是按照 Row-key 将相关列簇中的列关联起来。物理上的数据排布大致可以如下图所示:
二、HBase安装
需要分别在master、slave1、slave2上安装Zookeeper和HBase
Zookeeper安装
从HBase架构体系图中可以看出HBase依赖于外部服务Zookeeper,所以要先安装Zookeeper,下载地址,本文使用的是3.4.5的版本。
1.把tar包解压到/usr/下(解压到那个目录下看个人喜好)
2.把环境变量添加至/etc/profile
export ZK_HOME=/usr/zookeeper
export PATH=$PATH:$ZK_HOME/bin
3.把$ZK_HOME/conf/下的zoo_sample.cfg改名为zoo.cfg并修改
#需要创建该目录
dataDir=/usr/zookeeper/tmp
#添加以下内容,master、slave1、slave2是安装Hadoop的主机名,也可以是具体IP
server.0=master:2888:3888
server.1=slave1:2888:3888
server.2=slave2:2888:3888
4.在/usr/zookeeper/tmp/下创建myid文件,并添加内容0
按照zoo.cfg配置
master上的/usr/zookeeper/tmp/myid内容为0
slave1上的/usr/zookeeper/tmp/myid内容为1
slave2上的/usr/zookeeper/tmp/myid内容为2
5.启动与停止
启动命令zkServer.sh start
,可以用jps命令看到QuorumPeerMain
停止命令zkServer.sh stop
HBase安装
下载地址
1.把tar包解压到/usr/下(解压到那个目录下看个人喜好)
2.把环境变量添加至/etc/profile
export HBASE_HOME=/usr/hbase
export PATH=$PATH:$HBASE_HOME/bin
修改$HBASE_HOME/conf/下的配置文件:
3.修改hbase-env.sh
export JAVA_HOME=/usr/java/jdk/
#不使用HBase自带的zookeeper
export HBASE_MANAGES_ZK=false
4.修改hbase-site.xml(具体参数看情况修改)
<property>
<name>hbase.tmp.dir</name>
<value>/usr/hbase/tmp</value>
</property>
<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,slave2</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
5.修改regionservers,添加以下内容(也可以只加slave1、slave2,大家随意)
master
slave1
slave2
6.启动与停止
先启动Hadoop、Zookeeper再启动HBase
start-all.sh
zkServer.sh start
start-hbase.sh
可以使用命令hbase shell
进入shell终端
要停止HBase使用命令stop-hbase.sh
三、HBase Shell操作
1.创建表(表名为test,列簇为info)
create 'test','info'
2.添加内容
put 'test','001','info:name','Tom'
put 'test','001','info:age','20'
put 'test','002','info:name','King'
put 'test','002','info:age','22'
put 'test','003','info:name','Rose'
put 'test','003','info:age','18'
001表示行号(row),info:name表示info列簇中的name列,值为Tom
……
3.显示存在的表
list
4.查看表内容
scan 'test'
5.显示表结构信息
describe 'test'
6.统计行数
count 'test'
7.获取数据
get 'test','001'
get 'test','001','info'
get 'test','001','info:name'
分别是获取:
行号为“001”的数据
行号为“001”的中列簇“info”的数据
行号为“001”的中列簇“info”中列“name”的数据
8.清空表
truncate 'test'
9.删除表
disable 'test'
drop 'test'
disable能禁用‘test’表,只有处于disable状态的表才能删除表
可以通过is_disable命令查看表是否处于disable状态
enable 'test'
能启用表
更多更详细的操作请看大佬的博客http://blog.csdn.net/scutshuxue/article/details/6988348
END
参考:
Hbase总结(三)-Hbase与Hive的区别与联系http://blog.csdn.net/lifuxiangcaohui/article/details/39889653