认识NoSQL

NoSQL:泛指非关系数据库(Not only SQL)
NoSQL两重要特征:使用硬盘和把随机存储器作为存储载体

NoSQL分类(按照存储格式)
1)键值(Key-Value)存储数据库
2)列存储数据库
3)文档型存储数据库
4)图形数据库

目前比较流行的NoSQL数据库有Casssandra,Lucene,Neo4J,MongoDB和HBase

HBase(Hadoop Database)概念

1)是一个高可靠,高性能,面向列,可伸缩的分布式数据库系统
2)它使用HDFS作为底层文件存储系统,在其上运行MapReduce批量处理数据,使用ZooKeeper作为协同服务组件
3)主要用于存储非结构化和半结构化的松散数据

HBase表的特点

1)大:一个表可以有十亿行,上百万列
2)无模式
3)面向列:面向列的存储和权限控制
4)稀疏:对于空(null)的列,不占用存储空间
5)数据多版本:每个单元中的数据可以有多个版本
6)数据类型单一:hbase中数据都是字符串,没有类型

HBase体系架构


1)Client

HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信

  • 管理类操作:Client与HMaster进行RPC
  • 数据读写类操作:Client与HRegionServer进行RPC

Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问

  • -ROOT-是系统内部表:ROOT里面存储了对应的.META地址和开始结束信息
  • .META.是系统内部表:.META.里面同样存储了对应的HRegion地址和开始结束信息。

2)Zookeeper

1)保证任何时候,集群中只有一个maser
2)存储所有Region的寻址入口
3)实时监控Region server的上线和下线信息,并实时通知master
4)存储hbase的schema和table的元数据
5)存储了root表的地址(更快查询到那张表有数据)和Hmaster的地址(确定有哪些Hmaster)

3)HMaster

1)为Region server分配region,记录region在哪台Hregion server上
2)新机器加入时,管理HRegion Server的负载均衡,调整Region分布
3)发现失效HRegion Server 并将其上的Regions迁移
4)管理用户对Table的增、删、改、查操作

4)HRegionServer

1)HRegion server 维护 region ,处理对这些 region 的 IO 请求,,向HDFS文件系统中读写数据
2)HRegion server 负责切分在运行过程中变得过大的 region

  • HRegionServer包含一个HLog部分和HRegion部分(多个HRegion)
  • HLog部分保存着用户操作hbase的日志。用户的操作都会先记录到HLog中,然后再保存到HRegion中
  • HRegion是存储的实际数据,它包含了多个HStore
  • HStore:每一个列族都会形成一个HStore,它由MemStore和多个HFile组成
  • MemStore驻留在内存中,当数据保存时,数据会先存储到MemStore中,然后根据用户设定的显式刷写或隐式刷写模式,将数据再保存到HFile中。默认的存储模式是隐式存储
  • HLog的作用
  • HFile负责的是实际数据的存储了,它是HBase中的最小单位

HBase数据模型(物理模型和逻辑模型)

HRegion

HRegionServer内部管理了一系列的HRegion对象

  • Hbase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据
  • Hregion由多个HStore组成

Hstore(包含Memstore和storefile两部分)

  • 每个HStore对应了table中的一个column family(CF)的存储
  • Hstore包括位于内存中的memstore和位于磁盘的storefile
  • MemStore:用户写人的数据先回放入memstore,当memstore满了以后会flush成一个storefile
  • StoreFiles:底层实现是Hfile,当storefile文件的数量增长到一定阀值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,将多个storefile合并成更大的storefile
  • 客户端检索数据,先在memstore找,找不到再找storefile

Hlog

在每次用户操作写入memstore的同时,也会写一份数据到HLog文件中,Hlog文件定期会滚动出新的,并删除旧的文件

Hfile

Hfile文件是不定长的,长度固定的只有两块

Row key(行键)

  • row key是用来检索记录的主键
  • 访问HBASE table中的行,只有三种方式:
    1)通过单个row key访问
    2)通过row key的range(正则)
    3)全表扫描

  • Row key行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes)
  • 在HBASE内部,row key保存为字节数组
  • 存储时,数据按照Row key的字典序(byte order)排序存储

Column Family(列族)

  • HBASE表中的每个列,都归属于某个列族
  • 列族是表的schema的一部分(而列不是),必须在使用表之前定义
  • 列名都以列族作为前缀。例如courses:history,courses:math都属于courses 这个列族。

TimeStamp(时间戳)

  • HBASE 中通过rowkey和columns确定的为一个存贮单元称为cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引
  • 时间戳的类型是64位整型
  • 时间戳可以由HBASE(在数据写入时自动 )赋值,也可以由客户显式赋值
  • 每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面
  • 为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,HBASE提供 了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段 时间内的版本

HBase学习1(hbase基础)的更多相关文章

  1. Hbase 学习(一) hbase配置文件同步

    最近在狂啃hadoop的书籍,这部<hbase:权威指南>就进入我的视野里面了,啃吧,因为是英文的书籍,有些个人理解不对的地方,欢迎各位拍砖. HDFS和Hbase配置同步 hbase的配 ...

  2. HBase 学习之一 <<HBase使用客户端API动态创建Hbase数据表并在Hbase下导出执行>>

    HBase使用客户端API动态创建Hbase数据表并在Hbase下导出执行                       ----首先感谢网络能够给我提供一个开放的学习平台,如果没有网上的技术爱好者提供 ...

  3. HBase学习——4.HBase过滤器

    1.过滤器 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filter可以根据簇.列.版本等更多的条件来对数据进行过滤,基于Hbase本身提 ...

  4. HBase学习笔记-HBase性能研究(1)

    使用Java API与HBase集群交互时,需要构建HTable对象,使用该对象提供的方法来进行插入/删除/查询等操作.要创建HTable对象,首先要创建一个带有HBase集群信息的配置对象Confi ...

  5. HBase学习——3.HBase表设计

    1.建表高级属性 建表过程中常用的shell命令 1.1 BLOOMFILTER 默认是 NONE 是否使用布隆过虑及使用何种方式,布隆过滤可以每列族单独启用 使用HColumnDescriptor. ...

  6. HBase学习笔记-基础(一)

    HBase版本:0.97 1.Get Gets实在Scan的基础上实现的. 2.联合查询(Join) HBase是否支持联合是一个网上常问问题.简单来说 : 不支持.至少不像传统RDBMS那样支持. ...

  7. HBase学习系列

    转自:http://www.aboutyun.com/thread-8391-1-1.html 问题导读: 1.hbase是什么? 2.hbase原理是什么? 3.hbase使用中会遇到什么问题? 4 ...

  8. HBase学习与实践

    Photo by bealach verse on Unsplash 参考书籍:<HBase 权威指南> -- Lars George著. 文章为个人从零开始学习记录,如有错误,还请不吝赐 ...

  9. HBase学习(四) 二级索引 rowkey设计

    HBase学习(四) 一.HBase的读写流程 画出架构 1.1 HBase读流程 Hbase读取数据的流程:1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接2)从zookeepe ...

随机推荐

  1. log4j日志文件乱码问题的解决方法

    近日在AIX上用log4j打印日志,出现乱码,经过努力解决问题. 症状:在默认语言非中文(或者说默认语言不支持中文的)的Windows.Linux.Unix上,用log4j打印日志,出现乱码,常见的就 ...

  2. Consul文档收藏

    英文:https://www.consul.io/intro/getting-started/install.html 中文:http://www.liangxiansen.cn/2017/04/06 ...

  3. dev 小问题列表

    1. MemoEdit > Lines Text lines are separated by line feed and carriage return characters ("\ ...

  4. Bootstrap Paginator分页插件+ajax

    Bootstrap Paginator分页插件下载地址: DownloadVisit Project in GitHub  Bootstrap分页插件属性介绍: http://www.cnblogs. ...

  5. js实现还可输入多少个字

    // 还可输入的字数个数 function checkLength(obj, len) { var maxChars = len; if (obj.value.length <= maxChar ...

  6. (4.16)sql server迁移DB文件(同一DB内)

    SQL Server 修改数据库物理文件存在位置 关键词:迁移文件,迁移temp库(这怎么迁移呢,用方法2即可,需要重启实例) 三种均需要离线: 一共分为(1)脱机迁移和(2)在线迁移. (1)迁移方 ...

  7. app开发公司排名哪家强?看App Annie给出的答案

    app开发公司排名哪家强?这个答案不好定义,我们从第三方权威平台数据来看吧.App Annie在<全球移动应用市场2016年回顾>报告中从全球每月活跃用户数.全球下载量.全球收入等几个维度 ...

  8. (转)fiddler使用简介--其三

    原文地址:http://www.cnblogs.com/miantest/p/7294620.html 我们知道Fiddler是位于客户端和服务器之间的代理,它能够记录客户端和服务器之间的所有 HTT ...

  9. iOS Healthkit 使用探索分析 🌛

    一 基本认知层面: HealthKit框架提供了一个结构,应用可以使用它来分享健康和健身数据.HealthKit管理从不同来源获得的数据,并根据用户的偏好设置,自动将不同来源的所有数据合并起来.应用还 ...

  10. JQuery Div层滚动条控制(模拟横向滚动条在最顶端显示)

    想让DIV层滚动条显示在顶端,CSS样式没找到相关属性,于是用2个DIV层来模拟做了一个.经测试IE浏览器上显示并不太美观!不知道是否还有更好的办法可以实现这功能呢?   aaaaaaasssssss ...