Hbase简介

1.HBase定义:
    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. 

2.特性:
    1.Linear and modular scalability.
    2.Strictly consistent reads and writes.
    3.Automatic and configurable sharding of tables
    4.Automatic failover support between RegionServers.
    5.Convenient base classes for backing Hadoop MapReduce jobs with Apache HBase tables.
    6.Easy to use Java API for client access.
    7.Block cache and Bloom Filters for real-time queries.
    8.Query predicate push down via server side Filters
    9.Thrift gateway and a REST-ful Web service that supports XML, Protobuf, and binary data encoding options
    10.Extensible jruby-based (JIRB) shell
    11.Support for exporting metrics via the Hadoop metrics subsystem to files or Ganglia; or via JMX

3.与RDBMS的区别点:
    数据量
    分布式

    数据类型:HBase只有简单的字符类型,所有的类型都是交由用户自己处理,它只保存字符串。而关系数据库有丰富的类型和存储方式。
    数据操作方式:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,而传统数据库通常有各式各样的函数和连接操作。  
    数据存储模式:HBase是基于列存储的,每个列族都由几个文件保存,不同的列族的文件时分离的。而传统的关系型数据库是基于表格结构和行模式保存的。
    数据的维护:HBase的更新操作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改。
    数据的伸缩性:Hbase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松增加或减少硬件的数量,并且对错误的兼容性比较高。而传统数据库通常需要增加中间层才能实现类似的功能。

Hbase的优点 
1 列的可以动态增加,并且列为空就不存储数据,节省存储空间.
2 Hbase自动切分数据,使得数据存储自动具有水平scalability.
3 Hbase可以提供高并发读写操作的支持
Hbase的缺点:
1 不能支持条件查询,只支持按照Row key来查询.
2 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉.

HBase常用命令

4.HBase表结构:表由行组成,行由rowkey,timestamp,cf:col组成
    Table --> Rows
         -- rowkey => 类似于primary key(mysql) 
         -- timestamp => 和value绑定在一起的 版本数据生成的时间
         -- cf => (:col => [value(cell)])不建议生成太多列族,当数据合并,压缩时会导致多余的数据一起做该操作。
         -- :col => 归属cf  col确定cell
         -- version => 版本化,存在多个=>便于追根溯源
         -- cell => rk + version + cf:col         

5.HBase架构:参考地址[https://mapr.com/blog/in-depth-look-hbase-architecture/]

    Client:第一次请求[读/写]拿结果
    Read:
        Client -> ZK -> RS -> reigon -> block cache -> memstore -> hfile
    Write:
        Client -> ZK -> RS -> wal -> reigon -> memstore -> hfile

          客户端从zookeeper获取承载meta表的Region server信息
          然后客户端从meta表的Region server查询元数据信息获取想要访问的行所对应的Region server,并缓存该信息和meta表的位置
          最后会去行对应的Region server获取行。
          后续的读写将会直接从客户端的缓存进行检索,不用再查询meta表。除非Region server的转移和更改,才会再次查询并更新缓存
     
       客户端操作
        java client app
        rest api
        thrift api
        hadoop mapreduce 

    HMaster[管理所有的RegionServer, 有HA]:
        Region assignment: 
        启动时的分配;负载之后的重新分配
        监控RS的状态,与ZK进行消息的通知
        DDL (create, delete tables) operations:表格的处理
     

    HRegionServer(RS)[reads/writes]:一个节点对应一个RS
        Regions:[rowkey divided horizontally]   RS中有多个Region
        => RK(Rowkey range:[start key -> end key])
        RS负责以下事项:
        预分区
        一个RS可以为1000个Region提供服务
        WAL:预写日志,操作记录,用于故障后做数据恢复, on disk, append to the end of wal 
        Block Cache:读缓存
        Memstore:写缓存,   one memstore per cf of per a region,in memeory,sorted
        Hfiles:HBase数据在Hdfs上的表现形式,kv,顺序写,速度非常快,类似于B+tree,multi-layered index
    

    Zookeeper:
        协处理器
        服务状态的监控,并给master发通知
        与Master和RS通信,进行故障监控(心跳机制),消息发送

    Hadoop(hdfs):
        Hfile:KeyValue的实例或ceil的内容
           由内存中写进来的数据最终flush到磁盘的时候,生成了Hfile文件存储到Hdfs。

    Flush:
       Memstore达到一定量时进行flush操作,
       并且会记录一个sequence id(记录目前flsuh的位置,是下次flush的起始点)

    Read amplification:
       many HFiles per MemStore, a read, multiple files may have to be examined
    Write amplification:
       major compact时产生的

    Compact: 
       minor(小):选定几个要合并的hfile生成一个hfile
       major(全):
        所有的Hfiles生成一个hfile(把每个列族的Hfile合并成一个)
        在合并的同时,drops deleted or expired cells
       该操作对于磁盘IO和网络的负担特别大,建议晚上/业务低谷期做此操作;
       将远程数据拉取到本地(做负载均衡或者说服务器故障)

    负载均衡:
       split(出) vs compact(入)

6.调优点:
    rowkey:
       1.+timestamp
       2.长度
       3.reverse(rk)
       4.hash/md5
       5.二级索引(phoenix、solr、es)
       6.pre-split :按特征分组(可能产生数据倾斜)
       7.salt_buckets :按编号分组
       8.salting
    api:
       9.put:单条操作一次 -> batch(并发)
       10.scan:单条操作一次 -> batch(并发)
       Bloom Filters
       ...
    架构内部:
       11.wal:若数据容许丢失,可以关闭
       12.flush:什么时候去做该操作
       13.memstore:size
       14.compact:minor vs major
       15.split:
       16.block cache:
       17.jvm:gc选择
       18.负载均衡:
       19.zk:retry 次数
       20.timeout:
       21.replica:副本机制(2.0之后出现的机制)
       22.mob:
    config:
       23.hbase config:
    表结构:
       24.version:
       25.ttl:
       26.压缩方式:
       ...

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值