搭建HBase伪分布环境之十三
一、什么是 HBase?以及常见的 NoSQL 数据库
1、什么是 NoSQL 数据库?
基于 Key—Value 保存数据跟关系型数据库最大的区别:NoSQL 不支持事务(transaction)
2、常见的 NoSQL 数据库
(*)HBase:基于 HDFS 之上的 NoSQL 数据库,面向列的 NoSQL 数据库
HBase HDFS
表 -----> 目录
数据 -----> 文件
(*)Redis:基于内存的 NoSQL,支持持久化(把内存的数据写成文件:RDB 和 AOF)
(*)MongoDB:文档(Bson 文档)型的 NoSQL 数据库 Bson 是 Json 的二进制
举例:设计表保存电影的信息
(*)Cassandra:类似 HBase,面向列的 NoSQL 数据库
Oracle 和 MySQL 是行式数据库-----> 适合:insert update delete --->OLTP 应用
列式数据库:-----> 适合:select -----> OLAP 应用
二、HBase 的体系结构和表结构(重要)
1、表结构: create ******
2、HBase 的体系结构
3、HBase 中没有数据类型,都是二进制
三、安装和配置 HBase 三种模式
1、本地模式
(*)不需要 HDFS,将数据保存到操作系统
(*)步骤:
(1)解压: tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C ~/training/
(2)设置环境变量: vi ~/.bash_profile
HBASE_HOME=/root/training/hbase-0.96.2-hadoop2 export HBASE_HOME
PATH=$HBASE_HOME/bin:$PATH export PATH
(3)hbase-env.sh
export JAVA_HOME=/root/training/jdk1.7.0_75
(4)hbase-site.xml
配置本地(操作系统)保存数据的路径
<property>
<name>hbase.rootdir</name>
<value>file:///root/training/hbase-0.96.2-hadoop2/data</value>
</property>
(5) 启动 HBase start-hbase.sh
命令行工具: hbase shell
2、伪分布模式:在单机上模拟分布式的环境
(1)hbase-env.sh:增加:
export JAVA_HOME=/root/training/jdk1.7.0_75
export HBASE_MANAGES_ZK=true
(2) hbase-site.xml <!--HBase 在 HDFS 上对应保存目录-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.88.111:9000/hbase</value>
</property>
<!--指定 HBase 是分布式环境-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--ZK 的地址-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.88.111</value>
</property>
<!--冗余度-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
(3) regionservers
192.168.88.111
3、全分布模式
四、操作 HBase
1、命令行
(1)创建表:create 'student','info','grade'
(2)插入数据:
put 'student','stu001','info:name','Tom'
put 'student','stu001','info:age','23'
put 'student','stu001','info:gender','M'
put 'student','stu001','grade:Chinese','80'
put 'student','stu002','info:name','Mike'
(3)查询数据: scan: select *
scan 'student'
get: select *** from *** where id=???
根据 rowkey 查询 get 'student','stu001'
(4) count 'student'
(5)清空表:truncate 'student' ----> Oracle 数据库: truncate table *** --->本质:先摧毁表,再重建日志:
Truncating 'student' table (it may take a while):
-Disabling table...
-Dropping table...
-Creating table...
0 row(s) in 1.8380 seconds
(6)删除表:
disable 'student'
drop 'student'
ERROR: Table student is enabled. Disable it first.'
2、Java API $HBASE_HOME/lib
3、Web Console:http://192.168.88.111:60010/
五、数据保存的过程
六、特殊表
1、名字:-ROOT- .META.
2、维护 Region 的元信息
七、过滤器
(1)列值过滤器: SingleColumnValueFilter
查询工资等于 3000 的员工 select ename from emp where sal=3000;
(2)列名前缀过滤器 ColumnPrefixFilter:
根据列名查询数据查询员工的姓名: select ename from emp;
(3)多个列名前缀过滤器:MultipleColumnPrefixFiltera查询员工的姓名和薪水:
select ename,sal from emp;
(5)组合:多个过滤器
八、HBase 上 MapReduce
1、创建表保存要分析的数据参考讲义:P67
create 'word','content'
put 'word','1','content:info','I love Beijing' put 'word','2','content:info','I love China'
put 'word','3','content:info','Beijing is the capital of China'
创建表保存结果:create 'wordcount','content'
2、问题?
public class WordCountMapper extends TableMapper<KEYOUT2,VALUEOUT2> {
Mapper 的 key1 和 value1 哪里去了?
public class WordCountReducer extends TableReducer<KEYIN3, VALUEIN3, KEYOUT> {
Reducer 的 k4 和 v4 哪里去了?
KEYOUT 是什么?-----> 就是 HBase 表中的一条记录
九、HBase 的 HA