一、初始HBase
1.1 HBase简介
1.1.1 HBase是什么
HBase是Goole的BigTable论文而来,是一个分布式海量列示非关系型数据库系统,可以提供超大规模数据集的实时随机读写。
认识HBase列存储
如下是MySql存储机制,空值字段浪费存储空间
如果是列存储的话:
列存储的优点:
1.减少存储空间的占用。
2.支持好多列。
1.1.2 HBase的特点
1. 海量存储:底层基于HDFS存储海量数据。
2. 列示存储:HBase表的数据是基于列族进行存储的,一个列族包含若干列。
3. 极易扩展:底层依赖HDFS,当磁盘空间不足时,只需动态添加DataNode服务节点即可。
4. 高并发:支持高并发的读写操作。
5. 稀疏:稀疏主要是针对HBase列的灵活性。在列族中可以指定任意多个列,在列数据为空的情况下,不会占用存储空间。
6. 数据的多版本:HBase表中的数据可以有多个版本值,默认情况下是根据版本号区分,版本号就是插入数据的时间戳。
7. 数据类型单一: 所有的数据在HBase中是以字节数组进行存储的。
1.1.3 HBase的应用
交通方面:船舶GPS信息,每天有上千万左右的数据存储。
金融方面:消费信息、贷款信息、信用卡还款信息等。
电商方面:电商网站的交易信息、物流信息、游览信息等。
电信方面:通话信息。
总结:HBase适合海量明细数据的存储,并且后期需要有很好的查询性能(单表超上千、上亿,且并发要求高)。
1.2 HBase数据模型
HBase的数据也是以表(有行有列)的形式存储的。
HBase逻辑架构
HBase物理存储
1.3 HBase整体架构
Zookeeper:
实现HMaster的高可用;
保存了HBase的元数据信息,是所有HBase表的寻址入口;
对HMaster和RegionServer监控;
HMaster:
为RegionServer分配Region;
维护整个集群的负载均衡;
维护集群的元数据信息;
发现失效的Region,并将失效的Region分配到正常的RegionServer上;
HRegionServer:
负责管理Region;
接受客户端的读写数据请求;
切分正在运行过程中变大的Region;
Region:
每个HRegion由多个store构成;
每个Store保存一个列族(Column Family),表有几个列族,就有几个Store;
每个Store由一个memStore和多个storeFile组成。MemStore是Store在内存中的内容,写到文件后就是storeFile。storeFile在底层是以HFile的格式保存。
1.4 HBase集群安装部署
1. 下载安装包
Index of /dist/hbase/1.3.1
hbase-1.3.1-bin.tar.gz
2. 规划安装目录:/opt/lagou/servers/
3. 上传安装包到服务器
4. 解压安装包到指定的规划目录
tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/lagou/servers
5. 修改配置文件
需要把hadoop中的配置core-site.xml 、hdfs-site.xml拷贝到hbase安装目录下的conf文件夹中:ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/core-site.xml
/opt/lagou/servers/hbase-1.3.1/conf/core-site.xml
ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
/opt/lagou/servers/hbase-1.3.1/conf/hdfs-site.xml
修改conf目录下配置文件
修改 hbase-env.sh:
#添加java环境变量
export JAVA_HOME=/opt/module/jdk1.8.0_231
#指定使用外部的zk集群
export HBASE_MANAGES_ZK=FALSE
修改 hbase-site.xml:
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://linux121:9000/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>linux121:2181,linux122:2181,linux123:2181</value>
</property>
</configuration>
修改regionservers文件:
#指定regionserver节点
linux121
linux122
linux123
6. 配置hbase的环境变量
export HBASE_HOME=/opt/lagou/servers/hbase-1.3.1
export PATH=$PATH:$HBASE_HOME/bin
7. 分发hbase目录和环境变量到其他节点
rsync-script hbase-1.3.1
8. 让所有节点的hbase环境变量生效
在所有节点执行 source /etc/profile
HBase集群的启动和停止:
前提条件:先启动Hadoop和zk集群;
启动HBase:start-hbase.sh
停止HBase:stop-hbase.sh
HBase集群的web管理界面
HMaster主机名:16010
1.5 HBase shell 基本操作
1. 进入HBase客户端命令操作界面
hbase shell
2. 查看帮助命令
help
3. 查看当前数据库中有哪些表
list
4. 创建一张lagou表, 包含base_info、extra_info两个列族
HBase建表必须指定列族信息
create 'lagou', 'base_info', 'extra_info'
create 'lagou', {NAME => 'base_info', VERSIONS => 3}, {NAME => 'extra_info', VERSION => 3}
VERSIONS是指此单元格内的数据可以保留最近3个版本。
5. 添加数据操作
向lagou表中插入信息,row key为 rk1,列族base_info中添加name列标示符,值为wang:put 'lagou', 'rk1', 'base_info:name', 'wang'
向lagou表中插入信息,row key为rk1,列族base_info中添加age列标示符,值为30:
put 'lagou', 'rk1', 'base_info:age', 30
向lagou表中插入信息,row key为rk1,列族extra_info中添加address列标示符,值为shanghai:put 'lagou', 'rk1', 'extra_info:address', 'shanghai'
6. 查询数据
6.1 通过rowkey进行查询
获取表中row key为rk1的所有信息:get 'lagou', 'rk1'
6.2 查看rowkey下面某个列族的信息
获取lagou表中row key为rk1,base_info列族的所有信息:
get 'lagou', 'rk1', 'base_info'
6.3