大数据——一文熟悉HBase

1、HBase是什么

HBase是基于HDFS的数据存储,它建立在HDFS文件系统上面,利用了HDFS的容错能力,内部还有哈希表并利用索引,可以快速对HDFS上的数据进行随时读写功能。
在这里插入图片描述

Hadoop在已经有一个Hive+MapReduce结构的数据读写功能,为什么还要HBase呢?我们在使用Hive的过程中也发现,MapReduce的过程很慢,不适合实时的读写访问,更多的时候是进行线下的访问。但在实际应用过程中,我们需要对大数据进行实时的读写,这时候HBase就派上用场。
HBase使用场景
HBase适合在瞬间写入量大,大量数据需要长期保存,并且数量会持续增长的场景。但在多级索引和关系复杂的数据模型,还有跨行事务场景也不适合HBase。

2、HBase怎么工作

HBase基础架构

在这里插入图片描述
Client

  • 与Zookeeper进行通信,获取数据入口地址;
  • 与HMaster通信进行管理类操作;
  • 与HRegionServer进行数据读写操作。

Zookeeper

  • 避免单点问题,一直只有running master;
  • 存储所有Region的地址,包括HMaster地址;
  • 监控HRegionServer的状态,并告知HMaster;
  • 存储Table名和Column Family

HMaster

  • 有多个HMaster,通过Zookeeper保证有一个在运行;
  • 为HRegionServer分类Region;
  • 有HRegionServer失效,重新分配;
  • 对HDFS的垃圾文件进行回收;
  • 处理用户对表的增删改查操作;

HRegionServer

  • HBase核心部分,负责I/O请求,并先HDFS读写数据;
  • 维持HMaster分配的Region,并处理Region的I/O请求;
  • 切分在运行过程中变大的Region;
  • HRegionServer中有一系列HRegion对象,每个HRegion对应Table中的一个Region,每个HRegion由多个Store组成,每个HStore对应Table中的Column Family。

Column Family是HBase的存储单元,所以相同特性的Column放在一个Column Family更高效。

HStore

  • HBase存储的核心,由MemStore和StoreFile组成;

HRegion

  • 一个Table最开始的时候是一个Region;
  • 一个Region可以有多个Store,每个Store用来存储一个Column Family;
  • Region随着数据的越来越多,会进行拆分,由HRegionServer进行拆分,默认大小为10G。

HLog

  • 备份和日志,在系统出错和宕机时,MemStore的数据会丢失,而HLog可以防止该情况。

HBase写数据流程
在这里插入图片描述

HBase数据模型

在这里插入图片描述

  • NameSpace:数据库的库名;
  • Table表:HBase的表,由于对于值为空的列不占空间,因此表可以比较稀疏;
  • Row行:每一行都有一个RowKey来进行识别;
  • RowKey行键:类似于MySQL中的主键,用来进行检索数据;
  • Column列:由Column family和Column qualifier组成,两者用;进行间隔;
  • ColumnFamily列族:列的集合,每个表的列族都以一个文件存储,一个表可以有多个列族;
  • ColumnQualifier列标识:类似于键值对,key是RowKey,那么ColumnQualifier就是Value;
  • TimeStamp时间戳:是具有时间属性的列,每个数据都有一个时间戳属性,也就是说数据具有版本特性;
  • Region区域:HBase可以自动把表划分为多个区域,随着数据的增多区域也变多。

3、HBase的Shell操作

  1. HBase启动

找到zkServer.sh启动Zookeeper

zkServer.sh start

启动HBase

start-hbase.sh
  1. HBase常见Shell操作

连接集群

hbase shell

创建表

create 'user','base_info'# 第一个为表名,第二个为列族

删除表

disable 'user'
drop 'user'

创建数据库

create_namespace 'test' #test为数据库名

展示所有数据库

list_namespace

显示表

list

插入数据
put ‘表名’,‘rowkey的值’,’列族:列标识符‘,’值‘

put 'user','rowkey_10','base_info:username','Tom'

查询表中所有数据

scan 'user' # 很少使⽤全表查询 scan会加上⼀些条件限制

Scan查询中添加限制条件

scan '名称空间:表名', {COLUMNS => ['列族名1', '列族名2'], LIMIT => 10, STARTROW =>'起始的rowkey'}

scan查询添加过滤器
ROWPREFIXFILTER rowkey 前缀过滤器

scan 'user', {ROWPREFIXFILTER=>'rowkey_22'}

查询某个rowkey的数据

get 'user','rowkey_16'

删除表中的数据

delete 'user', 'rowkey_16', 'base_info:username'

清空数据

truncate 'user'

指定显示多个版本

get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2}

修改可以显示的版本数量

alter 'user',NAME=>'base_info',VERSIONS=>10

通过TIMERANGE 指定时间范围

scan 'user',{COLUMNS => 'base_info', TIMERANGE => [1558323139732,1558323139866]}
get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2,TIMERANGE=> [1558323904130, 1558323918954]}

通过时间戳过滤器 指定具体时间戳的值

scan 'user',{FILTER => 'TimestampsFilter (1558323139732, 1558323139866)'}
get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2,FILTER =>'TimestampsFilter (1558323904130, 1558323918954)'}

获取最近多个版本的数据

get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>10}

通过指定时间戳获取不同版本的数据

get 'user','rowkey_10',
{COLUMN=>'base_info:username',TIMESTAMP=>1558323904133}

命令表
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/86849.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】从入门到上头—简介(1)

文章目录 一.编译型语言和解释型语言的区别二.Python是什么,Python简介三.Python优缺点四.Python能干什么,Python的应用领域五.Python编程环境搭建1.windows安装2.Linux(Ubuntu)系统安装Python 六.集成开发环境:PyChar…

基于飞腾芯片的设计与调试入门指导

一、啥是自主可控 国产CPU现在厂家细算起来其实有很多,现在华为、小米也在做自己的CPU,瑞芯微、全志等的SoC现在也是广泛应用。但是真正能叫做自主可控的CPU厂商,只有6家。那啥是自主可控?首先来不严谨的讲下现在数字芯片是怎么做的设计。FPGA大家都知道,可以通过Verilog…

Squaretest 1.8.3 安装激活

1. 插件下载 2. 离线安装 3. 插件激活

学习ts(八)模块与命名空间

模块 ts与es5一样,任何包含顶级import和export的文件都被当成一个模块。相反的,如果一个文件不带有顶级的import和export声明,那么他的内容被视为全局可见的。 在两个文件中声明相同属性名的变量,会出现错误信息 可以使用export…

Docker使用mysql:5.6和 owncloud 镜像,构建一个个人网盘,安装搭建私有仓库 Harbor

一、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 [rootlocalhost ~]# docker pull mysql:5.6[rootlocalhost ~]# docker pull owncloud[rootlocalhost ~]# docker run -itd --name mysql --env MYSQL_ROOT_PASSWORD123456 mysql:5.6 d45cc5b95f00692881baaf…

uniapp小程序位置信息配置

uniapp 小程序获取当前位置信息报错 报错信息: getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.json 需要在manifest.json配置文件中进行配置:

【Docker 】Docker 客户端,容器使用,启动容器,启动已停止运行的容器,停止一个容器,进入容器

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

Unittest 笔记:unittest拓展生成HTM报告发送邮件

HTMLTestRunner 是一个unitest拓展可以生成HTML 报告 下载地址:GitHub: https://github.com/defnnig/HTMLTestRunner HTMLTestRunner是一个独立的py文件,可以放在Lib 作为第三方模块使用或者作为项目的一部分。 方式1: 验证是否安装成功&…

Zblog博客网站搭建与上线发布:在Windows环境下利用cpolar内网穿透实现公网访问的指引

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕…

提升Java开发效率:掌握HashMap的常见方法与基本原理

文章目录 前言一、概述1. 认识HashMap2. HashMap 的作用和重要性3. 简要讲解 HashMap 的基本原理和实现方式 二、了解 HashMap 创建及其的常见操作方法1. HashMap的创建2. 添加元素 put()3. 访问元素 get()4. 删除元素 remove()5. 计算大小 size()6. 迭代 HashMap for-each7.判…

【C++】C++ 引用详解 ⑨ ( 常量引用初始化 | C / C++ 常量分配内存的四种情况 )

文章目录 一、常量引用初始化1、使用 " 普通变量 " 初始化 " 常量引用 "2、使用 " 常量 / 字面量 " 初始化 " 常量引用 "3、C / C 常量分配内存的四种情况4、代码示例 - 常量引用初始化 一、常量引用初始化 1、使用 " 普通变量 &…

消息中间件 介绍

MQ简介 MQ,Message queue,消息队列,就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等,用来保存数据的。当然,与数据库、缓存等产品比较,也有自己一些特点,具体的特点后文会做详细的介绍。 现在常用…