Hbase体系结构与安装
1. Hbase版本与Hadoop版本搭配比较烦,如果版本搭配不对,就不能运行,这个可以在百度和google中查询相应的版本搭配
2. Hbase安装:单机模式
(1)下载及解压hbase安装包
(2) 修改conf/hbase-env.sh脚本,设置环境变量
设置JAVA_HOME环境变量
export JAVA_HOME=/usr/java/jdk1.6.00_26/ 设置jdk环境变量
(3) 编辑hbase-site.xml进行配置
先创建用于存放数据的目录/home/grid/hbase-0.90.5/data
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///home/grid/hbase-0.90.5/data</value>
</property>
</configuration>
单机模式采用的是本地文件系统模式
(4) 启动Hbase
bin/start-hbase.sh
(5) 验证Hmaster已经启动
jps 查看与java有关的进程
Hmaster 进程启动了代表成功
(6) 进入shell
bin/hbase shell
3. Hbase安装:伪分布模式
(1) 在单点模式的基础上继续
(2) 编辑hbase-env.sh增加HBASE_CLASSPATH环境变量
用于帮助hbase找到hadoop
export JAVA_HOME=/usr/java/jdk1.6.00_26/
export HBASE_CLASSPATH=/home/grid/hadoop-0.20.2/conf
(3) 编辑hbase-site.xml打开分布模式
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.169.80.100:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
与hadoop分布式文件系统融合
(4) 覆盖hadoop核心jar包
这是关键一步,最好在网上找一份成功安装的指南文件,不同的版本会有不一样的地方
主要目的是防止引文hbase和hadoop版本不同出现兼容问题,造成hmaster启动异常
(5) 启动hbase
(6) 验证启动
4. Hbase安装:完全分布模式
(1) 配置hosts,确保涉及的主机名均可解析为ip
(2) 编辑hbase-env.xml
(3) 编辑hbase-site.xml
(4) 编辑regionservers文件
(5) 把Hbase复制到其他节点
(6) 启动Hbase
(7) 验证启动
这个可以在网上查找完全分布模式安装文档,详细的安装文档
5.Web管理界面
60010端口
6.管理操作hbase的方式
(1) Shell
在hbase的bin目录下
./hbase shell 进入shell命令行界面
help 可以列出各种命令出来
1) 查询数据库集群状态
status
2) 查询数据库版本
version
3) 创建表
create ‘member’, ‘menber_id’,’address’,’info’
表名 列族 列族 列族
4) 查看表信息
list
describe ‘member’
5) 删除列族:alter ,disable,enable
alter ‘member’,{NAME=>’member_id’,METHOD=>’delete’}
disable ‘member’
alter ‘member’,{NAME=>’member_id’,METHOD=>’delete’}
enable ‘member’
6) 列出所有的表
list
7) 删除表
disable ‘temp_table’
drop ‘temp_table’
8) 查询一个表是否存在
exists ‘member’
9) 判断表是否enable或disable
is_enabled ‘member’
is_disabled ‘member’
10) 插入记录
put ‘member’,’scutshuxue’,’info:age’,’24’
表名 行健
11) 获取一个行健的所有数据
get ‘member’,’scutshuxue’
12) 获取一个行健,一个列族的所有数据
get ‘member’,’scutshuxue’,’info’
13) 获取一个行健,一个列族中一个列的所有数据
get ‘member’,’scutshuxue’,’info:age’
14) 更新一条记录
put ‘member’,’scutshuxue’,’info:age’,’99’
15) 通过timestamp来获取数据
get ‘member’,’scutshuxue’,{COLUMN=>’info:age’,TIMESTAMP=>1321586238965}
16) 删除指定行健的字段
delete ‘member’,’temp’,’info:age’
表名 行健 列
17) 删除整行
deleteall ‘member’,’xiaofeng’
18) 查询表中有多少行
count ‘member’
19) 清空表
truncate ‘member’
20) 全表扫描
scan ‘member’
(2) Hbase API
《Hbase权威指南》第3-5章
用eclipse开发hbaseAPI程序大致和map-reduce程序类似
7.什么情况下使用Hbase?
成熟的数据分析主题,查询模式已经确立并且不轻易改变
传统的关系型数据库已经无法承受负荷,高速插入,大量读取
适合海量的,但同时也是简单的操作
8.应用场景
(1)场景一
1)关系型数据库的困难
简单的事情只要上了量就会变成无比复杂的事情
Order by耗费很多性能
大量发生,但又无法分布式处理
顾客需要实时看到自己的足迹,因此不能使用缓存技巧
2)Hbase迎接挑战
天生就是面向时间戳查询
基于行健的查询异常快速,特别是最近的数据被放在内存的memstore里,完全没有I/O开销
分布式化解负荷
3)模式设计
行健: userid
列族和列:book:bookid
为了充分利用分布式,可以用reverse key,hash等技巧改造行健
(2)场景二:商品推荐
1) 用关系行数据库实现
2) 使用Hbase:表设计与查询实现
两个表,一个是u-t,另一个是t-u
u-t表的结构:行健为userid,列族和列为thread:threadid
t-u表的结构:行健为threadid,列族和列为user:userid
查询:现在t-u表从threadid->userid,再在u-t表从userid->threadid ,在计算机程序中实现去重和统计功能
9.辅助索引
例子:学生表(学号,身份证号,姓名,性别,系,年龄),有时在学号上查询,有时在身份证号上查询
主表:行健为学号,列族为学生,下面的列是身份证号,姓名,性别,系,年龄
辅助(索引)表:行健为身份证号,列族和列为学号
10.复合键设计
复合键的好处
便于分布(行健看起来比较随机)
便于多条件伸缩查询