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)。

hbase 快速入门 hbase ha_hbase

 

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 集群结构 和 搭建

 

hbase 快速入门 hbase ha_时间戳_02

 

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

hbase 快速入门 hbase ha_hadoop_03

success!