HBase笔记:学习要点

Google Bigtable的开源实现
列式数据库 按列存储,同一列族数据放在同一数据文件

mysql实现的是高可用集群,节点数据均相同,实现读写分离

Zookeeper:Google Chubby的开源实现,用于调度,协调分布式系统上的各种服务,例如确认消息是否准确到达,防止单点失效,处理负载均衡等。
Zookeeper应用场景:HBase,实现Namenode自动切换

Sqoop用于在Hadoop和关系型数据库之间交换数据,通过JDBC接口接入关系型数据库

Avro数据序列化工具,主要用到Thrift接口

Chukwa主要进行Hadoop日志采集和分析

Cassandra,一种NoSQL,Facebook开发的分布式Key-Value列式数据库,与HBase类似,只有顺序写,没有随机写,去中心化,没有像HBase一样的master,有利有弊

1:HBase预前准备
HBase 在内存建立一套机制,在内存里可读可写可修改,写回磁盘是整块整块的写,解决了HDFS不能修改的问题

merge合并方式删除旧的时间戳或是标记已删除的元素

访问表的行只有三种方式:
通过单个行健访问
给定行健范围访问
全表扫描

支持两种数据版本回收方式:
每个数据单元,只存储指定个数的最新版本
保存指定时间长度的版本(例如7天)

元素由行健,列族:限定符,时间戳唯一确定

元素以字节码形式存放,没有类型之分

每一个列族一个store,列族上的元素物理上存放在同一个地方,所以称为列式数据库,见图示(HBase物理模型)

表在行方向上,按照行健范围划分成若干个Region,随着数据增多,达到某个阈值,Region自动分裂成两个Region

一个RegionServer可管理多个Region实例,一个物理节点一般只跑一个HRegionServer

新数据进来先入MemStore,MenStore收集的数据足够多之后flush回硬盘,成为一个StoreFile。一定时间之后诸多小的StoreFile执行合并,扔掉过旧或删除等操作的行,成为一个StoreFile,每个StoreFile是一个HFile,一个HDFS里面的一个文件,一个HFile在HDFS里面又是分布式存储的。

HBase中有两张特殊的Table,-ROOT-和.META.
.META.记录用户表的Region信息,可以有多个Region
-ROOT-记录.META.表的Region信息,-ROOT-只有一个Region
Zookeeper中记录了-ROOT-表的location
一个三级查找最终可以定位一个Table的Region

2:HBase vs Oracle
索引不同造成行为差异
HBase适合大量插入同时又有读的情况
HBase的瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间
HBase很适合找按照时间排序top N的场景

行式数据库每次查询基本上都是返回若干个列,这种情况下I/O负荷与性能很糟糕,数据都存一起,取列得读所有行

列式数据库则不是以行存储,而是以列,所以I/O量会少很多
列式数据库的另一个好处:一般列内数据的相似度比较高,在数据压缩上会有很大的优势,不光节省硬盘空间,更重要的是大大减少了I/O

BigTable的LSM索引(类似B+树索引):log structure merge日志及数据,无论是插入还是删除都是添加一行,其实就等同于添加了日志信息

列族B+树索引,如果找的某一行多个列族都有值,则需在MemStore内存中查找多棵B+树分别找到对应的值,这也就是为什么HBase的表最好是稀疏的,每一行最好只有一个列族有值

你可能感兴趣的:(集群学习笔记,hbase,分布式存储,分布式,bigtable,nosql)