hbase的基础学习


  Hbase的应用场景及特点

  Hbase的概念与定位

  Hbase的架构体系与设计模型

  Hbase的安装部署

  Hbase的Shell基本使用

一:Hbase的应用场景及特点

1.能做什么

  海量数据存储

  准实时查询

2.实际业务场景

  交通:GPS里的数据

  金融:刷卡,交易信息

  电商:物流,浏览日志信息

  移动

3.Hbase的特点

  容量大:可以有百亿行,百万列。数据矩阵横向和纵向两位维度支持的数据量都非常具有弹性

  面向列:面向列的存储和权限控制,并支持独立检索。列式存储,其数据在表中是按照某列存储的,这样在查询少数几个字段的售后,可以大大减少读取的数据量

  多版本:每一个列可以存储多个版本version

  稀疏性:为空的列并不占用存储空间

  扩展性:底层依赖于HDFS

  高可靠性:WAL机制保证了数据写入时不会因为集群异常而导致写入数据丢失;replication机制保证了集群出现严重问题时,数据不会发生丢失或者损坏。而且底层的hdfs也有备份。

  高性能:底层的LSM数据结构和rowkey的有序排列等架构上的独立设计,使得非常高的写入性能。region切分,主键索引,缓存机制使得hbase在海量数据下具有一定的随机读取性能,该性能针对rowkey的查询能够达到毫秒级别。

二:Hbase的概念与定位

1.官网的描述

  https://hbase.apache.org/  

  Welcome to Apache HBase?

        Apache HBase? is the Hadoop database, a distributed, scalable, big data store.

Use Apache HBase? when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.

  来源于谷歌的三篇论文:HDFS,MapReduce,HBase

2.选择合适的版本

  http://archive.apache.org/dist/hbase/

3.hadoop中的定位

   

三:Hbase的架构体系与设计模型

 1.架构体系

2.说明

  在HBase中,表被分割成多个更小的块然后分散的存储在不同的服务器上,这些小块叫做Region,存放Region的地方叫做RegionServer。

  Master进程负责处理不同的RegionServer之间的Region的分发。

  • HBase 依赖 Zookeeper 作为分布式的协调、治理工具,RegionServer、Master也会把自己的信息写到ZooKeeper中
  • HBase 还依赖 HDFS 作为底层的文件系统,HBase 的数据最终是存储到 HDFS 服务中的
  • HBase 存在两个主要进程,分别是RegionServer和Master。客户端通过RegionServer对数据进行读写操作,而RegionServer会负责与 HDFS 进行数据交互,RegionServer会实时向Master报告自身状态及region等信息。  Master知道全局的RegionServer运行情况,可以控制RegionServer的故障转移和region的切分。Master相当于是RegionServer集群的管理者,并且任何时刻只有一个Master在运行。
  • Zookeeper作为协调工具可以帮助选举出一个Master作为集群的总管,并保证在任何时刻总有唯一一个Master在运行,这就避免了Master的“单点故障”的问题

  master:

  • 主要负责表和Region的管理工作
  • 管理客户端对表的增加、删除、修改、查询等操作
  • 实现不同RegionServer之间的负载均衡
  • 在Region分裂或合并后,负责重新调整Region的分布
  • 对发生故障失效的RegionServer上的Region进行迁移

  regionserver:

  • RegionServer是HBase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求。
  • 用户读写数据过程:用户写入数据时,被分配到相应Region服务器去执行,用户数据首先被写入到MEMStore和Hlog中,只有当操作写入Hlog之后,commit()调用才会将其返回给客户端当用户读取数据时,Region服务器首先访问MEMStore缓存,如果找不到,再去磁盘上面的StoreFile中寻找
  • 缓存的刷新:系统会周期性地把MemStore缓存里的内容刷写到磁盘的StoreFile文件中,清空缓存,并在Hlog里面写入一个标记每次刷写都生成一个新的StoreFile文件,因此,每个Store包含多个StoreFile文件。每个Region服务器都有一个自己的HLog 文件,每次启动都检查该文件,确认最近一次执行缓存刷新操作之后是否发生新的写入操作;如果发现更新,则先写入MemStore,再刷写到StoreFile,最后删除旧的Hlog文件,开始为用户提供服务。
  • StoreFile的合并:每次刷写都生成一个新的StoreFile,数量太多,影响查找速度、调用Store.compact()把多个合并成一个合并操作比较耗费资源,只有数量达到一个阈值才启动合并

3.细化的架构体系

4.读写流程

5.表结构模型

  说明:

  • 该表中包含两行:com.cnn.www和com.example.www
  • 有三个列簇:contents、anchor和people
  • 第一行(com.cnn.www)拥有5个版本,第二行(com.example.www)拥有1个版本
  • 对于第一行(com.cnn.www):contents列簇中包含一列:contents:html该列的值为某个网站的html内容anchor列簇中包含两列:anchor:和anchor:列的值为列的值为CNN.compeople列簇中没有任何列
  • 对于第二行(com.example.www):contents列簇中包含一列:contents:html该列的值为一段html,anchor列簇中没有任何列people列簇中包含一列:people:author该列的值为John Doe
{
  "com.cnn.www": {
    contents: {
      t6: contents:html: "<html>..."
      t5: contents:html: "<html>..."
      t3: contents:html: "<html>..."
    }
    anchor: {
      t9: anchor:cnnsi.com = "CNN"
      t8: anchor:my.look.ca = "CNN.com"
    }
    people: {}
  }
  "com.example.www": {
    contents: {
      t5: contents:html: "<html>..."
    }
    anchor: {}
    people: {
      t5: people:author: "John Doe"
    }
  }
}

四:Hbase的安装部署

1.版本

  jdk7

  hadoop 2.5

  zookeeper 3.4.5

  hbase 

2.java

  more /etc/profile

  echo $JAVA_HOME

  ##JAVA_HOME
  export JAVA_HOME=/opt/software/jdk1.8.0_181
  export PATH=$PATH:$JAVA_HOME/bin

3.hadoop

  下载:http://archive.apache.org/dist/hadoop/common/

  然后使用的版本:http://archive.apache.org/dist/hadoop/common/hadoop-2.5.0/