HBase开发


NoSQL简介

  • 一、Apache Hbase是Hadoop数据库,是一个分布式,可扩展的大数据存储。当您需要对大数据进行随机,实时读/写访问时,请使用Apache Hbase。该项目的目标是托管非常大的表————数十亿行X百万列在商品硬件集群上,Apache Hbase是一个开源的,分布式的版本化的非关系化数据库。
    2006年-google发表了bigdata白皮书
    2006年-同年开始开发Hbase
    2008年-Hbase正式成为apache子项目
    2010年-正式成为apache顶级项目
  • 二、常见NoSQL数据库

    HBase
    Redis:基于内存的NoSQL数据库,前身MemCached(不支持持久化)
    MongoDB:基于文档型(BSON)的NoSQL数据库
    Cassandra:跟HBase类似


HBsae的体系架构(主从结构)和表结构

  • 一、Hadoop的生态体系圈
  • 二、HBase(基于HDFS之上的NoSQL数据库)

    1
    2
    3
    HBase      HDFS
    表 ---> 目录
    数据 ---> 文件(HFile,默认大小:128MB)
  • 三、HBase的体系架构:主节点HMaster + 从节点HregionServer(通过zookeeper解决单点故障)


HBase的搭建模式

  • 一、需要准备Hadoop集群和Zookeeper集群
  • 二、上传并解压软件包
  • 三、修改配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    hbase-env.sh:
    export JAVA_HOME=/root/training/jdk1.8.0_144
    export HBASE_MANAGES_ZK=false

    hbase-site.xml:
    <configuration>
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://bigdata211:9000/hbase</value>
    </property>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <property>
    <name>hbase.master.port</name>
    <value>16000</value>
    </property>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>bigdata211:2181,bigdata212:2181,bigdata213:2181</value>
    </property>
    <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/root/training/zookeeper/zkData</value>
    </property>
    </configuration>

    regionserver:
    bigdata211
    bigdata212
    bigdata213
  • 四、解决依赖问题,把相关版本的zookeeper和hadoop依赖包导入到hbase/lib下

  • 五、软连接hadoop配置
    1
    2
    [root@bigdata211 flume]# ln -s /root/training/hadoop-2.7.3/etc/hadoop/hdfs-site.xml /root/training/hbase/conf
    [root@bigdata211 flume]# ln -s /root/training/hadoop-2.7.3/etc/hadoop/core-site.xml /root/training/hbase/conf

操作HBsae

  • 一、启动:
  1. 启动dfs
  2. 启动yarn
  3. 启动zookeeper
  4. 启动hbase:

    1
    2
    bin/hbase-daemon.sh start master
    bin/hbase-daemon.sh start regionserver
  5. webconlose:http://192.168.247.211:16010

  6. 启动客户端:bin/hbase shell
  • 二、Hbase shell
  1. 帮助:help
  2. 显示服务器当前状态:hbase(main):002:0> status ‘bigdata211’
  3. 查看表:list === timestamp时间戳,column列族
  4. 查看表内容:scan ‘user’
  5. 创建表:create ‘表名’,’columnFamily’ === columnFamily列族,创建时指定几个列族,插入式就可使用几个列族
  6. 插入记录:put ‘表名’,’rowkey’,’info:name’,’zfhzxg’ === rowkey行键,唯一,不重复
  7. 覆盖数据:put ‘表名’,’rowkey’,’info:name’,’zhxzgd’ === 保证表名,行键,列族,字段相同
  8. 查看第几条记录之后的数据:scan ‘user’,{STARTROW => ‘102’}
  9. 查看第几条记录到第几条记录的数据:scan ‘user’,{STARTROW => ‘102’,STOPROW => ‘103’}
  10. 查看表结构:describe ‘user’
  11. 变更表信息:alter ‘user’,{NAME => ‘info’,VERSIONS => ‘3’}
  12. 删除数据:delete ‘user’,’101’,’info:name’
  13. 删除rowkey为101的数据:deleteall ‘user’,’101’
  14. 清空表数据:truncate ‘user’
  15. 设置表为不可用状态:disable ‘user’
  16. 删除表:drop ‘user’ === 必须设置表状态为不可用
  17. 查看表记录数(以rowkey为基准):count ‘emp’
  18. 查询指定数据:get ‘emp’,’102’,’info:high’或get ‘emp’,’102’

Hbase数据读写流程

  • 整体流程
  1. client发出读写请求访问到zookeeper(元数据)
  2. zookeeper返回元数据信息给client(root表所在位置信息,root表中存储了.META.表的元数据信息,.META.表存储了region的元数据信息)
  3. 根据元数据信息找到查询的数据所在的HregionServer,zookeeper->regionServer(每一个root表只对应一个region,不能切分,通过root表可以读取到.META.表的元数据信息)
  4. 根据root表信息找到.META.表(.META.可以存储在多个region中,访问的是存储业务数据的元数据信息)
  5. 根据.META.表元数据信息找到region
  6. 数据返回到client
  • HregionServer流程
  1. 客户端会通过region直接去Memstore(内存)中读取数据
  2. 如果数据存在,会直接返回数据
  3. 当Memstore中找不到时blockcache(与Memstore同属于一块内存的逻辑区域,Memstore会实时把数据落到blockcache中,blockcache再把数据落到Hfile中)
  4. 当blockcache中找不到是,将会再HDFS中查找Hfile
  5. 缓存返回(通过blockcache,Memstore层层返回)
  6. Memstore将数据返回客户端(Memstore负责写入数据的缓存,blockcache负责读取数据的缓存,读写分离)