读书笔记-HBase in Action-第一部分 HBase fundamentals

新项目准备上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<RowKey, Map<ColumnFamily,Map<Column,Map<Version, Data>>>>

物理上(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<Put> 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,例如以下图所看到的:

时间: 2024-08-05 13:39:22

读书笔记-HBase in Action-第一部分 HBase fundamentals的相关文章

[读书笔记]算法(Sedgewick著)·第一章(1)

到家放松之后就开始学习算法了,手里拿的是拿的是一本Robert Sedgewick的橙皮书<算法(第四版)>的.这本书与导论那本书的不同之处在于轻数学思想.重实现,也就是说这是一本很不错的基础编程书.拿来做书中的练习还是蛮不错的,封面说有50种算法哦.思维导图如下,就且学且更新吧. 1.基本编程模型 第一章开始讲述用程序实现算法的优点:程序是对算法精确.优雅和完全的描述:可以通过运行程序来学习算法的各种性质:可以在应用程序中直接使用这些算法.还有这种学习算法的缺点缺点:分离思想和实现细节的困难

Android编程权威指南-读书笔记(二)-第一个小程序

Android编程权威指南-读书笔记(二) -第一个小程序 第一个例子介绍 应用名为GeoQuiz.用户通过单击True或False按钮来回答屏幕上的问题,GeoQuiz可即时反馈答案正确与否. 这个例子为我们简单介绍了几个基本组件的使用,以及基本的事件监听.让我们对基本组件的使用和事件的监听有一个基本的了解. 这篇文章分为2个部分,第一部分就是创建简单的UI.第二个部分就是对这个UI增加代码来响应一些操作. (注:所有不明白或者不理解的东西其实都不重要,后面都会有更详细的介绍.) 本章的目标

读书笔记 - javascript 高级程序设计 - 第一章 简介

第一章 简介   诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262  一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BOM 浏览器对象模型 ECMAScript的宿主环境 web浏览器 Node(服务器js平台) adobe flash js和as的关系 他们都实现了 ECMAScript 五大主流浏览器 IE Firefox Safari Chrome Opera dom介绍 它是针对xml但经过扩展用于html的应用

软件工程读书笔记(1)——第一章 概述

第一章 概述 一.软件工程概念的提出 1968年NATO(North Atlantic Treaty Organization,北大西洋公约组织)会议首次提出“软件工程”概念. 软件工程是为了解决开发成本效益和软件质量的问题而产生. 二.软件 1.什么是软件? <IEEE Standard Glossary of Software Engineering Terminology>给出了有关软件的如下定义: 软件是计算机程序.规程以及运行计算机系统可能需要的相关文档和数据.(软件≠程序) 根据软

读书笔记 -- 算法导论 (序言+第一部分)

什么是基础呢? 就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理等课程学好.对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能等要有深层次的掌握.要编写出优秀的代码同样要扎实的基础,如果数据结构和算法学的不好,怎么对程序的性能进行优化,怎样从类库中选择合适的数据结构.如果不了解操作系统,怎样能了解这些开发工具的原理,它们都是基于操作系统的.不了解汇编,编译原理,怎么知道程序运行时要多长时间要多少内存,就不能编出高效的代码.把面向对象,软

[读书笔记]算法(Sedgewick著)·第一章(2)

接着上一篇,mindmap更新如下内容. 3.背包.队列和栈 这节主要讲述了这三种数据结构(Bag.Queue.Stack)的API.实现以及链表.Queue和Stack还含有删除元素的方法.并引出了泛型,也就是可以用它来存储任何类型的数据.在API中,类class Bag<Item> implements Iterable<Item>的表示就将Item定义为一个类型参数.在创建数据结构时,我们就可以用任何类型代替Item了.有了泛型,我们就只需要一份API来处理所有类型的数据了.

读书笔记:Speech enhancement: theory and practice

选读<Speech enhancement: theory and practice>.主要是自己的读书笔记. Chapter 1:Introduction 第一章~第四章,主要介绍语音增强算法的基础知识; Chapter 2:Discrete-Time Signal Processing and Short-Time fourier Analysis Chapter 3:Speech Production and Perception Chapter 4:Noise Compensation

读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design

本章以山寨版Twitter为例介绍HBase Schema设计模式.广义的HBase Schema设计不只包括创建表时指定项,还应该综合考虑Column families/Column qualifier/Cell value/Versions/Rowkey等相关内容. 灵活的Schema&简单的存储视图 Schema设计和数据存储及访问模式关系密切,先回顾下HBase数据模型,有几个要点: 被索引的部分包括Row Key+Col Fam+Col Qual+Time Stamp 由于HBase的

读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Java客户端

HBase Shell HBase shell使用起来最方便,进入HBase shell控制台即可使用. $ $HBASE_HOME/bin/hbase shell 常见操作有create(创建表)/put(插入或更新数据)/get(根据rowkey查询)/scan(范围查询)/delete(删除列)/deleteAll(根据rowkey删除整行数据)/disable&drop(禁用表之后再删除). 基于数据库的项目,往往会在某个目录下存储专门的sql脚本,记录每次迭代数据库变更:同理,HBas

HBase in Action前三章笔记

近期接触HBase,看了HBase In Action的英文版.開始认为还行,做了些笔记.可是兴许看下去,越来越感觉到实战这本书比較偏使用上的细节,对于HBase的具体设计涉及得很少.把前三章的一些笔记帖一下.后面几章内容不打算整理了.并非说书内容不好. key-value存储.强一致性,多个RegionServer节点对client端是不暴露细节的 使用场景:典型的web-search, capture incremental data, ad. click stream, content s