大数据_HBase框架
一、HBase简介
HBase定义
HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。
HBase数据模型
逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一-张表中,有行有列。但从HBase的底层物理存储结构(K-V) 来看,HBase 更像是一个multi-dimensional map。
①Name Space
命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。Hbase有两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是用户默认使用的命名空间。
②Region
类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往HBase写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。
③Row
HBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重要。
④Column
HBase中的每个列都由Column Family (列族)和Column Qualifier (列限定符)进行限定,例如info:name,info: age. 建表时,只需指明列族,而列限定符无需预先定义。
⑤Time Stamp
用于标识数据的不同版本(version) ,每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入HBase的时间。
⑥Cell
由{rowkey, column Family: column Qualifier, time Stamp}唯一确定的单元。 cell 中的数据是没有类型的,全部是字节码形式存贮。
HBase逻辑结构
Hbase 基本架构
架构角色:
①Region Server
Region Server 为Region 的管理者,其实现类为HRegionServer,主要作用如下:
对于数据的操作: get, put, delete;
对于Region的操作: splitRegion、 compactRegion。
②Master
Master是所有Region Server 的管理者,其实现类为HMaster,主要作用如下:
对于表的操作: create, delete, alters
对于RegionServer的操作:分配regions到每个RegionServer ,监控每个RegionServer的状态,负载均衡和故障转移。
③Zookeeper
HBase通过Zookeeper来做master的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。
④HDFS
HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用的支持。
Hbase 安装部署
1. 创建工作路径/usr/hbase,下载相应软件,解压至工作路径。
mkdir -p /usr/hbase
cd /usr/hbase
wget http://172.31.10.254:8000/bigdata/bigdata_tar/hbase-1.2.4-bin.tar.gz
tar -zxvf hbase-1.2.4-bin.tar.gz -C /usr/hbase
2. 进入hbase配置目录conf,修改配置文件hbase-env.sh,添加配置变量。
cd /usr/hbase/hbase-1.2.4/conf
vim hbase-env.sh
export HBASE_MANAGES_ZK=false
export JAVA_HOME=/usr/java/jdk1.8.0_171
export HBASE_CLASSPATH=/usr/hadoop/hadoop-2.7.3/etc/hadoop
#解释:一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。这个集群会随着Hbase的启动而启动。而在实际的商业项目中通常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false
3. 配置conf/hbase-site.xml文件
<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.master</name>
<value>hdfs://master:6000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/zookeeper/zookeeper-3.4.10</value>
</property>
#解释:要想运行完全分布式模式,加一个属性 hbase.cluster.distributed 设置为 true 然后把 hbase.rootdir 设置为HDFS的NameNode的位置;
hbase.rootdir:这个目录是region server的共享目录,用来持久化Hbase。URL需要是’完全正确’的,还要包含文件系统的scheme;
hbase.cluster.distributed :Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面。在hbase-site.xml配置zookeeper,当Hbase管理zookeeper的时候,你可以通过修改zoo.cfg来配置zookeeper,对于zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具体的字段是 hbase.zookeeper.quorum.在这里列出Zookeeper集群的地址列表,用逗号分割。
hbase.zookeeper.property.clientPort:ZooKeeper的zoo.conf中的配置,客户端连接的端口。
hbase.zookeeper.property.dataDir:ZooKeeper的zoo.conf中的配置。对于独立的Zookeeper,要指明Zookeeper的host和端口。需要在 hbase-site.xml中设置
4. 配置conf/regionservers,添加子节点
在这里列出了希望运行的全部 HRegionServer,一行写一个host (就Hadoop里面的slaver 一样)。列在这里的server会随着集群的启动而启动,集群的停止而停止。
5. hadoop配置文件拷入hbase的目录下(当前目录为/usr/hbase/hbase-1.2.4/conf)
cp /usr/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml .
cp /usr/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml .
6. 分发hbase到子节点
scp -r /usr/hbase root@slave1:/usr/
scp -r /usr/hbase root@slave2:/usr/
7. 配置环境变量(三台机器)
vim /etc/profile
#配置环境变量 Hbase
# set hbase environment
export HBASE_HOME=/usr/hbase/hbase-1.2.4
export PATH=$PATH:$HBASE_HOME/bin
8. 生效环境变量
source /etc/profile
9. 运行和测试,在master上执行(保证hadoop和zookeeper已开启)
启动Hadoop
[atguigu@hadoop102 hadoop-3.1.3]1$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.shk
启动zookeeper
开启服务:bin/zkServer.sh start
查看状态:bin/zkServer.sh status
开启Hbase
bin/start-hbase.sh
查看进程HMaster,说明hbase开启成功
jps
Hbase Shell 操作
基本操作
注:192.168.187.198:16010,
ip + 16010端口号 ,查看Hbase Web网页
注:Hbase客户端命令行输入的内容,须Ctrl + Backspace 健才可删除
注:如果在命令后不小心加了;
需要连续输入两个单引号解除
1.进入Hbase客户端命令行。
hbase shell
2.查看帮助命令。
help
3. 列出当前表
列出(查询)表:list
列举出符合正则表达式规则的表:list 'abc.*'
列出出指定名称空间下的表:list 'ns:.*'
表的操作
1.创建表
create 'student','info'
例2: create 'sun' ,'info1','info2' 表名sun,2列
2.插入数据到表
put 'student','1001', 'info:sex','male'
put 'student','1001', 'info:age', '18'
put 'student','1002', 'info:name','Janna'
3. 扫描查看表数据
scan 'student'
scan 'student',{STARTROW => '1001'}
4. 查看表结构
describe 'student'
5. 更改指定字段的数据
put 'student','1001','info:name','Nick'
put 'student','1001','info:age','100'
6. 查看“指定行”或“指定列族:列” 的数据
get 'student','1001'
get 'student','1001','info:name'
7. 统计表数据行数
count 'studunt'
8. 删除数据
删除某rowkey的全部数据
deleteall 'studunt','1001'
删除某rowkey的某一列数据
delete 'student','1002','info:sex'
9. 清空数据
truncate 'student'
10. 删除表
首先需要让该表为disable状态
disable 'student'
然后才能drop这个表
drop 'student'
#提示
如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first.
11. 变更表信息
将info列族中的数据存放3个版本
alter 'student',{NAME=>'info',VERSIONS=>3}
get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}