一.HBase的基本简介

1.简介:

HBase是大数据领域的一个nosql的数据库, no sql 或者 not only sql 非关系型数据库. Hbase是参考谷歌的一篇论文: 2006年Google发表BigTable白皮, 2006年开始开发HBase, 2008 HBase成为了 Hadoop的子项目, 2010年HBase成为Apache顶级项目(扩展:hdfs是参考GFS,mapreduce是参考了mapreduce).HBase的官方http://hbase.apache.org. Doug Cutting 是Hadoop之父, 他是Lucene、Nutch 、Hadoop等项目的发起人. hbase的所有数据都是存储在hdfs上面的,提供实时读写的nosql的数据主要用于存储结构化和半结构化松散的数据,hbase数据查询能力比较脆弱 select * from user where id = 20 不支持sql语句查询数据 也不支持多表join操作,hbase当中所有存储的数据都是字节数组.

2.特点:

海量数据存储:它适合储存过亿级别的行数据,适合存储PB级别的数据 1PB= 1024TB 1TB= 1024GB
海量数据检索,可以在毫秒级别响应.
列式存储:列式储存的数据库( orc parquet也是列式储存,textFile sequenceFile 则是行式存储).
稀疏表:有些字段如果为空,那么就不占用磁盘空间.
易于扩展:hbase适合横向的扩展
高并发:支持同一时间多个访问请求并发的操作

3.HBase与hadoop的关系:

  1. hdfs是分布式文件存储系统 适合一次写入,多次读取的特点,适合存储大文件.
  2. HBase:提供表模型,数据都是存储在表里面,适合随机的读写操作使用的key,value对类型的数据,紧耦合hdfs,提供灵活的数据模型,使用表状存储,支持MapReduce,依赖HDFS,优化了多次读,以及多次写

4.RDBMS关系型与hbase非关系型对比

HBase不支持ACID,支持的仅仅是行事务,一条数据支持事务ACID操作.不支持join.
Atomicity原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样.
Consistency一致性:一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少.
Isolation隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统.
Durability持久性:在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
如果一个事物支持(Transaction)的数据库,则必须要有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求.

5.表模型

结构:
1.tableName 表名称
2.rowkey hbase当中的行键 一张表当中行键唯一,类似于mysql表当中的主键
3.columnFamily 列族 列族用于规划一些列
4.column 列 每一个列必然归属于某一个列族
5.timestamp 时间戳 每一条数据都会有一个时间戳
6.versionNum 版本号 每条数据都有版本号 ,数据发生变更,版本号增大

注意
1.创建一张hbase表,最少两个条件 表名和列族名
2.列名是我们在插入数据的时候动态指定的
3.rowkey也是我们在插入数据的时候动态指定的
4.timestame 每条数据都有一个时间戳 时间戳可以手动指定,也可以系统帮我们生成
5.ersionNum 版本号,系统自动维护

6.HBase的三个重要机制

1.flush机制:如果海量数据频繁的写入: memorystore频繁的将数据保存到storeFile
2.compact机制:
数据从StoreFile到HFile
将数据合并成为一个大的Hfile 合并数据的版本,清楚删除掉的数据
将我们的所有的数据进行版本的合并,清楚掉删除的数据
所有的数据都保存三个历史版本 如果一个数据超过了三个版本,在compact的时候,会将其他的版本清除掉,只保留最近的三个版本
清楚掉删除的数据:将标记为删除的数据,真正的给删除掉
3.split机制: 切开region 一旦某一个region达到10GB的阈值,就会进行region的分裂

7.Hbase和Hive的对比

hive:
1.数据仓库的工具,主要用于开发数据仓库一些功能,一些统计查询功能,建立了hive表,以及hive库,这些信息都存在,这些都是hive的元数据信息,都是存储在mysql里面了
2.hive映射的数据文件都是存储在hdfs上面了
3.hive可以将结构化的数据映射成为一张表
4.hive数据存储基于hdfs,数据的计算基于mapreduce
hbase
1.大数据领域里面的一个nosql的数据库
2.hbase的数据也是基于hdfs存储,天然的支持mr的程序
数据库与数据仓库
1.数据库主要用于捕获数据 ==》你往里面添加数据 有事务保证
2.数据仓库主要面向分析,数据一般都不会变动 ,数据仓库记录的数据都是已经发生的事实,事实是不能够改变的.

二.HBase的架构

HBase是一个主从架构,
主节点HMater:主要是用于管理HBase整个集群,以及分配region.
功能:
1.监控RegionServer
2.处理RegionServer故障转移
3.处理元数据的变更
4.处理region的分配或移除
5.在空闲时间进行数据的负载均衡
6.通过Zookeeper发布自己的位置给客户端
从节点HRegionServer:主要负责管理region,以及响应客户端的读写请求(一个HRegionServer里面包含了两部分Region和HLog)
功能:
1.负责存储HBase的实际数据
2 .处理分配给它的Region
3 .刷新缓存到HDFS
4 .维护HLog
5 .执行压缩
6 .负责处理Region分片

三.HBase的读写流程

client请求zk通过zk分布式一致性管理,经过HMaster的从节点HRegionServer,将数据写入HLog WAL(Write-Ahead logfile的文件中,它可以在系统出现故障的时候,数据可以通过这个日志文件重建.安全性提高储存在hdfs上)和region(Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。阀值是10g)中,在regin中有多个store(一个store对应一个列簇)块,一个store块里面有一个memerystore(就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对,内存储存128m),和多个storeFile(当memorystore的数据达到128m之后就会dump到磁盘中storeFile里面,保存为一个个storefile).在最后一个个storefile又会合成一个达到File,然后储存在磁盘上,这是实际的储存文件.

四.HBase的安装

链接:https://www.cnblogs.com/oraclestudy/articles/5665780.html
注意事项:
hbase依赖于zk以及hdfs,启动hbase之前一定要保证zk以及hdfs启动了
regionservers 主要是决定我们的从节点在哪些机器上面,与hdfs的slaves功能类似

五.HBase的shell操作

HBase当中三种查询方式:
1.get 通过rowkey直接获取数据 get ‘user’, ‘rk0001’ 通过rowkey查询指定的数据
2.scan查询 全表扫描,扫描hbase表当中所有的数据 没人用
3.scan startRowkey endRowkey 指定rowkey的范围值进行扫描scan ‘user’, {COLUMNS => ‘info’, STARTROW => ‘rk0001’, ENDROW => ‘rk0003’}
常用的一些比较过滤器
1.rowFilter:针对rowkey起作用 会将满足rowkey的数据的所有列全部都返回回来
2.familyFIlter:针对列族起作用 将满足条件的列族下面所有列全部都返回回来
3.qualifierFilter:针对列名起作用 满足列名的数据都会返回回来
4.valueFilter::针对列值起作用 满足值的列全部都返回来

六.HBase与MapReduce,sqoop,hue的集成

1.与MapReduce集成

问题1:
通过mr实现将myuser这张表当中f1列族的name和age字段写入到myuser2这张表的f1列族当中去
解决方法:
如果是读取hbase表数据:mapper类继承TableMapper.
如果是写入hbase表:reduce类继承TableReducer
问题2:
如何快速的加载海量的数据到hbase里面去 有一批海量的数据,文本文件,需要快速的保存到hbase里面去
解决方法:
直接将user.txt转换成为hfile格式,然后直接加载到myuser2表里面去

2.与sqoop的整合

sqoop数据导入导出的工具,可以将关系型数据库导入到大数据平台来,可以将大数据平台的数据导出到关系型数据库.CDC工具 Datax3.0这两个更好用

3.与hue的整合

作用:
整合各种其他的框架,通过一个hue框架就可以实现操作各种其他的框架,hue提供一个良好的web界面,可以让我们通过web界面来实现操作各种其他的框架
hue的架构:
UI:提供web浏览界面
hue server:服务端 类似于一个tomcat
hue db:主要是用于存储一些任务
hue基本上可以与我们所有学过的大数据的框架都整合进去
注意
hue只需要安装一台机器即可,选择任意一台机器安装都行
zk一般都是奇数台:
zk给多少台,根据集群大小来分的
小型机集群0 – 20台服务器 zk 3-5台
中型机集群 20-50台服务器 zk 5-9台
大型机集群 50台以上 zk

七.HBase的高阶操作

1.HBase的预分区

通过手动指定预分区:hbase(main):001:0> create ‘staff’,‘info’,‘partition1’,SPLITS => [‘1000’,‘2000’,‘3000’,‘4000’]
通过16进制的算法生成预分区:create ‘staff2’,‘info’,‘partition2’,{NUMREGIONS => 15, SPLITALGO => ‘HexStringSplit’}
从文件当中读取进行预分区:
cd /export/servers/
vim splits.txt
aaaa
bbbb
cccc
dddd
然后执行:
hbase(main):004:0> create ‘staff3’,‘partition2’,SPLITS_FILE => ‘/export/servers/splits.txt’

2.HBase的rowKey设计技巧

设计方法:
rowkey的设计需要结合我们的业务来讨论,避免数据热点问题(所有的数据都去到某一个region里面去了),如何确定rowkey究竟去哪一个region?取rowkey的前面几位来确定.有可能出现rowkey的长度,大于预分区规则的长度,例如rowkey16字节,预分区规则的长度8个字节.如果rowkey设计的前八位全都都是一样的,后面八位随记变化 ,所有的数据全部都会跑到一个region里面去.
1.rowkey的设计长度原则:rowkey不宜过长,过长之后占用太多内存空间,一般10-100字节,最大不超过64KB.
2.rowkey的散列原则:尽量保证rowkey的设计负载比较均衡,数据均匀的落在不同的region里面了.
3.rowkey的唯一原则:rowkey的设计不会出现重复,一旦重复,就会造成数据的覆盖.
如何解决rowkey的热点问题
1.加盐 给rowkey的前缀随记的加上一些随机数
2.取hashCode码值 通过hash,会造成前缀相同的数据,hashCode之后前缀仍然是相同的,放到同一个region里面去,造成相同用户的数据都在同一个region里面,尽量让同一个用户的数据在同一个region里面,方便我们的查询.
3.反转:手机号反转 13865472587==》反转 78527456831 ==》反转之后,相同的用户的数据还是在同一个region里面.
4.时间戳的反转:每条数据产生的时间戳给反转,放到rowkey里面去也可以.

3.HBase的协处理器

二级索引
二级索引为了解决什么问题: 解决hbase查询比较脆弱的问题
如何解决的:通过数据的冗余存储
核心思想:以空间换时间

按照其他的一些条件查找就比较慢了,例如查找age > 30等 查找平均年龄大于30岁的人,例如查找存款大于500W等等.只能使用各种各样的过滤器,效率低.按照一些指定的字段查,将这些指定的字段,存储一份到一个易于插叙 的数据库里面去,其实就是做了数据的冗余.以空间换时间的思想
一级索引
hbase当中一级索引就是rowkey
协处理器的分类
observer 主要用于数据插入或者删除的一些前置或者后置的拦截等等
endpoint 主要用于求最大值,求最小值,求平均值等等

HBase从基础到高阶全面介绍相关推荐

  1. Scala编程基础——集合高阶函数

    Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...

  2. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍

    参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...

  3. Python基础-函数,高阶函数

    Python基础-函数 1.函数的定义和函数的执行流程: """ 函数学习 """print('程序开始') a = 10 # 在内存中申请 ...

  4. 面向初学者的高阶组件介绍

    作者:Brandon Newton 原文:Higher-Order Components (HOCs) for Beginners 谈点:一篇面向初学者的 HOC 介绍.高阶组件听起来挺唬人的,只看名 ...

  5. Kotlin基础 9 - 高阶函数

    高阶函数的基本概念 1.传入或者返回函数的函数 2.函数引用 ::println 3.带有Receiver的引用 pdfPrinter:println fun main(args: Array< ...

  6. Python基础-09 高阶函数

    高阶函数 一个函数作为另一个的返回值 def demo():print('我是test函数')return 'hello'def demo():print('我是demo函数')return test ...

  7. flume 从基础到高阶

    大数据技术之Flume  第1章 Flume概述 1.1 Flume定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统.Flume基于流式架构,灵活 ...

  8. Mysql数据库基础及高阶

    基础篇 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库.表.字段) DML: 数据操作语言,用来对数据库表中的数据进行增删改 DQL: 数据查询语言,用来查询数据库中表的记录 DC ...

  9. JS基础到高阶知识点总结(每天更新中)

    JS基础点总结 运算符 // %取两数之间的余数,就是除不尽后得到的一个最终数let a = 7;let b = 4;console.log(a % b);//3// 加 let c = 2let d ...

最新文章

  1. 绝对路径与相对路径的区别【2】--release和debug这两种情况下对本地文件操作不一致的问题...
  2. 学习《html5.css3.0》网页布局和样式精粹(第二天)
  3. linux curl 多线程,CURL多线程不执行一直在请求
  4. MicroBlaze程序融合fpga的bit并烧写入Flash方法
  5. Linux用户、用户组、文件权限设置
  6. rust矿洞绳子怎么爬下_rust矿洞绳子怎么爬下_打工小伙爬冰救人,每动一下都能听到冰面碎裂声...
  7. MySQL优化建议汇总~~~
  8. Python测试开发django3.视图和URL配置
  9. 设计模式系列漫谈之五 - 迭代器模式
  10. fastxml 大于符号不转换_JQuery框架及Ajax技术练习
  11. 小米更新显示非官方rom_魔趣ROM 安装刷入教程(小白新手)
  12. 【LKJ】LKJ2000型记录装置显示界面说明
  13. android LBS模式,android: 如何开启webview的LBS功能
  14. python绘制三维矢量图_开源图形库 c语言-图形图像库 集合
  15. csr8811蓝牙芯片porting总结
  16. myeclipse加大内存
  17. Android开发知识(二十三)从源码角度分析ListView的滑动复用机制
  18. session实现用户登陆功能
  19. 基于Java+SpringBoot+vue+element实现爱心捐赠平台系统
  20. SOHO回归职场,英文介绍怎么做?

热门文章

  1. 游戏服务器AOI兴趣点算法原理--四叉树与九宫格 (golang)
  2. plc有与计算机的通讯请求时,自由口模式下PLC与计算机的通信
  3. 3dmax导入unity问题(1) 轴角度坐标
  4. 英酷词典 官方主页
  5. Java面向对象编程(中级部分)
  6. 万字长文带你学习ElasticSearch
  7. 洞察,向华为学客户需求及市场机会挖掘
  8. spring的@Bean用法
  9. CF730J(背包)- 省赛选拔
  10. 动漫人物经典名言及口头禅: