我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hbase列式存储入门教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hbase列式存储入门教程

HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。分布式是因为HBase底层使用HDFS存储数据,可扩展也是基于HDFS的横向扩展能力,作为大数据的存储当然支持海量数据的存储,NoSQL非关系型数据库表结构和关系型数据库(如Mysql)的逻辑结构、物理结构很不一样,性质特点、应用场景也不一样。

1、逻辑结构

在这里插入图片描述

1)Name Space

命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。

2)Region

类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。

3)Row

HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。

4)Column

HBase 中的每个列都由 Column Family(列族)和 Column Qualifier(列限定符)进行限定,例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。

5)Time Stamp

用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入 HBase 的时间。

6)Cell

由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。

2、物理结构

在这里插入图片描述

1)Region Server

Region Server 为 Region 的管理者,其实现类为 HRegionServer,主要作用如下:对于数据的操作:get, put, delete;对于 Region 的操作:splitRegion、compactRegion。

2)Master

Master 是所有 Region Server 的管理者,其实现类为 HMaster,主要作用如下:对于表的操作:create, delete, alter对于 RegionServer的操作:分配 regions到每个RegionServer,监控每个 RegionServer的状态,负载均衡和故障转移。

3)Zookeeper

HBase 通过 Zookeeper 来做 Master 的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。

4)HDFS

HDFS 为 HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用的支持。

3、增删改查

初学或者测试阶段对HBase操作可以使用HBase shell。增删改查等基本命令如下:

(1)创建表


create 'test','cf'

test是表名,cf是列族名,你会发现HBase的表在新建的时候并没有地方让你定义列(和关系型数据库很不一样吧)。这是因为HBase中的列全部都是灵活的,可以随便定义的。列只有在你插入第一条数据的时候才会生成。那么表的属性在哪里定义呢?其实HBase的所有数据属性都是定义在列族上的。

(2)查看表属性


describe 'test'

输出:

hbase(main):002:0> desc 'test'
Table test is ENABLED
test, {TABLE_ATTRIBUTES => {DURABILITY => 'USE_DEFAULT', METADATA => {'IS_ROOT'
=> 'false', 'LINDORM_TABLE_ATTRS' => '\x00\x08\x00\x00\x00\x16WAL_EDIT_WITH_FULL
_ROW\x05false\x00\x00\x00\x0BCONSISTENCY\x08eventual\x00\x00\x00\x16LEADER_BALAN
CE_ENABLED\x01\xFF\x00\x00\x00\x1FFULL_ROW_EDIT_CARRY_LATEST_DATA\x04true\x00\x0
0\x00\x0FDYNAMIC_COLUMNS\x04true\x00\x00\x00\x0FALLOW_FILTERING\x01\x00\x00\x00\
x00\x13LEADER_BALANCE_TYPE\x06single\x00\x00\x00\x12DEFERRED_LOG_FLUSH\x05false'
, 'TABLEMETAVERSION' => '`\xE4n\x0F'}}
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BE
HAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false'
, DATA_BLOCK_ENCODING => 'DIFF', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICAT
ION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMO
RY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'fal
se', COMPRESSION => 'ZSTD', BLOCKCACHE => 'true', BLOCKSIZE => '65536', METADATA
 => {'STORAGE_POLICY' => 'DEFAULT', 'COMPRESS_TAGS' => 'true', 'DFS_REPLICATION'
 => '2', 'CHS_PROMOTE_ON_MAJOR' => 'true'}}
1 row(s)
Took 0.2150 seconds

可以看出对表的描述不多,大量的是对列族的描述,列族更像是传统关系数据库中的表,而表本身反倒变成只是存放列族的空壳了。

(3)查看表

list

输出:

hbase(main):001:0> list
TABLE
test
test1
test2
test_ls
4 row(s)
Took 0.6370 seconds
=> ["test", "test1", "test2", "test_ls"]

(4)插入数据


put 'test','row1','cf:name','jack'

这条语句的意思就是:往test表插入一个单元格。这个单元格的rowkey为row1,也就是说它是属于row1这个行中的一个列。该单元格的列族为cf。该单元格的列名为name。数据值为jack。可见列是在插入数据的时候产生的,Hbase中列可以自由扩展。表的结构中某一行可能没有某个列,但数据并不以NULL替代,而是压根没有该单元格。这样以稀疏k-v方式存储数据可以大大压缩数据存储容量。

在这里插入图片描述

(5)扫描数据


scan 'test'

输出:

hbase(main):011:0> scan 'test'
ROW                   COLUMN+CELL
 row1                 column=cf:name, timestamp=1625911358767, value=jack
1 row(s)
Took 0.5670 seconds

scan命令类似于Mysql中的select * from test

(6)查看数据

scan命令是批量读取数据,查询某个单元格的数据可以用get命令,


get 'test','row1','cf:name'

由于HBase底层使用键值对存储数据,查询一个单元格的数据非常快,这和Mysql也完全不同。

(7)删除数据


delete 'test','row1','cf:name'

HBase删除记录并不是真的删除了数据,而是放置了一个墓碑标记(tombstone marker),把这个版本连同之前的版本都标记为不可见了。

(8)停用表


disable 'test'

表删除之前要停用表

(9)删除表


drop 'test'

4、应用场景

HBase采用的是Key/Value的存储方式,这意味着,即使随着数据量增大,也几乎不会导致查询的性能下降。凡事都不可能只有优点而没有缺点。数据分析是HBase的弱项,因为对于HBase乃至整个NoSQL生态圈来说,基本上都是不支持表关联的。

不适用的场景:主要需求是数据分析,比如做报表。单表数据量不超过千万。建议使用MySQL或者Oracle数据库。

适用的场景:单表数据量超千万,而且并发还挺高。数据分析需求较弱,或者不需要那么灵活或者实时。

5、参考资料

《HBase不睡觉书》

《HBase原理与实践》

B站视频《尚硅谷HBase教程(hbase框架快速入门)》

到此这篇关于Hbase列式存储入门的文章就介绍到这了,更多相关Hbase列式存储内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hbase列式存储入门教程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle存储过程新手入门教程(通俗理解存储过程)

存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令,下面这篇文章主要给大家介绍了关于Oracle存储过程新手入门教程的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-03-03

Laravel 队列入门教程 (RabbitMQ)

假设你已经学过了基础 laravel任务和队列 和本系列的第一部分, 我们学习使用不同的队列连接(除了数据库), 如何为不同的任务来使
2023-02-09

HBase和MySQL存储方式的差别?或者说是,行存储和列存储的区别?

HBase借鉴列存储的思想,但是最底层依然是依靠键值对来存储数据,HBase为非关系型数据库而MySQL则是行存储,MySQL为关系型数据库写过程行存储因为数据是连续的,所以只需要进行追加即可;列存储因为数据不连续,所以需要不断的寻址来添加或者修改数据。读过程
HBase和MySQL存储方式的差别?或者说是,行存储和列存储的区别?
2020-03-15

Python入门教程(十二)Python列表

这篇文章主要介绍了Python入门教程(十二)Python列表,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
2023-05-16

PHP Redis扩展入门教程:轻松实现Redis数据存储

PHP Redis扩展入门教程,助您轻松实现Redis数据存储,掌握Redis强大功能,提升您的开发效率。
PHP Redis扩展入门教程:轻松实现Redis数据存储
2024-02-07

Linux Shell脚本系列教程(一):Shell入门

一、Shell简介 诸多类Unix操作系统的设计令人惊叹。即便是在数十年后的今天,Unix式的操作系统架构仍是有史以来最佳的设计之一。这种架构最重要的一个特性就是命令行界面或者shell。shell环境使得用户能与操作系统的核心功能进行交互
2022-06-04

嵌入式系统设计师入门教程

  很多朋友刚开始接触嵌入式系统设计师可能会觉得很陌生,不知道该从哪开始着手学习。下面编程学习网小编为大家整理了嵌入式系统设计师入门教程以及嵌入式系统设计师基础阶段的学习建议。      嵌入式基础阶段的学习建议  基于以上讨论,下面对广大渴望学习嵌入式系统的学子提出几点基础阶段的学习建议: 
嵌入式系统设计师入门教程
2024-04-18

Python正则表达式经典入门教程

本文实例总结了Python正则表达式基本用法。分享给大家供大家参考,具体如下: 正则表达式在平时做文本处理(爬虫程序去解析html中的字段,在分析log文件的时候需要抓取一些关键数据)的时候经常会用到。一般我们会使用到Python的re库。
2022-06-04

Centos7下yum安装Ceph分布式存储教程

目录前言配置yum源,epel源配置Ceph源安装Ceph及组件前言 本文讲述了Ceph应该如何安装,掌握方法后,可自行选择安装哪个版本的Ceph。 配置yum源,epel源 首先机器需要联网,并且配置网络yum源,epel源,可从阿里开源
2022-06-04

Python入门教程(二十)Python的Lambda表达式

这篇文章主要介绍了Python入门教程(二十)Python的Lambda表达式,lambda表达式是一行的函数。它们在其他语言中也被称为匿名函数,lambda表达式非常有用,可以让代码简单,简洁,需要的朋友可以参考下
2023-05-17

Android入门教程之创建样式与主题

一、前言 作为一个安卓开发者,我们一般把焦点放在app的功能上。但是仅仅有功能是不够的,界面和功能一样重要。有两种方法可以改变app的外观。第一种就是直接在xml中直接修改View的属性。这种方法只适合于只有几个View和Activity的
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录