读书笔记-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的一些基本术语:
- Table:和关系型数据库一样,HBase数据以表的形式组织,表也由行和列组成。
- Column families:列族,即列分组,每一个列都属于一个列族。
- Row key:即每行数据的主键,无数据类型,HBase依照rowkey字节序顺序存储记录。
- Version:以时间戳表示的版本号号。默认每一个数据保留三个版本号,依照版本号号降序存储。
- 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,例如以下图所看到的:
读书笔记-HBase in Action-第一部分 HBase fundamentals的更多相关文章
- 1.HBase In Action 第一章-HBase简介(后续翻译中)
This chapter covers ■ The origins of Hadoop, HBase, and NoSQL ■ Common use cases for HBase ■ A basic ...
- 8.HBase In Action 第一章-HBase简介(1.2.2 捕获增量数据)
Data often trickles in and is added to an existing data store for further usage, such as analytics, ...
- 7.HBase In Action 第一章-HBase简介(1.2.1 典型的网络搜索问题:Bigtable的起原)
Search is the act of locating information you care about: for example, searching for pages in a text ...
- 6.HBase In Action 第一章-HBase简介(1.2 HBase的使用场景和成功案例)
Sometimes the best way to understand a software product is to look at how it's used. The kinds of pr ...
- 5.HBase In Action 第一章-HBase简介(1.1.3 HBase的兴起)
Pretend that you're working on an open source project for searching the web by crawling websites and ...
- 4.HBase In Action 第一章-HBase简介(1.1.2 数据创新)
As we now know, many prominent internet companies, most notably Google, Amazon, Yahoo!, and Facebook ...
- 3.HBase In Action 第一章-HBase简介(1.1.1 大数据你好呀)
Let's take a closer look at the term Big Data. To be honest, it's become something of a loaded term, ...
- 2.HBase In Action 第一章-HBase简介(1.1数据管理系统:快速学习)
Relational database systems have been around for a few decades and have been hugely successful in so ...
- unix环境高级编程-读书笔记与习题解答-第一篇
从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...
- [读书笔记]算法(Sedgewick著)·第一章(1)
到家放松放松之后就开始学习算法了,手里拿的是拿的是一本Robert Sedgewick的橙皮书<算法(第四版)>的.这本书与导论那本书的不同之处在于轻数学思想.重实现,也就是说这是一本很不 ...
随机推荐
- Hadoop基础(一)
Hadoop 基础知识 大数据已经火了很长很长时间了,从最开始是个公司都说自己公司的数据量很大,我们在搞大数据.到现在大数据真的已经非常成熟并且已经在逐渐的影响我们的生产生活.你可能听过支付宝的金融大 ...
- MVC系列学习(五)-传递数据 与 接收数据
1.控制器向视图传递数据 a.使用ViewData b.使用ViewBag c.使用Model 方式二: d.使用TempData 2.为什么在控制器中设置了一些属性,在视图中可以接受 3.Actio ...
- CentOS配置网卡以及克隆
上一篇的虚拟机安装完成后是可以上网的,但是ip地址是动态的,因为后期的需要,我们要配置下网卡,改成静态的IP地址 1.打开终端,输入 ifconfig 查看虚拟机中的网卡,发现时ens33而不是平常见 ...
- CorelDRAW快速制作抖音幻影图像效果
本教程讲解非常受欢迎的幻影图像效果(Anaglyph 3d),也叫图像分色立体效果,这其中我们要用到CorelDRAW中的透明度工具. 在开始实施Anaglyph效应之前,应当知道,Anaglyph ...
- zabbix--TCP状态监控
Tcp的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTAB:或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了攻击(例如SYN攻击),或是是time_wait值比 ...
- form:input 标签使用
<form:input path="suplier" htmlEscape="false" maxlength="50" id=&qu ...
- Win32 线程同步
Win32 线程同步 ## Win32线程同步 ### 1. 原子锁 ### 2. 临界区 {全局变量} CRITICAL_SECTION CS = {0}; // 定义并初始化临界区结构体变量 {线 ...
- uva 1587(Box UVA - 1587)
题目大意是给定6个数对,每个数对代表一个面的长和宽,判断这6个面是否能构成一个长方体. 这种题一看很复杂,但是只要不想多了实际上这就是一个水题... 首先说明一下判断的思路: 1.长方体是有三个对面的 ...
- PHP面试:说下什么是堆和堆排序?
堆是什么? 堆是基于树抽象数据类型的一种特殊的数据结构,用于许多算法和数据结构中.一个常见的例子就是优先队列,还有排序算法之一的堆排序.这篇文章我们将讨论堆的属性.不同类型的堆以及堆的常见操作.另外我 ...
- gitblit 搭建本地git服务器
本文主要描述gitblit搭建本地服务器