1、Hbase的认识
1.1.什么是hbase
HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。HBASE是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable利用GFS作为其文件存储系统,HBASE利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利用Chubby作为协同服务,HBASE利用Zookeeper作为对应。
1.2. 与传统数据库的对比
1、传统数据库遇到的问题:
1)数据量很大的时候无法存储
2)没有很好的备份机制
3)数据达到一定数量开始缓慢,很大的话基本无法支撑
2、HBASE优势:
1)线性扩展,随着数据量增多可以通过节点扩展进行支撑
2)数据存储在hdfs上,备份机制健全
3)通过zookeeper协调查找数据,访问速度块。
1.3. hbase集群中的角色
1、一个或者多个主节点,Hmaster
2、多个从节点,HregionServer
2、Hbase原理
2.1. 体系图
2.1.1. 写流程
- client向hregionserver发送写请求。
- hregionserver将数据写到hlog(write ahead log)。为了数据的持久化和恢复。
- hregionserver将数据写到内存(memstore)
- 反馈client写成功。
2.1.2. 数据flush过程
- 当memstore数据达到阈值(默认是64M),将数据刷到硬盘,将内存中的数据删除,同时删除Hlog中的历史数据。
- 并将数据存储到hdfs中。
- 在hlog中做标记点。
2.1.3. 数据合并过程
- 当数据块达到4块,hmaster将数据块加载到本地,进行合并
- 当合并的数据超过256M,进行拆分,将拆分后的region分配给不同的hregionserver管理
- 当hregionser宕机后,将hregionserver上的hlog拆分,然后分配给不同的hregionserver加载,修改.META.
- 注意:hlog会同步到hdfs
2.1.4. hbase的读流程
- 通过zookeeper和-ROOT- .META.表定位hregionserver。
- 数据从内存和硬盘合并后返回给client
- 数据块会缓存
2.1.5. hmaster的职责
1、管理用户对Table的增、删、改、查操作;
2、记录region在哪台Hregion server上
3、在Region Split后,负责新Region的分配;
4、新机器加入时,管理HRegion Server的负载均衡,调整Region分布
5、在HRegion Server宕机后,负责失效HRegion Server 上的Regions迁移。
2.1.6. hregionserver的职责
HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBASE中最核心的模块。
HRegion Server管理了很多table的分区,也就是region。
2.1.7. client职责
Client
HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信
管理类操作:Client与HMaster进行RPC;
数据读写类操作:Client与HRegionServer进行RPC。
3、Hbase的安装部署
前言:分布式安装hbase前,请首先安装配置hadoop和Zookeeper
3.1.下载Hbase
运行环境是在Ubuntu14系统下,HBase版本为hbase-1.1.2
下载地址:http://archive.apache.org/dist/hbase/
3.2.安装Hbase
3.2.1 解压安装包hbase-1.1.2-bin.tar.gz至路径 /usr/local,命令如下:
sudo tar -zxf ~/hbase-1.1.2-bin.tar.gz -C /usr/local
3.2.2 将解压的文件名hbase-1.1.2改为hbase,以方便使用,命令如下:
sudo mv /usr/local/hbase-1.1.2 /usr/local/hbase
3.2.3 配置环境变量,将hbase下的bin目录添加到path中:
vi ~/.bashrc
如果没有引入过PATH请在~/.bashrc文件尾行添加如下内容:
export PATH=$PATH:/usr/local/hbase/bin
如果已经引入过PATH请在export PATH这行追加/usr/local/hbase/bin,这里的“:”是分隔符,如图:
执行source命令使上述配置在当前终端立即生效:
source ~/.bashrc
3.2.4查看HBase版本,确定hbase安装成功,命令如下:
/usr/local/hbase/bin/hbase version
看到以上输出消息表示HBase已经安装成功
4、修改Hbase配置文件
cd /usr/local/hbase/conf/ #进入文件夹
4.1 创建data/tmp
mkdir -p data/tmp
pwd #/usr/local/hbase/data/tmp
4.2 配置hbase-env.sh
27行附近,添加自己的JAVA_HOME
124行附近改为false
4.3 再配置hbase-site.xml
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/hbase/data/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</value>
</property>
</configuration>
4.4 配置regionservers
列出了你希望运行的全部 HRegionServer,一行写一个host (就像Hadoop里面的 slaves
一样). 列在这里的server会随着集群的启动而启动,集群的停止而停止.
将localhost改成主机名(我的是master)
5、启动Hbase
start-hbase.sh
jps后看到增加了HRrgionServer和HMaster两个进程
master:16010可以进入Hbase的web界面(注意这里的端口号1版本前是60010)
附录Hbase官网(中):http://abloz.com/hbase/book.html#standalone_dist
6、Hbase相关命令
6.1. 命令的进退
6.1.1、hbase提供了一个shell的终端给用户交互
#$HBASE_HOME/bin/hbase shell
6.1.2、如果退出执行quit命令
#$HBASE_HOME/bin/hbase shell
…
>quit
6.2. 命令
名称 | 命令表达式 |
创建表 | create ‘表名’, ‘列族名1′,’列族名2′,’列族名N’ |
查看所有表 | list |
描述表 | describe ‘表名’ |
判断表存在 | exists ‘表名’ |
判断是否禁用启用表 | is_enabled ‘表名’is_disabled ‘表名’ |
添加记录 | put ‘表名’, ‘rowKey’, ‘列族 : 列‘ , ‘值’ |
查看记录rowkey下的所有数据 | get ‘表名’ , ‘rowKey’ |
查看表中的记录总数 | count ‘表名’ |
获取某个列族 | get ‘表名’,’rowkey’,’列族’ |
获取某个列族的某个列 | get ‘表名’,’rowkey’,’列族:列’ |
删除记录 | delete ‘表名’ ,‘行名’ , ‘列族:列’ |
删除整行 | deleteall ‘表名‘,’rowkey‘ |
删除一张表 | 先要屏蔽该表,才能对该表进行删除第一步 disable ‘表名’ ,第二步 drop ‘表名’ |
清空表 | truncate ‘表名‘ |
查看所有记录 | scan “表名” |
查看某个表某个列中所有数据 | scan “表名” , {COLUMNS=>’列族名:列名’} |
更新记录 | 就是重写一遍,进行覆盖,hbase没有修改,都是追加 |