博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记-HBase in Action-第一部分 HBase fundamentals
阅读量:4984 次
发布时间:2019-06-12

本文共 2464 字,大约阅读时间需要 8 分钟。

新项目准备上HBase。HBase眼下由组里某牛负责。本着学会
使用
HBase的目标,先阅读下HBase in Action,一共十章组织成三部分,须要学习的内容包含HBase基本实现原理,用法,Schema设计原则和实战等。借用Michael Stack(HBase Chair)的话,“At a highlevel, HBase is like theatomic bomb. Its basic operation can be explained onthe back of a napkin over adrink (or two). Its deployment is another matter。(HBase像原子弹一样,它的基本操作能够写在一张餐巾纸的背面,可是它的部署就是还有一回事了。)

首先,HBase能够理解为Database on Hadoop,即山寨版的BigTable on GFS,具备下面几个主要特点:Key-Value分布式存储、面向列、实时随机读写。

基本概念&基本操作

下面是HBase的一些基本术语:

  1. Table:和关系型数据库一样,HBase数据以表的形式组织,表也由行和列组成。
  2. Column families:列族,即列分组,每一个列都属于一个列族。
  3. Row key:即每行数据的主键,无数据类型,HBase依照rowkey字节序顺序存储记录。
  4. Version:以时间戳表示的版本号号。默认每一个数据保留三个版本号,依照版本号号降序存储。
  5. Cell:表中的基本存储单元,由{rowkey, column families,column, version} 唯一确定,无数据类型,和row key一样都是字节数组。

基本操作包含5种:

Put(存储或者改动单行记录)/Get(读取单行记录,能够指定列族、列等)/Delete(删除单行记录,因为底层存储不可变,实现为加入墓碑记录)/Scan(返回行集合,能够指定扫描起止row key,过滤条件等)/Increment(添加某个单元值,原子操作)

数据模型

逻辑上,能够把HBase数据理解成有序Map。当中记录行依照row key升序存储,version降序存储。

Map
>>>

物理上(Region及HDFS细节下一节介绍),数据存储在HFile中,HFile仅仅包括某一个列族数据,而每个列族可能使用多个HFile。HFile使用列式存储。下图是HFile存储示意图,TheRealMT为row key,info为列族,email/name/password为列名,后两列为时间戳版本cell值(注:因为使用列式存储,HBase不用存储null值)。

        

数据读写过程

HBase数据同一时候写入到WAL(wrete-ahead log)和MemStore。每一个列族都有一个MemStore缓存区,用于提高写入性能,数据定期同步到HFile;WAL用于保障可靠性,出问题时,假设MemStore数据没有同步到HFile中,能够从WAL回放恢复(WAL日志顺序写入,写入性能尚可)。

数据读取使用BlockCache/MemStore提高性能。

HBase与HDFS

理论上,HBase能执行在各种分布式文件系统之上,实际上,HBase和HDFS紧耦合在一起。HDFS提供可扩展性和容错性。HBase表能够存储数十亿行数据,每行能够包括成百上千个字段。Table随着记录数不断添加变大,会逐渐分裂成多个Region。Region由RegionServer进行管理。借用一张的图。在实际生产环境中,RegionServer能够部署在HDFS DataNode节点上,节省网络IO。

从高层次来讲,通过HDFS引入统一命名空间,也保障了HBase的可用性,当某台RegionServer挂掉,其它ReginServer能够读取HDFS上数据。

Region分裂带来一个新问题:怎么查找特定Region。HBase通过两张特殊表-ROOT-和.META来实现。当中-ROOT-表记录了.META表Region信息,-ROOT-表仅仅有一个Region,其位置记录在ZooKeeper上。.META表记录用户表Region信息,能够有多个Region。能够把查找Region看做是在高度为3的B+Tree树中查找叶子节点的过程。

HBase与MapReduce

HBase主要用于低延迟訪问场景,假设应用强调吞吐量,不关心延迟时间,能够考虑使用MapReduce进行数据处理。TableMapper和TableReduer封装了訪问HBase数据的细节。Map和Reduce方法签名例如以下:

protected void map(ImmutableBytesWritable rowkey,Resultresult,Context context);protected void reduce(ImmutableBytesWritablerowkey,Iterable
values,Context context);

还须要使用TableMapReduceUtil帮助类初始化Job,指定HBase表名等參数。

TableMapReduceUtil.initTableMapperJob(  "twits",  scan,  Map.class,  ImmutableBytesWritable.class,  Result.class,  job);
另外,因为HBase天然是Key-Value存储,能够把它看做是一个分布式Map,利用HBase随机訪问高性能特性,使用Get和小范围的Scan操作帮助实现Map-Join,例如以下图所看到的:

 

转载于:https://www.cnblogs.com/gcczhongduan/p/4058738.html

你可能感兴趣的文章
一个接口能否继承另一个接口?一个抽象类能否实现一个接口?
查看>>
C#基础知识系列八(const和readonly关键字)
查看>>
[转]Axis2创建WebService实例
查看>>
算法: 最长回文子串 二层动态规划
查看>>
硬件综合实习——51单片机四则运算带括号计算器
查看>>
cmake写完了,下一步开始清除编译错误
查看>>
Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...
查看>>
行列转换总结
查看>>
wikioi--1044 拦截导弹
查看>>
Python 中的类与对象 初认识
查看>>
hdu 1828 Picture(线段树)
查看>>
HTML5移动开发中的meta与link
查看>>
url添加时间戳
查看>>
JS/javaScript 获取div内容
查看>>
简单易懂的程序语言入门小册子(6):基于文本替换的解释器,引入continuation...
查看>>
BestCoder24 1001.Sum Sum Sum(hdu 5150) 解题报告
查看>>
3、实例管理
查看>>
高斯消元模板,整数(数学)
查看>>
bzoj4690: Never Wait for Weights
查看>>
20172324 2017-2018《程序设计与数据结构》第十一周学习总结
查看>>