Hbase概述

·  Hbase是构建在hdfs上的分布式列式存储系统

·  Hbase内部管理的文件全部存储在HDFS上面,

·  Hbase是基于google bigtable 模型开发的,典型的noSql-KeyValue数据库;

·  Hbase是hadoop生态系统中的重要一员,主要用于海量结构化数据的存储;

·  从逻辑上讲,Hbase将数据按照表,行和列进行存储

·  与hadoop一样,Hbase目标主要依靠横向扩展,通过不断的增加廉价的商

用服务器来增加计算能力和存储能力。

Hbase表的特点

·  大:一个表可以有数十亿,上百万列;

·  无模式:每行都有一个可排序的主键和任意多的列,列可以根据需求动态的增加,同一张表中不同的行包括了不同的列

·  面向列:面向列(族)的存储和权限控制,列(族)独立检索

·  稀疏:空(null并不占有存储空间)表可以设计的非常稀疏

·  数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本好自动

分配,是单元格插入的时间戳

·  数据类型单一:Hbase中的数据都是字符串.没有其他类型

HBase的数据模型

·  Hbase的逻辑视图

          

·  Hbase的基本概念

RowKey:是byte array 是表中每条记录的主键,方便快速查找,rowkey的设计非常重要。

Columns Family:列族,拥有一个名称String,包含一个或多个相关列

Column :属于某一个ColumnsFamily familyName:columnname 每条记录动态添加

VersionNumber :类型为long ,默认值是系统时间戳,可由用户自定义

Value(cell)byte array

·  Hbase的物理模型

每个colums family存储在HDFS上的一个单独文件中,空值不被保存

Key和version number 在每个column family 中均有一份

Hbase为每个值维护了多级索引

即<key,column family,column name ,timastamp>

·  Hbase的物理存储

Table中所有的行都按照rowkey的字典顺序排序

Table 在行的方向上被分为多个Region

Region 按大小分割的.每个表开始只有一个Region 随着数据的增多,Region不断增大,当增大到一个阀值的时候,Region就会等分成两个新的Region,之后会越来越多的Region

Region是Hbase中分布式存储和负载均衡的最小单元,不同Region被分配到不同的RegionServer上。

     

Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由多个Store组成,每个store保存着一个columns family ;每个Store又由一个memStore和多个0个或多个StoreFile组成,StoreFile 包含HFile; memStore存储在内存中,StoreFile存储在HDFS上

  

·  Hbase的架构及基本组件

    

基本组件说明

  • Client

包含访问Hbase的接口,并维护cache来加快hbase的访问 比如Region的位置信息

  • Master

为RegionServer 分配Region

负责RegionServer的负载均衡

发现失效的RegionServer并重新分配其上的Region

管理用户对table的增删改查

  • RegionServer

RegionServer 维护Region 处理对这些Region的IO请求

RegionServer 负责切分在运行过程中变大的Region

  • Zookeeper

通过选举,保证任何时候,集群当中只有一个Master.Master与RegionServer启动的时候会向Zookeeper注册

存储所有的Region的地址

实时监控RegionServer的上线和下线的信息。并适时通知给Master

存储着Hbase的schema和table元数据

默认情况下,Hbase管理Zookeeper实例,比如,启动或者停止Zookeeper

Zookeeper 的引入使得Master不再是单点故障

 Hbase的容错与恢复机制

从架构中我们可以发现,每一个RegionServer中有一个HLog文件, 在每次用户操作写入MemStore的同时,也会先向Hlog中写一份,Hlog文件会定期更新,并删除旧的文件(已经持久化到StoreFile中的数据)。当RegionServer宕机以后,Master会通过Zookeeper感知到,Master首先会处理遗留的Hlog文件,将其不同的Region的log数据进行拆分,分别放到相应的Region目录上,然后再将失效的Region重新分配到其他RegionServers上,RegionServer在load Region过程中,会发现有历史Hlog需要处理,因此会replay Hlog中的数据到MemStore中然后flush进StoreFile中 完成数据的恢复

Hbase的容错性

  • Master容错:zookeeper 重新选举一个Master
  • RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未进行心跳,Master将该RegionServer上的Region重新分配到RegionServer上,失效服务器上 预写 hlog有Master分割并发送给其他的RegionServer上
  • Zookeeper容错:Zookeeper是一个可靠的服务,一般配置3个或5个Zookeeper实例

Hbase的读写都要先经过先确定RegionServer的地址

过程大概如下:客户端先向ZK请求目标数据的地址

ZK保存了-ROOT-表的location,客户端根据location找到.META.表 其中包含了所有的用户空间Region列表,以及RegionSever地址,根据请求参数去表中查找,然后得到一个regionInfo列的数据  RegionServer

客户端根据RegionServer地址然后开始进行数据读和写

读:客户端发出读请求,客户端根据用户提供的表名,行键去客户端里的缓冲区进行查找,如果没有,就去Zookeeper进行查询,通过上面过程找到RegionServer地址和regioninfo信息,然后与RegionServer建立连接,将regioninfo列的数据提交给Regionserver

RegionServer接收到客户端的请求,然后创建一个RegionScanner对象,通过该对象定位到Region,然后Region创建StoreScanner,通过StoreScanner对定位到Store,Store创建一个MemStoreScanner对象,这个对象负责去MemStore中有没有数据,有就返回,没有就创建多个StoreFIleScanner对象,每个对象,负责去不同的HFile中查询数据。如果找到返回,找不到返回null

写:客户端发出写的请求,

当客户端进行put操作时,数据会自动保存到HRegion上,在HRegionServer中,找到对应要写入的HRegion之后,数据会写入到HLog中并同时写入到HStore的MemStore内存中,会在内存中按照行键对数据进行排序,当内存中的数据达到一定阈值后,会触发flush操作。Flush操作主要就是把MemStore内存中的数据写入到StoreFile中,当HDFS中的StoreFile个数达到一定的阈值后,会触发compact(合并)操作,将HDFS中所有的StoreFile合并成一个新的SotreFile,在合并的时候会按照行键进行排序,并且会进行版本合并和数据删除。当StoreFile通过不断的合并操作后,StoreFile文件会变得越来越大,当这个StoreFile达到一定的阈值后,会触发Split(切分)操作,同时把当前region拆分成两个新的region,原有的region会下线,新的两个region会被HMaster分配到相应的HRegionServer上,使得原来一个Region的压力得以分流到两个Region上,其实,HBase只是增加数据,更新和删除操作都是compact阶段做的,所以,客户端写入成功的标志是HLog和MemStore中都有数据。

先写HLog,但是如果显示MemSotre也是没问题的,因为MemStore的MVCC(多版本并发控制)不会向前滚动,这些变化在更新MVCC之前,Scan是无法看到的,所以在写入HLog之前,即使MemStore有数据,客户端也查询不到。

HBase的使用场景

  • 大数据两存储.大数据两高并发操作
  • 需要对数据随机读写操作
  • 读写访问都是非常简单的操作

HBase的优化

1.RowKey的设计

Hbase是通过RowKey进行检索的,系统通过找到某个RowKey(或者某个RowKey范围)所在的Region。然后将查询数据的请求由该Region获取数据 Hbase支持3中检索方式

A)通过单个Rowkey访问,按照某个RowKey键值进行get操作获取唯一一条记录

B)通过RowKey的range进行scan即通过设置startRowkey和endRowKey,可以按指定的条件获取一批记录

C)全表扫描,即直接扫描整张表中所有行的数

设计原则:

·长度原则:不要超过16个字节

原因:如果rowKey长度过长,会极大影响HFile的存储效率

Memstore将缓冲的部分数据加载到内存,如果rowKey过长,内存的有效利用率会降低,从而降低检索效率

·唯一原则:保证唯一性

·散列原则:项目中的设计,因为我们的查找数据的时候,是按照时间戳进行查找的,所以时间戳应该是rowkey的一部分,把rowkey的低位放时间字段,

高位是用CRC32算法将eventName+uuid+memberid压缩保证唯一性

HBase和Hive的整合

整合的原理:

Hive和hbase的整合的实现是利用两者本身对外的API接口互相进行通信,主要是依靠hive/lib下的hive-hbase-handler-0.9.0.jar 他负责通信

整合的好处:

Hive方便的提供了Hql类sql语句接口来简化mapreduce的使用,而Hbase提供了低延迟的数据库访问。两者相结合就可以用mapreduce来对hbase中的数据进行离线的计算和分析

缺点:性能的损失

1.创建一个指向Hbase的hive表

create external table event_logs(

row string,

pl string,

en string,

s_time string,

p_url string,

u_ud string,

u_sd string)

row format serde 'org.apache.hadoop.hive.hbase.HBaseSerDe'

stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

With serdeproperties('hbase.columns.mapping'=':key,info:pl,info:en,info:s_time,info:p_url,

info:u_ud,info:u_sd')

tblproperties('hbase.table.name'='event_logs');

**** 为了数据的安全,将表创建成外部表,防止删除表的时候将hbase表中的数据删除

2.添加数据的时候只能用insert....select....

3.两端的数据是同步的

4.Hive多列和hbase的多列出了行键和hive第一个字段不对应外,一一对应

5.Hive就是读取hbase的数据

HBase的过滤器

  

【NoSql】之Hbase的更多相关文章

  1. 图解Nosql(hbase)与传统数据库的区别

    图解Nosql(hbase)与传统数据库的区别http://www.aboutyun.com/thread-7804-1-1.html(出处: about云开发) 问题导读:1.nosql数据库能否删 ...

  2. NoSQL: Cassandra, HBase, RocksDB

    转自: http://www.linkedin.com/pulse/nosql-cassandra-hbase-rocksdb-siddharth-anand I've had the pleasur ...

  3. NoSQL之HBase

    http://www.cnblogs.com/LBSer/p/3330383.html 9月初淘宝飞芃做了一个关于HBase的分享,讲的激情飞扬,让听众收益匪浅,现做下简单总结. HBase是一个No ...

  4. BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览

    一.引言 时间到了2019年,数据库也发展到了一个新的拐点,有三个明显的趋势: 越来越多的数据库会做云原生(CloudNative),会不断利用新的硬件及云本身的优势打造CloudNative数据库, ...

  5. hbase实战——(1.1 nosql介绍)

    什么是nosql NoSQL(NoSQL = Not Only SQL),意思是不仅仅是SQL的扩展,一般指的是非关系型的数据库. 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0 ...

  6. NoSQL生态系统——hash分片和范围分片两种分片

    13.4 横向扩展带来性能提升 很多NoSQL系统都是基于键值模型的,因此其查询条件也基本上是基于键值的查询,基本不会有对整个数据进行查询的时候.由于基本上所有的查询操作都是基本键值形式的,因此分片通 ...

  7. Phoenix实现用SQL查询HBase

    博客已转移,请借一步说话,http://www.weixuehao.com/archives/111 HBase,一个NoSQL数据库,可存储大量非关系型数据. HBase,可以用HBase shel ...

  8. 数据库SQL,NoSQL之小感悟

    遇到1000万数据表 最近遇到一个问题,就是单表数据过的存储及查询问题.举个例子:1000万的数据存在一个表中,字段4-5个样子,日常 开发中难免要做过滤.排序.分页.如果把这几个放在一起即要过滤又要 ...

  9. HBase 笔记

    参考资料:HBase权威指南 一行由若干列组成,若干列又构成一个列族一个列族的所有列存储在同一个底层的存储文件里,这个文件叫HFile列族的数量有限制:一个列族里列的数量没限制谓词删除:例如允许用户只 ...

  10. 【转】Redis学习---NoSQL和SQL的区别及使用场景

    什么是NoSQL NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称,它具有非关系型.分布式.不提供ACID的数 ...

随机推荐

  1. ORACLE 导出表结构及备注

    https://blog.csdn.net/u013303551/article/details/52354230 SELECT t.table_name,       t.colUMN_NAME,  ...

  2. maven 编译插件指定jdk版本的两种方式

    第一种方式: <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration&g ...

  3. 在Linux上利用core dump和GDB调试

    段错误(segfault) "段错误"是程序试图操作不允许访问或试图访问的不允许内存的情况.可能导致段错误的原因主要有: 1.试图解引用空指针(你不允许访问内存地址0) 2.试图解 ...

  4. CSS 小结笔记之定位

    定位也是Css中一个非常强大的属性.定位主要是用来移动盒子,将其移动到我们想要的位置. 定位分为两部分 1.边偏移 left | right |top |bottom:偏移大小:(边偏移一般制定上就不 ...

  5. 分享:将WDCP中的PHP5.2 1.7升级到PHP 5.3的方法

    将wdcp中php 5.2.17升级到php 5.3方法: 1.首先下载wdcp php5.3升级脚本 wget http://down.wdlinux.cn/in/php_up53.sh 2.进行安 ...

  6. Configuration Manager 和内容位置(包源文件)

    Configuration Manager 2007 中的内容位置涉及 Configuration Manager 2007 客户端如何查找播发和软件更新的包源文件.当客户端需要查找内容时,它会将内容 ...

  7. 铁乐学python_day04-作业

    1,写代码,有如下列表,按照要求实现每一个功能 li = ['alex', 'wusir', 'eric', 'rain', 'alex'] 计算列表的长度并输出 print(len(li)) 答:结 ...

  8. AltiumDesigner元器件搜索中英文对照

    个人常用 扬声器 spearker 计量表(电流表,电压表) meter 变压器 Trans CT 肖特基二极管 D Schotty 额外补充 英文名称       中文释义 2N3904  NPN型 ...

  9. November 5th Week 45th Saturday 2016

    The longest day has an end. 最难过的日子也会有尽头. No, no, no, I can't see the end of such days, of course, if ...

  10. ZT eoe android4.2 Bluetooth记录01-结构和代码分布

    android4.2 Bluetooth记录01-结构和代码分布 作者:cnhua5更新于 08月21日访问(697)评论(2) 在android4.2中,Google更换了android的蓝牙协议栈 ...