HBase

一、HBase介绍

1、定义

Apache HBase是Hadoop数据库,一个分布式的、可伸缩的大型数据存储。

2、使用场景

你需要随机的,实时的读/写访问你的大数据。这个项目的目标是托管非常大的表——几十亿行的X百万列——在商品硬件的集群之上。

3、特性

(1)线性、可扩展

(2)严格的一致性读写

(3)自动、可配置的表的分片处理

(4)支持自动处理的容灾

(5)HBase和MapReduce可以集成处理

(6)轻松的使用JavaAPI处理

(7)块缓存,块的过滤器支持实时查询

(8)查询的时候支持谓词下推

(9)支持Thrift gateway

(10)shell

(11)支持通过Hadoop度量子系统将指标导出到文件或Ganglia;或者可以通过JMX

4、和RDBMS的区别

(1)数据量

传统关系型数据库,数据量达到一定程度之后,查询速度会骤降。

(2)分布式

大数据的套路

(3)动态列(6)

(4)数据类型

byte数组

(5)数据操作方式

表与表之间的耦合性不高-宽表。

(6)数据存储模式

列式存储——NULL不占用空间

(7)数据的维护

关系型数据库更新数据,只保存最新的值

HBase更新数据,可以设置版本数,保存x版本的值。

(8)数据的伸缩性

机器加减,HBase很容易处理。

5、help命令说明

(1)没有database的说法,换成namespace的概念,在namespace下创建表。

(2)get、scan

(3)put

(4)truncate

(5)tools

6、表结构

Table -- Rows

                      -- rowkey                                        => primary key(mysql)

                      -- timestamp                                   => 时间戳,和value绑定在一起

                      -- column family:col + version        => (:col => [value(cell)])  归属cf  col确定cell

                      -- version => 版本化,多个version追根溯源

                      -- cell===> rk + version +cf:col

7、配置

动态配置(不用停机)

配置文件配置(停集群)

8、架构

(1)Client:

请求ZK[读/写]从MetaTable拿结果

客户端操作,java client api

rest api 

thrift api 

hadoop mapreduce

(2)HMaster——作业,管理所有的HRegionServer,有HA

Region assignment:启动时的分配;负载之后的重新分配

监控RegionServer状态、与ZK进行消息的通知

DDL:表的处理(create,delete table)

(3)HRegionServer——跟客户端通讯、读写表

管理Regions => 划分row key(rowkey range:start key -> end key) 

datanode:regionserver = 1:1 

A HRegionServer 大概需要 1000Regions 

WAL:预写日志,操作记录,用于故障后做数据恢复,on disk ,append to the of WAL

Block cache:读缓存,one memstore pre cf of pre a region ,in memory ,sorted

(4)Zookeeper——监控心跳是否正常,集群、进程是否存活

协处理器,做服务状态监控,并与HMaster发通知,通知active的HMaster,RegionServer有故障;

跟HA的HAmaster也有心跳通信。

(5)Hadoop(hdfs)

Hfiles:HBase数据在HDFS上的表现形式,k-v格式。速度快,b+tree,muti-layered index

(6)Meta Table

This META table is an HBase table that keeps a list of all regions in the system.

The .META. table is like a b tree.

The .META. table structure is as follows:

- Key: region start key,region id

- Values: RegionServer

(7)Read

Client -> ZK ->RegionServer -> region ->block cache -> memstore -> Hfile

(8)Write

Client -> ZK ->RegionServer ->WAL ->region ->memstore ->hfile

(9)Flush

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

(10)Compact: 

minor(小):选定几个要合并的hfile生成一个hfile

major(全):

所有的Hfiles生成一个hfile per cf

drops deleted or expired cells

建议晚上/业务低谷期做此操作;

将远程数据拉取到本地(做负载均衡或者说服务器故障)

(11)负载均衡:

split(出) vs compact(入)

9、调优

rowkey:

    1.+timestamp

    2.长度

    3.reverse(rk)

    4.hash/md5

    5.二级索引(phoenix、solr、es)

    6.pre-split

    7.salt_buckets vs pre-split

    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:副本机制

    22.mob:

 config:

    23.hbase config:

 表结构:

    24.version:

    25.ttl:

    26.压缩方式:

    ...

10、集群迁移:

1、DistCp迁移:停掉集群

2、Replication:动态备份

3、CopyTable迁移:在线,前提在目标集群中比较建立好同名表

4、EXPORT/IMPORT迁移:在线,前提在目标集群中比较建立好同名表

5、HBASE REST API方式迁移:

6、快照迁移:

7、将HDFS中hbase表文件落地再迁移:集群不通

 

11.Phoenix + HBase:

 二级索引:

 盐桶:

 

12.生产问题:

 RIT:

  hbck:修复(pending_close/open)

  删除ZK里的RIT节点相关的region,重启master

  -repair/fix 慎用

 

13.建议:

 运维建议:

    1.自动化部署:

  原生:shell

  CDH/HDP..

    2.监控指标:

    3.运维脚本:

    4.告警:

    5.共享资源(计算/存储):

    6.高峰期做好预估(压测):

    7.集群数据量预估:

    8.日志:

    9.调优:

 

 学习方式建议:

    官网:

    源码:

  选定版本

  了解技术结构以及特性

  从简入手,基础流程入手(读/写数据)

  找源码对照流程(找一些网上的内容 做辅助理解)

  看源码的测试用例

  日志信息

  把自己理解的流程变换图(自己画)

  写博客

  做分享

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值