Hbase入门到实操

一、Hbase的概述

1.1 Hbase的简介

1)简要介绍

1. Hbase是一个Hadoop 数据库
2. 是一个非关系型(NoSql:Not Only SQL)的、分布式的、具有良好的扩展性、面向列式存储的数据库。
3. 开发灵感来源于Google的Bigtable论文,java语言编写,并且开源。

2)特性

- 强一致性读/写:具有一致性读和写的功能,适合统计分析聚合类型的任务.
- 自动分片:hbase的表对应的region会根据大小自动拆分,并重写分布
- 自动 RegionServer故障转移
- Hbase的存储是基于HDFS的
- hbase可以和Mapreduce进行整合,从而进行数据分析
- Hbase还提供了java语言的客户端接口
- Thrift/REST API:Hbase也提供了非java语言的连接操作
- Hbase提供了块缓存和布隆过滤器等机制来提高查询效率等

3)何时选择Hbas

1. 当数据量特别大的时候,
2. 集群节点数多于10个的情况下。
3. 以及不需要具有事务、高级查询语言等功能的情况下。

1.2 Hbase的表模型(重点)

1.2.1 关系型数据库的表模型

1. 表模型是面向行式存储的。也就是每一条记录的数据都是紧凑的挨着的。
2. 优点:
	 -- 用户在插入数据时,效率特别高,只是追加操作。
	 -- 在查询操作时,比如select * 时效率是非常高的
	 -- 结构清晰,每一行的列的数量是固定的
	 -- 支持ACID事务
3. 缺点:
    -- 一旦数据表中存储数据后,修改表结构变得特别困难。
	 -- 如果我们想扩展字段时,会对表结构产生影响。
    -- 即使某一行中的某个字段没有赋值,也要使用null填充
    -- 一旦涉及到多张表,因为数据表存在着复杂的关系,管理非常不方便。	  比如外键约束
    -- 一旦面对海量数据的处理时,读写性能特别差,尤其在高并发这一块。

1.2.2 Hbase的表模型(重点)

1、 hbase是面向列(colum family:列簇,列族)式存储的。
2. 定义表的时候不需要指定列名,列类型。只需要指定列族名即可
3. 数据实际上是按照key:value形式存储的,一个kv对通常称之为一个Cell(单元格)
4. 每个kv对后都有一个版本号。版本号是一个时间戳。一个K可以有多个版本
5. 为了方便管理多个KV对,引入了列族的概念。
   -- 一个列族对应至少一个文件
   -- 列族之间一定是不同的文件
6. 又为了区分KV是不同的事物的,引入了rowkey的概念。 因此rowkey必须具有唯一性
7. 为了管理表的数据,引入了region的概念。一个region对应一张表,或者是一张表的一部分。
   region是由rowkey的范围来表示的。
   
        如果一张表只有一个region:   
        region的rowkey的偏移量:startKey没有最小值,endKey也没有最大值。
8. Hbase的中的所有数据,都是byte[]类型。没有其他类型
9. hbase会在内存里进行排序:
       查询时:先按照rowkey排序,然后是列族名排序,再按照key进行排序
       实际上插入数据时:   先按照rowkey进行排序,再按照key进行排序         都是字典排序规则

1.3 Hbase的体系架构(重点)

1. Client:hbase的客户端
	- hbase提供了客户端使用的API接口
   - API里还维护了一个缓存机制,用于加快客户端访问的效率,比如缓存查询过的region的地址
2. Zookeeper
	- 维护hbase的高可用,保证只有一个活跃的Hmaster,其他的为backup
	- 维护着regionserver的动态上下线感知
	- 维护着所有的region地址以及部分元数据
3. Hmaster
	- hmaster主要管理着region的负载均衡
		   (1) 表的第一个region分配的位置
		   (2) region过大后,进行切分后,形成的新region的重新分配
		   (3) regionserver宕机后的region的重新分配
	- hdfs上的垃圾回收
   - 处理新的schama的维护(namespace的创建和删除等)
4. RegionServer
	- 主要就是管理本节点上的所有region(包括region的切分)。
	- 处理客户端的读写请求
	- 负责hlog和storefile的读和写
5. Region
	- 实际上就是表,或者是表的一部分。    是Hbase的表的存储单元 
	- 本质:在hdfs上是目录
6. store
   - 一个列族对应一个store      
   - 本质:在是region目录下的子目录。
7. memstore
	- 一个store 对应一个memstore(写缓存),默认大小是128M. 
8. Hfile/StoreFile
   - 当memstore达到阈值(128M,1小时,或者是内存的40%)就会被flush出来,形成一个storefile。以hfile存储格式存储到HDFS上。
9. hlog:
   - 一个regionserver上维护着一个hlog文件。以WAL(write ahead log)格式记录着客户端的操作,防止宕机后丢失数据,然后可以重演一次,以便找回数据。

二、Hbase的安装

2.1 单机模式的简要说明(了解)

就是在一台节点上,解压,配置环境变量,启动一个hmaster服务,没有regionserver服务项,使用本地的文件系统存储数据。

2.2 伪分布式的搭建(了解)

伪分布式,指的是除了有hmaster外,只有一个regionserver服务项。存储的文件系统可以是本地文件系统,也可以使用hdfs。

2.3 完全分布式的搭建(重点)

2.3.1 简要说明

完全分布式,指的就是除了hmaster守护进程外,有多个regionserver守护进程,并且每一个regionserver守护进程独占一个机器节点。使用的文件系统是HDFS。

布局如下:

qianfeng01:  hmaster   regionserver
qianfeng02:  hmaster   regionserver
qianfeng03:            regionserver

环境说明:

必须配置好集群的免密登录认证
必须配置时间同步。保证集群节点的时间差不能超过30秒,否则regionserver启动失败

2.3.2 搭建步骤

步骤1): 上传、解压、配置环境变量 、重导生效

[root@qianfeng01 ~]# tar -zxvf hbase-1.2.1-bin.tar.gz -C /usr/local/
[root@qianfeng01 ~]# cd /usr/local/
[root@qianfeng01 local]# mv hbase-1.2.1/ hbase
[root@qianfeng01 local]# vim /etc/profile
.......省略.......
#hbase environment
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE_HOME/bin:$PATH

[root@qianfeng01 local]# source /etc/profile

步骤2):配置hbase-env.sh环境脚本

[root@qianfeng01 local]# vi $HBASE_HOME/conf/hbase-env.sh

#找到下面内容,解开注释,添加具体路径

# The java implementation to use.  Java 1.7+ required.
export JAVA_HOME=/usr/local/jdk

# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false       #禁止内置zookeeper

步骤3):配置hbase-site.xml文件

<configuration>
   <!-- 指定hbase在HDFS上存储的路径 -->
   <property>
      <name>hbase.rootdir</name>
      <value>hdfs://qianfeng01:8020/hbase</value>
   </property>
   <!-- 指定hbase是分布式的 -->
   <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
   </property>
   <!-- 指定zk的地址,多个用“,”分割 -->
   <property>
      <name>hbase.zookeeper.quorum</name>
      <value>qianfeng01:2181,qianfeng02:2181,qianfeng03:2181</value>
   </property>
   <!--将属性hbase.unsafe.stream.capability.enforce 改为true -->
   <property>
      <name>hbase.unsafe.stream.capability.enforce</name>
      <value>true</value>
   </property>
   <!-- 取消内存检查 -->
   <property>
      <name>hbase.table.sanity.checks</name>
      <
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值