NoSQL简介
- 一、Apache Hbase是Hadoop数据库,是一个分布式,可扩展的大数据存储。当您需要对大数据进行随机,实时读/写访问时,请使用Apache Hbase。该项目的目标是托管非常大的表————数十亿行X百万列在商品硬件集群上,Apache Hbase是一个开源的,分布式的版本化的非关系化数据库。
2006年-google发表了bigdata白皮书
2006年-同年开始开发Hbase
2008年-Hbase正式成为apache子项目
2010年-正式成为apache顶级项目 - 二、常见NoSQL数据库
HBase
Redis:基于内存的NoSQL数据库,前身MemCached(不支持持久化)
MongoDB:基于文档型(BSON)的NoSQL数据库
Cassandra:跟HBase类似
HBsae的体系架构(主从结构)和表结构
- 一、Hadoop的生态体系圈
二、HBase(基于HDFS之上的NoSQL数据库)
1
2
3HBase HDFS
表 ---> 目录
数据 ---> 文件(HFile,默认大小:128MB)三、HBase的体系架构:主节点HMaster + 从节点HregionServer(通过zookeeper解决单点故障)
HBase的搭建模式
- 一、需要准备Hadoop集群和Zookeeper集群
- 二、上传并解压软件包
三、修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32hbase-env.sh:
export JAVA_HOME=/root/training/jdk1.8.0_144
export HBASE_MANAGES_ZK=false
hbase-site.xml:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://bigdata211:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>bigdata211:2181,bigdata212:2181,bigdata213:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/training/zookeeper/zkData</value>
</property>
</configuration>
regionserver:
bigdata211
bigdata212
bigdata213四、解决依赖问题,把相关版本的zookeeper和hadoop依赖包导入到hbase/lib下
- 五、软连接hadoop配置
1
2[root@bigdata211 flume]# ln -s /root/training/hadoop-2.7.3/etc/hadoop/hdfs-site.xml /root/training/hbase/conf
[root@bigdata211 flume]# ln -s /root/training/hadoop-2.7.3/etc/hadoop/core-site.xml /root/training/hbase/conf
操作HBsae
- 一、启动:
- 启动dfs
- 启动yarn
- 启动zookeeper
启动hbase:
1
2bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserverwebconlose:http://192.168.247.211:16010
- 启动客户端:bin/hbase shell
- 二、Hbase shell
- 帮助:help
- 显示服务器当前状态:hbase(main):002:0> status ‘bigdata211’
- 查看表:list === timestamp时间戳,column列族
- 查看表内容:scan ‘user’
- 创建表:create ‘表名’,’columnFamily’ === columnFamily列族,创建时指定几个列族,插入式就可使用几个列族
- 插入记录:put ‘表名’,’rowkey’,’info:name’,’zfhzxg’ === rowkey行键,唯一,不重复
- 覆盖数据:put ‘表名’,’rowkey’,’info:name’,’zhxzgd’ === 保证表名,行键,列族,字段相同
- 查看第几条记录之后的数据:scan ‘user’,{STARTROW => ‘102’}
- 查看第几条记录到第几条记录的数据:scan ‘user’,{STARTROW => ‘102’,STOPROW => ‘103’}
- 查看表结构:describe ‘user’
- 变更表信息:alter ‘user’,{NAME => ‘info’,VERSIONS => ‘3’}
- 删除数据:delete ‘user’,’101’,’info:name’
- 删除rowkey为101的数据:deleteall ‘user’,’101’
- 清空表数据:truncate ‘user’
- 设置表为不可用状态:disable ‘user’
- 删除表:drop ‘user’ === 必须设置表状态为不可用
- 查看表记录数(以rowkey为基准):count ‘emp’
- 查询指定数据:get ‘emp’,’102’,’info:high’或get ‘emp’,’102’
Hbase数据读写流程
- 整体流程
- client发出读写请求访问到zookeeper(元数据)
- zookeeper返回元数据信息给client(root表所在位置信息,root表中存储了.META.表的元数据信息,.META.表存储了region的元数据信息)
- 根据元数据信息找到查询的数据所在的HregionServer,zookeeper->regionServer(每一个root表只对应一个region,不能切分,通过root表可以读取到.META.表的元数据信息)
- 根据root表信息找到.META.表(.META.可以存储在多个region中,访问的是存储业务数据的元数据信息)
- 根据.META.表元数据信息找到region
- 数据返回到client
- HregionServer流程
- 客户端会通过region直接去Memstore(内存)中读取数据
- 如果数据存在,会直接返回数据
- 当Memstore中找不到时blockcache(与Memstore同属于一块内存的逻辑区域,Memstore会实时把数据落到blockcache中,blockcache再把数据落到Hfile中)
- 当blockcache中找不到是,将会再HDFS中查找Hfile
- 缓存返回(通过blockcache,Memstore层层返回)
- Memstore将数据返回客户端(Memstore负责写入数据的缓存,blockcache负责读取数据的缓存,读写分离)