本质:分布式、面向的开源数据库,Apache的Hadoop子项目。
适用于:非结构化数据存储的数据库

技术特点

  1. 大表
  2. 面向列:面向列族的存储和权限控制,列族独立检索
  3. 稀疏:对于为空(null)的列,并不占用存储空间
  4. 不基于MR、Yarn,而是基于自身的文件索引
  5. 无Join功能,做不了分析类处理,通常增删改查
  6. RS(Rgion Server),决定集群处理能力,支持水平扩展
  7. 用于实时读写场景,Online场景

适用场景

表数据量大(至少亿级别以上)、数据append业务、无跨行跨表事务要求、写入量大(每天千万级别以上)、读取场景简单不经常变化,查询场景固化、无正序,逆序的排序要求、不适合全量读取、RowKey不可发生变化

不适合场景
多维度索引,无二级索引
需要事务
分析类,即逻辑复杂查询
不适合Count操作
不适合多条件查询case

架构

Master 服务器:负责维护表结构信息

负责协调工作,如建表、删表、移动Region、合并等

RegionServer 服务器:负责数据的存储,直接存储在 HadoopHDFS

存放 Region 的容器,相当于服务器上的服务

【 WAL(Write-Ahead Log:预写日志) | Region | Block Cache】

通常Hbase集群有 一个 Master多个 RegionServer

client ---> ZooKeeper ----管理--> RegionServer ---> HDFS

Region 一段数据集合

  1. 不能跨服务器
  2. 不足以存储所有数据时,HBase会自动拆分
  3. HBase进行负责均衡时,Region可能会在RegionServer之间移动
  4. 基于HDFS

【 store(对应一个列族)【 MemStore(数据排序) | HFile】】

【 HFile:【 Data | Data Index 】】

【 Data:【 BlockType | Cell(Key Value) 】】

【 Cell:【 Key Len | Value Len | TimeStamp | Key Type | Value 】】

RowKey

作用:索引、为组合性 最基本的存储单元是“列”

访问HBase Table中的行,只有三种方式:

  1. 通过单个 row key 访问
  2. 通过 row key 的 range
  3. 全表扫描

row key 可以是任意字符串,在hbase内部, row key 保存为字节数组,存储时,数据按照 row key 的字典顺序排序存储。

Columns Family

HBase 表中每个列,都归属于某个列族,相同列族的列 HBase 会尽量放在同一台机器上
列族表的 schema一部分,**而列不是**,必须在使用表之前定义。
列名都以列族作为前缀:courses:history
访问控制、磁盘和内存的使用统计都是在列族层面进行的

create 'tableName', 'cf', 'cfc' ...  创建多列族的表,通常一个表只有一个列族
flush 和 compaction 触发的基本单元都是 region 级别。

Time Stamp

HBase 中通常 row 和 columns 组成一个存储单元 cell
每个 cell 都保存同一份数据的多个版本按照时间**倒序排序**。版本通过时间戳(类型为64位整型)来索引。

时间戳赋值
数据写入时自动赋值,此时时间为毫秒级当前系统时间
客户手动赋值,需确保时间戳的唯一性

cell

由{row key, column(= +

cell中的数据是没有类型的,全部是字节码形式存贮

协处理器

Observer

EndPoint

Hadoop

Apache Hadoop
CDH(优化组件兼容和交互接口、简化安装配置、增加Cloudera兼容特性)
CDH5.1 目前最稳定版本,内核Hadoop 2.3 主流版本

CDH5下载地址:
CM Cdh
cloudera-manager-installer.bin

Storm流计算从入门到精通之技术篇
Cdh4 实战课程

配置 NTP 服务器

NetWork Time Protocol 网络时间协议

虚拟机启动状态下添加硬盘

1. fdisk -l 列出当前系统中所有硬盘设备及其分区的信息。
2. mkfs命令、mkswap命令

CAP

Consistency 一致性

更新操作成功并返回客户端完成后,分布式系统所有的节点在同一时间的数据完全一致

Availability 可用性

读写操作都能成功

Partition tolerance 分区容错性

出现网络故障导致分布式节点间不能通信时,系统能否继续服务