HBase是什么

HBase这篇文档是按照学习过程总结的是简易版大纲,其中包含的知识点是需要时间和耐心详细琢磨的。

Hbase:

Apache HBase是一个开源的,分布式的,版本化的非关系数据库,来自谷歌的bigtable,

目标:托管非常大的表 - 数十亿行X百万列 - 在商品硬件集群上

11.7

hbase:

传统数据库

非关系型数据库

hbase权威指南第一章

传统行式数据库:

数据是按行存储的

没有索引的查询使用大量I/O

建立索引和物化视图需要花费大量时间和资源

面向查询的需求,数据库必须被大量膨胀才能满足性能要求

没有实时性只能处理已有问题

列式数据库:

数据是按列存储-每一列单独存放

数据即是索引

指访问查询涉及的列-大量降低系统I/O

每一列由一个线索来处理-查询的并发处理

数据类型一致,数据特征相似-高效压缩

 

HBase特点

大:一个表可以有数十亿行,上百万列;

无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;

面向列:面向列(族)的存储和权限控制,列(族)独立检索;

稀疏:对于空(null)的列,并不占用存储空间,表可以设计的非常稀疏;

数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳; 默认1个版本

数据类型单一:Hbase中的数据都是字符串,没有类型。

 

hbase中行与列(hbase权威指南第一章)

自动分区(hbase权威指南第一章)

HMaser(hbase权威指南第一章)

Hregionserver(hbase权威指南第一章)

列族的数量

 

-列族数量越少越好,即使同时有两个列族,查询的时候总是访问其中一个列族,不会同时访问。

-当一个表存在多个列族,当基数差距很大时,如A族有100万行,B族10亿行,A族可能会被分散到很多区域region,导致扫描A的效率降低。

-另外,多个列族在flush和compaction时,会造成很多I/O负担。

3)行键设计RowKey

a. 不要将RowKey设计成有序的形式,因为这样容易阻塞并行性,将负载压都在一台机器上

b. 定位一个单元,需要行,列名和时间戳。如果一个单元格的坐标很大,会占用内存,索引用光。所以,解决方法:列族名尽量小,如一个字符a,短属性名,而行键长度可读即可(行键长度对数据访问无太大影响),将数字字符转换为数字字节模式(节省空间)。

c. 倒序时间戳有助于找到找到最近版本值

d. 行键是在列族范围内有效,不同列族中可以拥有同样的行键

e. 行键永远不能变

 

 

11.9

HMaster:

管理meta表和其他表结构命名空间

管理Hregionserver

接收客户端请求

一般和namenode在一个节点上

ddl(创删表)

HRegionserver

管理region拆分合并

一般和datanode在同一节点上

memstore写入Hfile

表级操作(增删改查)

负载均衡(平均分配任务,让每个节点分配的任务量大致一样)

memstore()

默认存到内存memstore

memstore达到阀值把数据存到本地Hfile中

(将更新内容排序并以KeyValues形式存储到内存中,与将其存储在HFile中相同。每个列族只有一个Memstore,更新内容按照列族排序)

Hbase高可用

在hbase/conf目录下加一个文件backup-masters

里面存放主机列表(类似于配置regionserver)

 

创建表空间

老版本

Configuration conf = HBaseConfiguration.create();//加载配置文件

HBaseAdmin admin = new HBaseAdmin(conf);

NamespaceDescriptor ns = NamespaceDescriptor.create("t123").build();

admin.createNamespace(ns);

admin.close();

新版本

//加载配置文件

Configuration conf = HBaseConfiguration.create();

Connection conn = ConnectionFactory.createConnection(conf);

Admin admin = conn.getAdmin();

TableName tname = TableName.valueOf("wc");

HTableDescriptor htdesc = new HTableDescriptor(tname);

HColumnDescriptor hcdesc = new HColumnDescriptor("f1");

htdesc.addFamily(hcdesc);

admin.createTable(htdesc);

admin.close();

 

11.12

scan:

设置表级缓存

Scan的对象setCaching方法

filter:(让搜索条件更细致)

比较过滤器

专用过滤器

附加过滤器

自定义过滤器

 

hbase与mapreduce使用的类

inputformat-----》tableinputformat

recordreder-----》tablerecordreder

mapper     -----》tablemapper

reducer    -----》 tablereduer

 

11.13

hbase优化

垃圾回收优化

本地memstore分配缓冲区

压缩

拆分和合并的优化

负载均衡

合并region

客户端API最佳实践

禁止自动刷写

使用扫描缓存

限定扫描范围

块缓存

优化获取行键的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值