HBase核心知识点总结_第1页
HBase核心知识点总结_第2页
HBase核心知识点总结_第3页
HBase核心知识点总结_第4页
HBase核心知识点总结_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HBase核心知识点总结

一、HBase介绍

1、基本概念

HBase是一种Hadoop数据库,经常被描述为一种稀疏的,分

布式的,持久化的,多维有序映射,它基于行键、列键和时

间戳建立索引,是一个可以随机访问的存储和检索数据的平

台。HBase不限制存储的数据的种类,允许动态的、灵活的

数据模型,不用SQL语言,也不强调数据之间的关系。HBase

被设计成在一个服务器集群上运行,可以相应地横向扩展。

2、HBase使用场景和成功案例

・互联网搜索问题:爬虫收集网页,存储到BigTable里,M

apReduce计算作业扫描全表生成搜索索引,从BigTable

中查询搜索结果,展示给用户。

・抓取增量数据:例如,抓取监控指标,抓取用户交互数据,

遥测技术,定向投放广告等

・内容服务

・信息交互

3、HBaseShell命令行交互:

启动Shell$hbaseshell

列出所有的表hbase>list

创建名为mytable的表,含有一个列族hbhbase>create

'mytable','hb'

在'mytable'表的'first'行中的'hb:data'列对应的数

据单元中插入字节数组(helloHBase,

hbase>put'mytable','first','hb:data','hello

HBase'

读取mytable表'first'行的内容hbase>get'mytable'

'first'

读取mytable表所有的内容hbase>scanmytable'

二、入门

1、API

和数据操作有关的HBaseAPI有5个,分别是Get(读),

Put(写),Delete(删),Scan(扫描)和Increment(列值递增)

2、操作表

首先要创建一个configuration对象

Configurationconf=HBaseConfiguration.create();

使用eclipse时的话还必须将配置文件添加进来。

conf.addResource(newPath("E:\\share\\hbase-site

.xml"));

conf.addResource(newPathC'E:\\share\\core-site.

xml"));

conf.addResource(newPath("E:\\share\\hdfs-site.x

ml"));

使用连接池创建一张表。

HTablePoolpool=newHTablePool(conf,1);

HTablelnterfaceusersTable=

pool.getTable("users");

3、写操作

用来存储数据的命令是put,往表里存储数据,需要创

建Put实例。并制定要加入的行

Putput=newPut(byte[]row);

Put的add方法用来添加数据,分别设定列族,限定符

以及单元格的指

put.add(byte[]family,byte[]qualifier,byte[]

value);

最后提交命令给表

usersTable.put(put);

usersTable.close();

修改数据,只需重新提交一次最新的数据即可。

HBase写操作的工作机制:

WmegoesIoIheE.ahMd

tog(WAL)aswelastfwinffwmory

writeboltercaMtheMemSiOfe

Ctontsdon、imeractdroctiywththe

undedymgHFiiMduringwmes.

MomSloregotofluaMdtodtskIoform

anewHTiteMedupwNhwrtM

HBase每次执行写操作都会写入两个地方:预写式日志

(write-aheadlog,也称HLog)和MemStore(写入缓冲区),

以保证数据持久化,只有当这两个地方的变化信息都写入并

确认后,才认为写动作完成。MemStore是内存里的写入缓冲

区,HBase中数据在永久写入硬盘之前在这里累积,当

MemStore填满后,其中的数据会刷写到硬盘,生成一个HFile。

4、读操作

创建一个Get命令实例,包含要查询的行

Getget=newGet(byte[]row);

执行addColumn()或addFamily()可以设置限制条件。

将get实例提交到表会返回一个包含数据的Result实例,

实例中包含行中所有列族的所有列。

Resultr=usersTable.get(get);

可以对result实例检索特定的值

byte[]b=r.getValue(byte[]family,byte[]

qualifier);

工作机制:

BlockCache用来保存从HFile中读入内存的频繁访问的数据,

避免硬盘读,每个列族都有自己的BlockCache。从HBase中

读出一行,首先会检查MemStore等待修改的队列,然后检

查BlockCache看包含该行的Block是否最近被访问过,最

后访问硬盘上的对应HFileo

5、删除操作

创建一个Delete实例,指定要删除的行。

Deletedelete=newDelete(byte[]row);

可以通过deleteFamily()和deleteColumn()方法指定删除

行的一部分。

6表扫描操作

Scanscan=newScan()可以指定起始行和结束行。

setStartRow(),setStopRowO,setFilter()方法可以用

来限制返回的数据。

addColumn()和addFamily()方法还可以指定列和列族。

HBase模式的数据模型包括:

表:HBase用表来组织数据。

行:在表里,数据按行存储,行由行键唯一标识。行键没有

数据类型,为字节数组byte口。

列族:行里的数据按照列族分组,列族必须事先定义并且不

轻易修改。表中每行拥有相同的列族。

列限定符:列族里的数据通过列限定符或列来定位,列限定

符不必事先定义。

单元:存储在单元里的数据称为单元值,值是字节数组。单

元由行键,列族或列限定符一起确定。

时间版本:单元值有时间版本,是一个long类型。

一个HBase数据坐标的例子:

typicallyrepresentedbythetwnestamp

dwhentheyworeinsertedintothetable

(ts2>ts1)

Rgure2.4ThecoordinatesusedtoidentifydatainanHBasetablearerowkey,columnfamily,

columnqualifier,andversion.

HBase可以看做是一个键值数据库。HBase的设计是面向半

结构化数据的,数据记录可能包含不一致的列,不确定大小

等。

三、分布式的HBase、HDFS和MapReduce

1、分布式模式的HBase

HBase将表会切分成小的数据单位叫region,分配到多台服

务器。托管region的服务器叫做RegionServero一般情况

下,RgionServer和HDFSDataNode并列配置在同一物理硬

件上,RegionServer本质上是HDFS客户端,在上面存储访

问数据,HMaster分配region给RegionServer,每个

RegionServer托管多个region。

HBase中的两个特殊的表,-ROOT-和.META.,用来查找各种

表的region位置在哪。-ROOT-指向.META.表的region,.META.

表指向托管待查找的region的RegionServer0

一次客户端查找过程的3层分布式B+树如下图:

HBase顶层结构图:

>Zcokeeper♦—HMaster

(MemStofe)||Store(MemG词

fl11)tUlTl1】…DFSGienlDFSClient

rapni

OataNode-y;zOdtaNctte"□画曲□加口S

zookeeper负责跟踪region服务器,保存rootregion的地

址。

Client负责与zookeeper子集群以及HRegionServer联系。

HMaster负责在启动HBase时,把所有的region分配到每个

HRegionServer±,也包括-ROOT-和.META.表。

HRegionServer负责打开region,并创建对应的HRegion实

例。HRegion被打开后,它为每个表的HColumnFamily创建

一个Store实例。每个Store实例包含一个或多个StoreFile

实例,它们是实际数据存储文件HFile的轻量级封装。每个

Store有其对应的一个MemStore,一个HRegionServer共享

一个HLog实例。

一次基本的流程:

a、客户端通过zookeeper获取含有-ROOT-的region服务

器名。

b、通过含有-ROOT-的region服务器查询含有.META.表中

对应的region服务器名。

c、查询.META.服务器获取客户端查询的行键数据所在的

region服务器名。

d、通过行键数据所在的region服务器获取数据。

HFile结构图:

Trailer有指向其他块的指针,Index块记录Data和Meta

块的偏移量,Data和Meta块存储数据。默认大小是64KB。

每个块包含一个Magic头部和一定数量的序列化的KeyValue

实例。

KeyValue格式:

该结构以两个分别表示键长度和值长度的定长数字开始,键

包含了行键,列族名和列限定符,时间戳等。

预写日志WAL:

每次更新都会写入日志,只有写入成功才会通知客户端操作

成功,然后服务器可以按需自由地批量处理或聚合内存中的

数据。

编辑流在memstore和WAL之间分流的过程:

处理过程:客户端通过RPC调用将KeyValue对象实例发送

到含有匹配region的HRegionServero接着这些实例被发送

到管理相应行的HRegion实例,数据被写入到WAL,然后被

放入到实际拥有记录的存储文件的MemStore中。当memstore

中的数据达到一定的大小以后,数据会异步地连续写入到文

件系统中,WAL能保证这一过程的数据不会丢失。

2、HBase和MapReduce

从MapReduce应用访问HBase有3种方式:

作业开始时可以用HBase作为数据源,作业结束时可以用

HBase接收数据,任务过程中用HBase共享资源。

・使用HBase作为数据源

阶段map

protectedvoidmap(ImmutableBytesWritable

rowkey,Resultresult,Contextcontext){

);

从HBase表中读取的作业以Lrowkey:scanresult]格式接收

键值对,对应的类型是ImmutableBytesWritable和

Resulto

创建实例扫描表中所有的行

Scanscan=newScan();

scan.addColumn(•,,);

接下来在MapReduce中使用Scan实例。

TabieMapReduceUti1,initTableMapperJob(tablename,sea

n,map.class,

输出键的类型.class,输出值的类型.class,job);

・使用HBase接收数据

reduce阶段

protectedvoidreduce(

ImmutableBytesWritable

rowkey,Iterable<put>values,Contextcontext){

};

把reducer填入到作业配置中,

TabieMapReduceUti1,initTableReducerJob(tablename,re

duce.class,job);

3、HBase实现可靠性和可用性

HDFS作为底层存储,为集群里的所有RegionServer提供单

一命名空间,一个RegionServer读写数据可以为其它所有

RegionServer读写。如果一个RegionServer出现故障,任

何其他RegionServer都可以从底层文件系统读取数据,基

于保存在HDFS里的HFile开始提供服务。接管这个

RegionServerz服务的region。

四、优化HBase

1、随机读密集型

优化方向:高效利用缓存和更好的索引

•增加缓存使用的堆的百分比,通过参数hfile.block.ca

che.size配置。

•减少MemStore占用的百分比,通过hbase.regionserver,

global,memstore.lowerLimit和hbase.regionserver,g

lobal.memstore.upperLimit来调节。

・使用更小的数据块,使索引的粒度更细。

・打开布隆过滤器,以减少为查找指定行的KeyValue对象

而读取的HFile的数量。

・设置激进缓存,可以提升随机读性能。

・关闭没有被用到随机读的列族,提升缓存命中率。

2、顺序读密集型

优化方向:减少使用缓存。

・增大数据块的大小,使每次硬盘寻道时间取出的数据更多。

・设置较高的扫描器缓存值,以便在执行大规模顺序读时每

次RPC请求扫描器可以取回更多行。参数hbase.clien

t.scanner,caching定义了在扫描器上调用next方法时

取回的行的数量。

・关闭数据块的缓存,避免翻腾缓存的次数太多。通过Sea

n.setCacheBlocks(false)设置。

・关闭

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论