介绍:
Hbase: Hadoop database 的简称,也就是基于Hadoop数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。
Hive: Hive是Hadoop数据仓库,严格来说,不是数据库,主要是让开发人员能够通过SQL来计算和处理HDFS上的结构化数据,适用于离线的批量数据计算,
- 通过元数据来描述Hdfs上的结构化文本数据,通俗点来说,就是定义一张表来描述HDFS上的结构化文本,包括各列数据名称,数据类型是什么等,方便我们处理数据
- 将对数据的处理转换为sql 来运行mapreduce ,节约了开发者的学习成本
结论:
Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用
基本的概念:
1)Name Space
命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase
有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,
default 表是用户默认使用的命名空间。
2)Region
类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需
要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。
3)Row:
HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。
4)Column:
HBase 中的每个列都由 Column Family(列族)和 Column Qualifier(列限定符)进行限定,例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。
5)Time Stamp :
用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会
自动为其加上该字段,其值为写入 HBase 的时间。
6)Cell
由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数
据是没有类型的,全部是字节码形式存贮。
基础架构:
架构角色:
1)Region Server
Region Server 为 Region 的管理者,其实现类为 HRegionServer,主要作用如下:
对于数据的操作:get, put, delete;
对于 Region 的操作:splitRegion、compactRegion。
2)Master
Master 是所有 Region Server 的管理者,其实现类为 HMaster,主要作用如下:
对于表的操作:create, delete, alter
对于 RegionServer的操作:分配 regions到每个RegionServer,监控每个 RegionServer
的状态,负载均衡和故障转移。
3)Zookeeper
HBase 通过 Zookeeper 来做 Master 的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。
4)HDFS
HDFS 为 HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用的支持。
datanode依赖于linux的文件系统, 而hbase的存储依赖于hdfs
安装与部署
1)hbase-env.sh 修改内容:
export JAVA_HOME=/opt/module/jdk1.6.0_144
export HBASE_MANAGES_ZK=false
2)hbase-site.xml 修改内容:
<configuration>
<!--配置hdfs数据存放路径-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop202:8020/HBase</value>
</property>
<!--使用分布式-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98 后的新变动,之前版本没有.port,默认端口为 60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop202,hadoop203,hadoop204</value>
</property>
<!--配置zookeeper 数据存放路径-->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/module/zookeeper-3.4.10/zkData</value>
</property>
</configuration>
- 修改regionservers
配置集群
hadoop202
hadoop203
hadoop204
- 配置软连接(因为要用到hdfs的文件系统)
ln -s /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml /opt/module/hbase/conf/core-site.xml
ln -s /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml /opt/module/hbase/conf/hdfs-site.xml
- 分发脚本
因为hbase用到了时间戳,所以一定要Linux的集群时间同步,(还要先提前启动hdfs和zookeeper)
下面就可以启动了
bin/start-hbase.sh
bin/stop-hbase.sh
单个启动
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
web的访问地址为:maste/16010
基础的使用:
数据的修复:(先启动hbase)
bin/hbase hbck -fix
dml: 对数据进行操作
put #添加
get # 获取
scan #扫描全表
help
list #查看
delete
deleteall # 删除
ddl:
alert
create
drop # 删除前,先对这个表进行 disable , 标记为不可用才能删除
操作命名空间:
create_namespace
list _naemspace