HBase介绍

news2024/10/6 12:22:11

一、HBase简介

1.1、HBase是什么

Google在200-2006发表了GFS、MapReduce、BigTable三篇

论文

,号称“三驾马车”,开启了大数据的时代。

GFS是Google File System,开源实现是HDFS(Hadoop File System)。

MapReduce计算框架的开源实现是Hadoop MapReduce。

BigTable的开源实现的实现是HBase(Hadoop DataBase)。

Hadoop解决了海量数据的存储问题,HBase底层存储基于Hadoop,除了可以存储海量数据外,还解决了海量数据的随机查询问题。

1.2、HBase优缺点

1)HBase优点

  • 海量存储:HBase单表可以存储千亿行、百万列的数据规模,数据容量可以达到TB甚至PB。
  • 支持动态扩缩容:主要包括存储节点和读写服务节点扩展。HBase底层存储基于Hadoop,存储节点可以通过增加DataNode实现扩展。读写服务节点可以通过增加RegionServer实现扩展。
  • 列式存储:每个列族会有多个列,每个列族单个文件存储,可独立权限控制和查询。
  • 无模式:HBase的列可以根据需求动态增加,同一个表不同行可以有截然不同的列。
  • 数据自动过期:HBase列族可设置TTL,超过TTL的数据就会自动清理
  • 数据多版本:HBase支持多版本特性,用户可以根据需要选择最新版本或者历史版本

2)HBase缺点

  • HBase只支持简单分页。可通过scan的startRow和limit实现简单分页,但因为需要startRow,所以只支持上一页和下一页,不支持直接跳到某一页。
  • HBase不支持复杂的聚合运算,比如说Join、GroupBy、查询总数等。
  • HBase不支持事务。
  • HBase不支持二级索引,HBase只支持rowkey精确查询或者前缀查询走索引,其它都是全表扫描。如果需要实现这种功能,需要引入第三方方案(Phoenix等)。

1.3、HBase数据模型

1)HBase表逻辑结构

2)HBase表物理存储结构

3)HBase数据模型

  • Name Space

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

  • Table

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

  • Row

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

  • Column

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

  • Time Stamp

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

  • Cell

由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元

1.4、HBase、MongoDB、Redis、ES对比

二、HBase架构

2.1、HBase架构介绍

2.2、HBase物理存储

1)、Table在行的方向上分割为多个Region,每个Region分散在不同的RegionServer中。

2)、每个Region由多个Store构成,每个Store由一个memStore和0或多个StoreFile组成,每个Store保存一个列族。

HBase表和region关系总结

2.3、定位rowkey所在的region

1)、先读取zk的/hbase/meta-region-server节点信息,获取meta表所在的RegionServer

meta表其实就是HBase表,但未分片(只有一个region)

meta表rowkey主要是table,startKey,列信息主要是Regionserver所在的在服务器及端口

2)、根据rowkey在meta表中查询所在的Regionserver服务器及端口

3)、客户端向该RegionServer发送真正的数据读写请求

2.4、HBase写过程

1)、根据rowkey在meta表中查询所在的Regionserver服务器及端口,向该RegionServer发送写请求

2)、先把数据写入到 HLog,以防止数据丢失。

3)、 然后将数据写入到 Memstore。

4)、如果memstore达到阈值,会把memstore中的数据flush到StoreFile 中

memstore刷新时机

a、单个memstroe大小达到阀值hbase.hregion.memstore.flush.size(默认值128M)

b、memstore总大小达到总内存的40%。hbase.regionserver.global.memstore.upperLimit(默认值0.4)

c、到达自动刷新时间hbase.regionserver.optionalcacheflushinterval(默认1小时)

5)、当Storefile越来越多,会触发合并操作

合并分两种:小合并和大合并

小合并:选取一些小的、相邻的Storefile将他们合并成一个更大的Storefile,这个过程还会清理部分TTL过期数据

大合并:合并Store中所有的Storefile为一个Storefile,这个过程还会清理所有TTL过期数据

6)、当Region 也会越来越大,达到阈值后,会触发 Split 操作,将 Region 一分为二。

region切分时机:min(256M*region数量^3 ,10G) 。具体的切分策略为:

第一次split:1^3 * 256 = 256MB

第二次split:2^3 * 256 = 2048MB

第三次split:3^3 * 256 = 6912MB

第四次split:4^3 * 256 = 16384MB > 10GB,因此取较小的值10GB

后面每次split的size都是10GB了。

三、HBase shell

  • 创建表

create 'user_info', {NAME=>'base_info'}, {NAME=>'credit_info',TTL=>'86400'}

  • 创建表

drop 'user_info'

  • 更新表

alter 'user_info', {NAME=>'education_info'}

  • 新增数据

put 'user_info', 'u001', 'base_info:name', 'zhang san'

  • 删除数据

deleteall 'user_info', 'u001'

  • 查询数据

get 'user_info','u001'

get 'user_info','u001','base_info'

get 'user_info','u001','base_info'

  • 分页查询

scan 'user_info', {FILTER=>"PageFilter(10)", STARTROW=>''u0010}

四、HBase使用注意事项

4.1、rowkey设计

HBase中的行是按照rowkey的字典顺序排序的,这种设计优化了 scan操作,可以将相关的行以及会被一起读取的行存取在临近位置,便于 scan读取。但也容易引发热点问题,比如说rowkey如果是递增的话,新增的数据会集中到一个region里面。所以rowkey设计要遵循以下原则

  • 唯一原则:必须在设计上保证其唯一性
  • 长度原则:100字节以内,8的倍数最好,可能的情况下越短越好
  • 散列原则:高位散列,避免热点问题

高位散列如何做?

  • 加盐:在rowkey的前面增加随机数,使得它和之前的rowkey的开头不同。加盐之后的rowkey就会根据随机生成的前缀分散到各个region上,以避免热点。
  • 反转:这样可以使得rowkey中经常改变的部分放在前面,这样可以有效的随机rowkey。以递增用户号为rowkey,这种情况是不能在用户号前面增加随机数,但可以将用户号反转后的字符串作为rowkey,这样的就避免了以递增用户号导致热点的问题

4.2、预分片

预分片可以解决以下问题

  • 负载均衡。当一个table刚被创建的时候,HBase默认的分配一个region给table。也就是说这个时候,所有的读写请求都会访问到同一个RegionServer的同一个region中,这个时候就达不到负载均衡的效果
  • 避免region切分、自动平衡导致系统波动。

预分片如何做?

create 'user_info', {NAME=>'base_info'}, {NAME=>'credit_info',TTL=>'86400'} ,SPLITS => ['100000000','200000000','300000000','400000000']

4.3、namespace

HBase没有database概念,创建的表可以不指定namespace,默认会放在default的namespace,在HBase不共用的时候没有问题。但如果共用的话,授权就会比较麻烦。所以创建表的时候,需要指定自定义的namespace

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全流程机器视觉工程开发(三)任务前瞻 - 从opencv的安装编译说起,到图像增强和分割

前言 最近开始做这个裂缝识别的任务了,大大小小的问题我已经摸得差不多了,然后关于识别任务和分割任务我现在也弄的差不多了。 现在开始做正式的业务,也就是我们说的裂缝识别的任务。作为前言,先来说说场景: 现在相…

初识webpack(一)概念、入口配置、输出配置、loader等

目录 (一)概念 webpack的依赖图 (二)webpack的基本使用 (三)webpack的配置文件 1.入口(entry)配置 2.输出(output)配置 (三)loader 1.css文件处理 (1)安装css-loader和style-loader (2)在webpack.config.js中配置loader 2.less文件处理 3.postcss的使用 (1)安装…

相片修复框架-GFPGAN

一 GFPGAN 介绍 GFPGAN 是一个由腾讯 ARC 团队开发的用于人脸图像生成和优化的 GAN 模型。在github可以找到开源的代码,它由两个主要模块组成: 退化移除模块 (U-Net):用于从低分辨率、低质量的人脸图像中恢复出高质量的人脸图像。 生成式脸部…

软件工程知识梳理6-运行和维护

软件维护需要的工作量很大,大型软件的维护成本高达开发成本的4倍左右。所以,软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。 定义:软件已经交付使用之后,…

【爬虫专区】批量下载PDF (无反爬)

天命:只要没反爬,一切都简单 这次爬取的是绿盟的威胁情报的PDF 先看一下结构,很明显就是一个for循环渲染 burp抓包会发现第二次接口请求 接口请求一次就能获取到了所有的数据 然后一个循环批量下载数据即可,其实没啥难度的 imp…

腾讯云幻兽帕鲁Palworld服务器价格表,2024年2月最新

腾讯云幻兽帕鲁服务器价格32元起,4核16G12M配置32元1个月、96元3个月、156元6个月、312元一年,支持4-8个玩家;8核32G22M幻兽帕鲁服务器115元1个月、345元3个月,支持10到20人在线开黑。腾讯云百科txybk.com分享更多4核8G12M、16核6…

PVE 7.4-17 中开启vGPU显卡虚拟化

要为VM提供图形引擎,一般分为3种: 1、软件模拟图形-性能差 2、显卡直通-性能最好,一个虚拟机独享一个显卡 3、vGPU-性能好,多个虚拟机共享一个显卡 目前市面上的主流GPU厂家有intel、amd、nvidia,本篇文章主要介绍nvi…

Intercom与HelpLook:搭建知识库哪个更符合你的需求?

在当今信息化日益发展的时代,知识库作为一种集中存储和管理企业信息的重要工具,已经被越来越多的公司所采用。它有助于企业提升效率,改进服务质量,更好地与客户进行沟通。Intercom和HelpLook近两年在这个领域的讨论度不断变高&…

网络层 IP协议(1)

前置知识 主机:配有IP地址,但是不进行路由控制的设备 路由器:既配置了IP地址,又能进行路由控制的设备 节点:主机和路由器的总称 IP协议主要完成的任务就是 地址管理和路由选择 地址管理:使用一套地址体系,将网络设备的地址描述出来 路由选择:一个数据报如何从源地址到目的地址 …

摄影分享|基于Springboot的摄影分享网站设计与实现(源码+数据库+文档)

摄影分享网站目录 目录 基于Springboot的摄影分享网站设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、图片素材管理 3、视频素材管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐…

excel 选中指定区域

问题 excel 选中指定区域 详细问题 笔者有一个excel数据集,数据量较大,如何快速选中指定区域 解决方案 步骤1、 点击起始单元格 确定单元格坐标(建议直接CtrlC复制至剪贴板) 具体操作入下图所示 步骤2、 点击结束单元格 …

数与抽象之自然数

自然数 “自然数的抽象与内在属性:图7中的纯粹五性” “自然”是数学家对我们所熟悉的1,2,3,4这样的数字所赋予的称呼。自然数是最基本的数学对象,但它们似乎并没有引导我们去抽象地思考。毕竟,单单一个数…

【Linux网络编程一】网络基础(网络框架)

【Linux网络编程一】网络基础(网络框架) 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点:网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装&…

【教学类-34-01】20240130纸尺1.0 (A4横版5条,刻度25*5=125CM)

作品展示: 背景需求: 大3班一位孩子用“骰子统计纸”制作了一个身高刻度表 【教学类-40-01】A4骰子纸模制作1.0(飞机形 5.5CM纸盒骰子1个记录纸1条)(点数是不同的符号图案)-CSDN博客文章浏览阅读160次。【…

查看阿里云maven仓中某个库有哪些版本

起因 最近项目上有做视频业务,方案是使用阿里云的短视频服务,其中也有使用到阿里云的上传SDK,过程中有遇一个上传SDK的内部崩溃,崩溃栈如下: Back traces starts. java.lang.NullPointerException: Attempt to invok…

【Qt】—— Qt Creator界⾯认识

目录 (一)左边栏 (二)代码编辑区 (三)UI设计界⾯ (四)构建区 (一)左边栏 在编辑模式下,左边竖排的两个窗⼝叫做"边栏"。 ①是项⽬…

指针的深入理解(三)

这一节主要使用复习回调函数, 利用冒泡模拟实现qsort函数。 qsort 排序使用冒泡排序,主要难点在于运用元素个数和字节数以及基地址控制元素的比较: if里面使用了一个判断函数,qsort可以排序任意的数据,原因就是因为可…

立体边界,让arcgis出图更酷炫一些

就是这样子的那个图—— 本期我们还是用长沙市为例, 来手把手的演示制作立体边界, 就是这个样子的边界—— 第一步—准备底图 其实你准备什么底图都可以哈,例如调用天地图、下载个影像图,或者用其他什么的底图,都是…

如何使用Docker部署JSON Crack

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序,能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

【数据结构】(分治策略)中位数的查询和最接近点对问题

中位数查询: 寻找一组字符串中第k小的数,返回其值和下标。 不可以有重复值(在缩小规模的时候,会导致程序死循环) 相对位置的转换体现了分治策略的思想。> 划分函数 int partition(int *nums,int left, int rig…