1:HABASE 介绍
HBASE 数据库介绍
原理介绍
hbase 是 bigTable 的开源 java 版本。是建立在 hdfs 之上,提供高可靠性,高性能,列存储,可伸缩,实时读写的数据库。它介于 nosql 和 RDBMS 之间,仅能通过主键(row key)和主键的 range 来检索数据,仅支持单行事务(可通过hive实现多表 join 等复杂操作)。
主要用来存储 结构化和半结构化 的松散数据。hbase 查询数据功能很简单,不支持 join 等复杂操作,不支持复杂的事务。
Hbase 中支持的数据类型: byte[]
与 hadoop 一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的服务器,来增强计算和存储能力。
Habse 中的表一般有以下特点:
大:一个表的数据可以有上十亿行,上百万列;
面向列:面向列(族)的存储 和 权限控制, 列(族)独立检索;
稀疏:对于空(null)的列,并不占用列空间,因此表可以设计的非常稀疏;
表结构逻辑视图
HBase 以表的形式存储数据。表有行列组成,列分为若干个列族(column family)。
Row Key
与 nosql 数据库一致,row key 是用来检索记录的主键。访问 hbase table中的记录,只有三种方式:
1:通过单个 row key 访问
2:通过row key 的range
3:全表扫描 效率最差
Row Key行键 可以是任意字符串(最大长度 64Kb),在hbase内部,row key 保存为字节数组。
HBase 会对表中的数据 按照 rowkey 进行字典排序
存储时,数据按照 Row Key 字段排序存储。设计 key 时,要充分排序存储这个特性,将经常一起读取的行存储放到一起(位置相关性)
列族
HBase 表中的每个列,都鬼畜与某个 列族。列族是表的 schema 的一部分(列不是),必须在使用表之前定义。列名都是以列族作为前缀 ,列如: courses:history ,courses:math 都属于 courses 这个列族。
访问控制 ,磁盘 ,和 内存的使用统计都是在列族层面进行的!
列族越多,在获取亿行数据时,所有参与 IO 搜寻的文件就越多,所以没必要,不要设置太多的列族
时间戳
HBase 中通过 row 和 columns 确定的一个存储单元称为 cell。每个 cell 都保存这同一份数据的多个版本。版本通过时间戳来索引。时间戳可以由 hbase(在数据写入时自动) 赋值。此时时间戳时精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳,每个 cell 中,不同版本的数据按照时间倒序排列,最新的数据排最前面。
HBase 集群结构 和 搭建
region : 是 hbase 中对表进行切割的单元。
HMaster: HBase 的主节点,负责整个集群的状态感知,负载均衡,负责用户表的元数据管理(可以配置多个实现HA)
regionServer:HBase 中真正负责管理 region 的服务器,也就是负责为客户端进行表数据读写的服务器
zookeeper:整个 HBase 中的主从节点协调,主节点之间的选举,集群节点之间的上下线感知,都是通过Zookeeper实现。
环境搭建
(1)上传hbase安装包
(2)解压
tar -zxvf hbase-1.2.1-bin.tar.gz
(3)配置hbase集群,要修改3个文件
要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
scp /usr/apps/hadoop-2.7.1/etc/hadoop/hdfs-site.xml root@hadoop02:/usr/apps/hbase
scp /usr/apps/hadoop-2.7.1/etc/hadoop/core-site.xml root@hadoop02:/usr/apps/hbase
(3.1)修改hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_55
export HBASE_MANAGES_ZK=false
(3.2)修改 hbase-site.xm
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:9000/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
</configuration>
(3.3)修改 regionservers 以及 backup-masters
[root@hadoop01 conf]# vi regionservers
hadoop01
hadoop02
hadoop03
[root@hadoop01 conf]# vi backup-masters
hadoop02
(3.4) 拷贝hbase到其他节点
scp -r /usr/apps/hbase-1.2.1 root@hadoop02:/usr/apps/
scp -r /usr/apps/hbase-1.2.1 root@hadoop03:/usr/apps/
(4) 将配置好的HBase拷贝到每一个节点并同步时间。
ntpdate ntp.api.bz
(5) 启动所有的hbase进程
首先启动zk集群
./zkServer.sh start
启动hdfs集群
start-dfs.sh
启动hbase,在主节点上运行:
start-hbase.sh
(6) 通过浏览器访问hbase管理页面
hadoop01:60010 /16010
success!