hbase(1)-基础

news2024/9/28 21:21:56

1、hbase产生背景

hadoop只能执行批量处理,并且只能以顺序方式访问数据,这意味着即使最简单的搜索工作,也必须搜索整个数据集。那么当处理一个庞大的数据集,也是按照顺序处理一个巨大的数据集。

基于上述hadoop的限制,急需一个新的解决方案,需要(随机)访问数据中的任何点单元。

由此,诞生了大批的hadoop随机存取数据库的框架。如:hbase、cassandra、CouchDB和MongoDB等都是一些可以存储大量数据,也能以随机方式访问数据的数据库。

2、什么是hbase?

1)、hbase是BigTable的开源版本(源码使用java编写)

2)、hbase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用hbase技术可以在廉价的PC Server上搭建起大规模的结构化数据存储集群。

3)、hbase的目标是存储并处理大型的数据,即仅需要使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。

序号Hbase        BigTable
1依赖HDFS做底层的数据存储依赖Google GFS做底层的数据存储
2依赖MapReduce做数据计算依赖Google MapReduce做数据计算
3依赖zookeeper做服务协调依赖Google Chubby做服务协调

3、Hbase这个NoSQL数据库的要点

1)、hbase介于NoSQL和RDBMS之间,仅能通过主键Rowkey和主键的range来检索数据

2)、hbase不支持复杂的事务,只支持行级事务(可以通过hive支持来实现多表join等复杂操作)

3)、hbase查询数据的功能非常简单,不支持join等复杂操作(可以通过hive支持来实现多表join等复杂操作)。

4)、hbase中支持的数据类型为byte[],即底层所有数据的存储都是字节数组

5)、hbase主要用来存储结构化和半结构化的松散数据。

注:

结构化:数据结构字段确定且清晰,如数据库中的表结构

半结构化:具有一定的结构,但是语义不够确定,如HTML网页,有些字段是确定的如title,有些不确定如table

非结构化:杂乱无章的数据

4、hbase中表的特点

1)、大:一个表可以由上十亿行,上百万列组成

2)、列式存储数据:hbase是根据列簇来存储数据,创建表时必须指定列簇,列簇下面可以有非常多的列。

3)、稀疏:对于为空(null)的列,并不占用存储空间,因此hbase中的表可以设计得非常稀疏。

4)、极易扩展:hbase基于存储的扩展依赖于HDFS,基于数据处理的能力依赖于RegionServer的扩展。可以横向的添加RegionServer的机器,进行水平扩展。

5)、高并发处理能力:hbase架构都是采用廉价的PC Server,在高并发的情况下,hbase的单个IO延迟下降并不多。能够获得高并发、低延迟的服务。

5、hbase表结构

如下图是一张hbase表的数据

1)、Rowkey(键)

Rowkey和mysql中的主键完全一样,hbase使用rowkey来唯一的区分某一行的数据。

由于hbase只支持3种查询方式:基于rowkey的单行查询;基于rowkey的范围扫描;全表扫描。

因此,rowkey对hbase的性能影响非常大,rowkey的设计就显得尤为重要。那么,设计的时候就需要兼顾基于rowkey的单行查询,也要键入rowkey的范围扫描。

注:rowkey行键可以是任意字符串(最大长度为64kb,实际应用中长度一般为10-100bytes),那么最好是16bytes。在hbase内部,rowkey保存为字节数组,hbase会对表中的数据按照rowkey排序(字典顺序)。

2)、columnFamily(列簇)

  • hbase通过列簇划分数据的存储,列簇下面可以包含任意多的列,实现灵活的数据存取。
  • hbase表在创建时就必须指定列簇,就像关系型数据库创建的时候必须指定具体的列是一样的。
  • hbase的列簇并不是越多越好,官方推荐列簇最好小于或者等于3。一般场景为一个列簇。

注:列簇类似于家族,家族下面由很多个家庭组成。

3)、column(列):同mysql中的列

4)、TimeStamp(时间戳)

  • TimeStamp是实现hbase多版本的关键,使用不同的timestamp来标识相同rowkey行对应的不同版本的数据。
  • hbase中通过rowkey和columns确定的为一个存储单元称之为cell,每个cell都保存着同一份数据的多个版本,版本通过时间戳来索引。时间戳的类型是64位整型。
  • 时间戳可以由hbase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。
  • 时间戳也可以由客户显示赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

为了避免数据存在过多版本造成管理负担,hbase提供了两种数据版本回收方式:

  • 保存数据的最后n个版本
  • 保存最近一段时间内的版本(设置数据的生命周期TTL)

5)、cell(单元格)

 由{rowkey,column(=+),version}唯一确定的单元。Cell中的数据是没有类型的,全部都是字节码形式存储。

6、Hbase架构图

从图中可以看出,hbase由client、zookeeper、HMaster、HRegionServer、HDFS等几个组件组成。

1 )、client:提供访问hbase的接口,另外还维护了对应的cache来加速hbase的访问。比如:cache中的.META.元数据的信息。

2)、hbase通过zookeeper来做master的高可用、regionServer的监控、元数据的入口以及集群配置的维护等工作。

  • 通过zookeeper保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master来提供服务
  • 通过zookeeper来监控regionserver的状态,当regionserver有异常,通过回调的形式通知master regionserver上下线的信息。
  • 通过zookeeper存储元数据的统一入口地址

3)、hmaster节点

主要职责:

  • 为HRegionServer分配Region
  • 维护整个集群的负载均衡
  • 维护集群的元数据信息
  • 发现失效的Region后,将失效的region分配到正常的HRegion上运行
  • 当RegionServer失效的时候,协调对应的Hlog的拆分

4)、HRegionServer

  • 直接对接用户的读写请求,是真正的干活节点
  • 管理master,并为其分配Region
  • 处理来自客户端的读写请求
  • 负责和底层HDFS的交互,存储数据到HDFS
  • 负责storefile的合并工作

5)、HDFS

hdfs为hbase提供最终的底层数据存储服务,同时为habse提供高可用的支持(hlog存储在HDFS)

提供元数据和表数据的底层分布式存储服务;

数据多副本,保证的高可靠和高可用性。

注:

1)、store:HFile存储在store中,一个store对应hbase表中的一个列簇

2)、memstore:内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存到WAL中之后,RegionServer会在内存中存储键值对。

3)、HFile:这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以hFile的形式存储在HDFS上的。

4)、write-Ahead logs

hbase的修改记录,当对hbase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阀值可以设定)。但将数据保存在内存中的可能有高概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做write-Ahead logfile的文件中,然后再写入内存中,所以系统出现故障的时候,数据可以通过这个日志文件重建。

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

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

相关文章

股东分红税高达20%,该怎么节税?

股东分红税高达20%,该怎么节税? 别吃大亏了!股东分红个税高达20%,这样做节税很实在! 《税筹顾问》专注于园区招商、企业税务筹划,合理合规助力企业节税! 企业成立的初衷就是为了赚钱,以盈利为…

ts中声明引入未使用的报错——解决方案

在编写ts项目的时候,经常会出现如下报错: 导入声明中的所有导入都未使用 这是因为导入的模块暂时没有使用,ts给的一个提示信息 解决方案: 在ts.config.json中 把noUnusedLocals 设置为false即可 {"compilerOptions"…

进阶 vue自定义指令 vue中常用自定义指令以及应用场景,案例书写

文章目录 vue3自定义指令1.什么是自定义指令&#xff1f;2.注册自定义指令2.1 全局注册2.2 局部注册<script setup>中注册&#xff1a;<script>中使用&#xff1a; 3.钩子函数参数详解4.指令传值5.总结 常用自定义指令案例v-longpress 长按v-debounce 防抖v-thrott…

微信怎么实现自动通过好友请求后自动回复呢?

每天都很忙碌 今天特别忙“录” 每天打开微信后&#xff0c; 第一件事就是回复客户&#xff0c; 但是经过一个小时、两个小时后发现&#xff0c; 只回复了昨晚留言的那一批客户&#xff0c; 还没有来得及回复刚刚发来的信息。 此外&#xff0c;通讯录中有99个客户等待手动…

代理模式-对象的间接访问

现在朋友圈有好多做香港代购的微商&#xff0c;大部分网民无法自己去香港购买想要的商品&#xff0c;于是委托这些微商&#xff0c;告诉他们想要的商品&#xff0c;让他们帮我们购买。我们只需要付钱给他们&#xff0c;他们就会去香港购买&#xff0c;然后把商品寄给我们。这就…

测试常见前端bug

目录 协作 测试方法 标签&#xff1a;标签 内容/ref/ 判断 arr&&arr.length 交互 样式不生效&#xff1a;devtools查找&#xff0c;编译前的标签&#xff0c;运行时不一定存在 可交互的需要提示 hover样式 没有交互逻辑&#xff0c;就不要设置交互 无法交互…

pytorch学习——模型选择

一.概念 模型选择是机器学习中的重要环节&#xff0c;它涉及到从各种统计&#xff0c;机器学习或深度学习模型中选取最佳模型的过程。这涉及到许多关键概念&#xff0c;包括偏差与方差&#xff0c;过拟合与欠拟合&#xff0c;训练误差和泛化误差&#xff0c;交叉验证&#xff0…

【Linux下6818开发板(ARM)】硬件空间挂载

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…

HTML基础知识点总结

目录 1.HTML简介 2.HTML基础结构 主要字符&#xff1a; 3.基础知识 &#xff08;一&#xff09;p标签 &#xff08;二&#xff09;hr标签 &#xff08;三&#xff09;尖角号 &#xff08;四&#xff09;版权号 (五)div和span div span (六)列表 &#xff08;1&…

Python爬虫实战(进阶篇)—6获取微某博信息(附完整代码)

转眼将就来到了我们爬虫基础课的第 6 节课,今天我们来获取微某博信息来进行阅读学习! PS前面几节课的内容在专栏这里,欢迎大家考古:点我 首先第一步我们先登录一下微x博:点我 点击左上角的搜索框,找到你想获取的用户: 大家可以看到这里有两种搜索方式: 1、按照关键字…

linux+Jenkins+飞书机器人发送通知(带签名)

文章目录 如何使用在linux 上安装python 环境发送消息python脚本把脚本上传倒linux上 jenkins 上执行脚本 如何使用 自定义机器人使用指南飞书官网https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot 在linux 上安装python 环境 yum install python3 python…

Skin Shader 使用自动生成的Thickness

Unity2023.2的版本&#xff0c;Thickness 自动化生成&#xff0c;今天测试了一把&#xff0c;确实不错。 1.Render 设置 在Project Settings->Graphics->HDRP Global Settings中 Frame Setting->Rendering->Compute Thickness 打开 2.Layer设置 2.1添加Layer&…

python基本知识学习

一、输出语句 在控制台输出Hello,World! print("Hello,World!") 二、注释 单行注释&#xff1a;以#开头 # print("你好") 多行注释&#xff1a; 选中要注释的代码Ctrl/三单引号三双引号 # print("你好") # a1 # a2 print("Hello,World!&…

【c语言进阶】字符函数和字符串函数知识总结

字符函数和字符串函数 前期背景求字符串长度函数strlen函数strlen函数三种模拟实现 长度不受限制的字符串函数strcpy函数strcpy函数模拟实现strcat函数strcat函数模拟实现strcmp函数strcmp函数模拟实现 长度受限制的字符串函数strncpy函数strncpy函数模拟实现strncat函数strnca…

推理和训练

监督学习与非监督学习 Supervised Learning有监督式学习: 输入的数据被称为训练数据&#xff0c;一个模型需要通过一个训练过程&#xff0c;在这个过程中进行预期判断&#xff0c;如果错误了再进行修正&#xff0c;训练过程一直持续到基于训练数据达到预期的精确性。其关键方法…

【Python机器学习】实验04(2) 机器学习应用实践--手动调参

文章目录 机器学习应用实践1.1 准备数据此处进行的调整为&#xff1a;要所有数据进行拆分 1.2 定义假设函数Sigmoid 函数 1.3 定义代价函数1.4 定义梯度下降算法gradient descent(梯度下降) 此处进行的调整为&#xff1a;采用train_x, train_y进行训练 1.5 绘制决策边界1.6 计算…

echarts遇到的问题

文章目录 折线图-区域面积图 areaStyley轴只有整数y轴不从0开始y轴数值不确定&#xff0c;有大有小&#xff0c;需要动态处理折线-显示label标线legend的格式化和默认选中状态x轴的lable超长处理x轴的相关设置 echarts各个场景遇到的问题 折线图-区域面积图 areaStyle areaStyl…

【JVM】JVM五大内存区域介绍

目录 一、程序计数器&#xff08;线程私有&#xff09; 二、java虚拟机栈&#xff08;线程私有&#xff09; 2.1、虚拟机栈 2.2、栈相关测试 2.2.1、栈溢出 三、本地方法栈&#xff08;线程私有&#xff09; 四、java堆&#xff08;线程共享&#xff09; 五、方法区&…

微信小程序 居中、居右、居底和横向、纵向布局,文字在图片中间,网格布局

微信小程序居中、居右、横纵布局 1、水平垂直居中&#xff08;相对父类控件&#xff09;方式一&#xff1a;水平垂直居中 父类控件&#xff1a; display: flex;align-items: center;//子控件垂直居中justify-content: center;//子控件水平居中width: 100%;height: 400px //注意…

go 查询采购单设备事项[小示例]V2-两种模式{严格,包含模式}

第一版&#xff1a; https://mp.csdn.net/mp_blog/creation/editor/131979385 第二版&#xff1a; 优化内容&#xff1a; 检索数据的两种方式&#xff1a; 1.严格模式--找寻名称是一模一样的内容&#xff0c;在上一个版本实现了 2.包含模式&#xff0c;也就是我输入检索关…