大数据之HBase(二)

news2024/11/16 0:46:05

Master详细架构

  • 位置:namenode
  • 实现类:HMaster
  • 组成
    • 负载均衡器:通过meta了解region的分配,通过zk了解rs的启动情况,5分钟调控一次分配平衡
    • 元数据表管理器:管理自己的预写日志,如果宕机,让备用节点读取日志
    • 预写日志管理器WAL:32M或1小时滚动一次

RegionServer架构

  • 位置:datanode
  • 实现类:HRegionServer
  • 读写过程
    • 写过程:先把操作记录到WAL,然后记录到HDFS中的WAL预写日志中
    • 读过程:一般从Block cache或Mem store中读取高频数据,否则再读取磁盘文件
  • 必要服务
      1. Region拆分,合并
    • mem store刷写
    • wal预写日志滚动

HBase写流程

  1. 客户端向zk发送请求创建连接
    • 读取zk存储meta表由哪个region server管理
    • 访问103读取meta表
    • 将读取的meta表作为属性保存在连接中
    • 如果meta发生变化需要重新读取缓存
  2. 客户端发送put写操作请求
  3. 内存中将请求写入wal并落盘
  4. 内存将put请求写入mem store,此时已经返回操作成功的ack, 根据rk排序
  5. 等待触发刷写条件,写入对应的HDFS中的store,每次刷写会生成一个文件。

HBase读流程

  1. 客户端向zk发送请求创建连接
    • 读取zk存储meta表由哪个region server管理
    • 访问103读取meta表
    • 将读取的meta表作为属性保存在连接中
    • 如果meta发生变化需要重新读取缓存
  2. 客户端发送put读操作请求
  3. 读取Block cache
  4. 读取mem store
  5. 从磁盘中读取数据
  6. 合并这三个地方的数据,进行数据版本的合并
    • HFile带有索引文件,读取rk挺快
    • block cache会缓存之前读取的内容和元数据信息,如果HFile没有发生变化,则不需要再次读取
    • 布隆过滤器:通过hash的方式排除掉一些肯定没有需要读取文件的位置

刷写Flush流程

  1. 如果一个store,即一个列族的大小超过128M,就会触发刷写
  2. 所有memstore的大小根据高低水位线触发,region会按照memstore的大小顺序依次刷写,知道总大小减小到一定范围
  3. 固定一个小时刷写一次
  4. 根据wal文件的数量进行刷写

文件结构

  1. hbase hfile查看命令参数
  2. hbase hfile -m -p 路径/文件名:查看文件信息

storeFile合并

  1. 小合并:合并部分文件,减少文件的个数,加快读取效率;小合并频率高,每次刷写都会判断执行
    • 文件个数3~10
    • 文件大小128M之间,追求小合并快速进行
  2. 大合并:合并所有文件,定期清理掉过期和删除的数据;默认7天执行一次大合并
    • 后期可以禁用
    • 手动使用major_compact命令来控制合并时间点来进行大合并

Region拆分

  • 原因:为了避免单个regioin的数据量太大
  • 方式:
    1. 预分区(自定义分区)
    2. 系统分区拆分

系统拆分

实际操作:创建文件引用,不会挪动数据,两个region都由原先的regionServer管理。实际的挪动会到下次合并操作时处理。

  • 拆分策略
    • 按照常量大小拆分,首次拆分太晚,导致分布式效果很差
    • 根据某个store的总大小,然后根据换算公式计算,大小根据分区个数的指数性增长
    • 首次256M拆分,后续10G拆分

预分区(自定义分区)

根据实际数量、集群的规模等确定分区数。
建表时就创建好分区,防止表中数据被划分到不同分区。如果不指定,默认一个分区,随着表的变大,系统会自动拆分。

  • create 'staff1','info', SPLITS => ['1000','2000','3000','4000']
    在这里插入图片描述

HBase优化

RowKey设计

由于rowkey是单调递增的,如果不做设计的话,后续分区时,虽然有多个分区,数据仍然只会往最后一个分区插入,这个就是热点分区问题。

设计原则

  1. 唯一性:每条数据的rowkey必须是唯一的
  2. 散列性:将需求的不变量放到rowkey的前面,变量放到后面。
  3. 长度:rowkey是冗余存储的,rowkey越长,冗余数据越多

HBase经验

  1. Block cahce负责读
  2. mem store负责写

HBase API

删除

public static void testDeleteData(String namespaceName, String tableName,
                                      String rk,String cf, String cl) throws IOException {

        //获取Table对象
        TableName tn = TableName.valueOf(namespaceName, tableName);
        Table table = connection.getTable(tn);

        Delete delete = new Delete(Bytes.toBytes(rk));
//        delete.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cl));
//        delete.addColumns(Bytes.toBytes(cf),Bytes.toBytes(cl));

        //删除某个列族DeleteFamily
        delete.addFamily(Bytes.toBytes(cf));

        //删除某个列DeleteColumns
//        delete.addColumns(Bytes.toBytes(cf),Bytes.toBytes(cl));



        table.delete(delete);

        System.out.println("删除成功");
        table.close();
    }

查询

  1. get
Result result = table.get(get);
List<Cell> cells = result.listCells();
for(Cell cell : cells){
	//处理每个Kv的数据
	//获取rowkey
	Bytes.toString(CellUtil.cloneRow(cell));
	//获取列族名
	Bytes.toString(CellUtil.cloneFamily(cell));
	//获取列名
	Bytes.toString(CellUtil.cloneQualifier(cell));
	//获取数据值
	Bytes.toString(CellUtil.cloneRValue(cell));
}
  1. scan: 注意要添加起始rowkey和结束rowkey, 传入字符串类型参数即可,使用时使用Bytes.toBytes()转换为byte类型。
Scan scan = new Scan();
scan.withStartRow(Bytes.toBytes(startRow))
.withStopRow(Bytes.toBytes(endRow));
table.getScanner(scan);

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

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

相关文章

Hertz 整合swagger

文章目录 Swagger安装使用用法项目demoSwagger注释用法通用API信息 swag命令行参数swagger路由配置 Swagger 安装 go get 安装可执行文件需要配合 GOPATH 模式工作。 go get github.com/swaggo/swag/cmd/swag 因为从 Go 1.17 开始&#xff0c;在 go mod 模式下通过 go get 下…

java ssh犯罪数据可视化系统eclipse开发mysql数据库MVC模式java编程网页设计

一、源码特点 JSP ssh犯罪数据可视化系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.…

SpringBoot整合Activiti7——消息事件(十)

文章目录 消息事件开始事件中间事件边界事件代码实现xml文件测试流程流程执行步骤 消息事件 消息事件只有一个接收者&#xff0c;消息具有名字与载荷。 信息会储存在 act_ru_event_subscr 表中。 <!-- 定义消息 --> <message id"msgId1" name"msgName…

【mysql】mysgld.log文件太大怎么办

我们有一台测试服务器。跑着一个msyq&#xff0c;发现没有空间了。差看日志文件占用了很多。 怎么破 使用下面命令 echo "" >mysqld.log 执行命令后

B.牛牛排队伍——模拟双链表

当前位置: 首页 > news >正文 B.牛牛排队伍——模拟双链表 news 2023/12/1 15:14:37 分析 题目其实很简单,就是双链表的增删查,但是刚开始,直接vis标记删除元素,查找一个位置的前一个用的while不断向前找,但是TLE;毕竟O(n*k)的复杂度,一开始没有考虑时间复杂度…

分享82个节日PPT,总有一款适合您

分享82个节日PPT&#xff0c;总有一款适合您 82个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1boDTl3PiHFXLJ890CoUfJA?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。…

【Matlab】如何快速入门一项新技能-以Matlab/Simulink入门为例

目录 1. 引言 2. 背景 3. 快速学习并完成开发 3.1 了解需求&#xff0c;知道要干什么 3.2 了解Matlab/Simulink基本功能 第一步&#xff0c;查看Matlab的中文网站中文网站https://www.ilovematlab.cn/resources/对Matlab/Simulink有了一个初步认识。 3.3 实现一个最简单…

07-原型模式-C语言实现

UML图&#xff1a; 代码实现&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>// 原型接口 typedef struct {void* (*clone)(void*); } Prototype;// 具体原型类 typedef struct {Prototype prototype;char* name;int age; } Concr…

列表插槽使用

{label: 是否展示,prop: isShow,solt: true, }<!--自定义列--><template slot-scope"scope" slot"isShow"><div style"color: red;cursor: pointer" focus"getIsShow(scope.row)" ><el-switch v-model"sco…

Linux部分基础指令讲解

目录 1.echo指令 2.more指令 3.less指令&#xff08;重要&#xff09; 4.head指令 5.tail指令 6.管道| 7.时间相关的指令 8.cal指令 9.find指令 10.grep指令 1.echo指令 我们先看效果 如图所示我们可以看到显示器显示出了hellow world和hellow这两句话&#xff0c;我们的echo的…

图书馆座位预约时间冲突提示(前后端全) 前端elementUI 时间选择器只显示时和分,SQL实现时间冲突判断

背景 帮客户定制项目&#xff0c;要实现图书馆预约座位的功能。 功能描述如下&#xff1a;学生选择开始时间和结束时间&#xff0c;只选择小时和分钟&#xff0c;提交预约后&#xff0c;如果该时间有冲突提示学生修改预约时间。 问题 前端样式选择的是elmentUI&#xff0c;但…

VBA技术资料MF90:在PowerPoint中完成多重查找替换

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

Mysql 行转列,把逗号分隔的字段拆分成多行

目录 效果如下源数据变更后的数据 方法第一种示例SQL和业务结合在一起使用 第二种示例SQL和业务结合在一起使用 结论 效果如下 源数据 变更后的数据 方法 第一种 先执行下面的SQL&#xff0c;看不看能不能执行&#xff0c;如果有结果&#xff0c;代表数据库版本是可以的&…

CSS选择器十二种方法

相信大家对元素应该是不陌生的&#xff0c;当我们页面中&#xff0c;我们想要布局&#xff0c;给元素添加样式的时候&#xff0c;我们应该怎么获取到指定元素呢&#xff1f; 优先级&#xff1a;ID 选择器 > 类选择器 > 标签选择器 > 通配符 1.元素选择器 通过标签名…

lv11 嵌入式开发 中断控制器14

目录 1 中断控制器 ​编辑 2 Exynos4412下的中断控制器 2.1 概述 2.2 特征 ​编辑 2.3 中断状态 2.4 中断类型 2.5 中断控制器GIC中断表 3 中断控制器寄存器详解 3.1 ICDDCR&#xff08;Interrupt Controller Distributor Control Register&#xff09; 3.2 ICDISER…

备战春招——12.1 算法

动态规划 动态规划的核心思想就是 本次只由上一次决定。 爬楼梯 第3阶由&#xff08;第1节2&#xff09;和&#xff08;第二节1&#xff09;&#xff0c;不要想着往下迭代&#xff0c;不然那是个无穷底。所以f(x)f(x-1)f(x-2) (x>2)。所以就是当前只与上个操作相关。 cla…

docker安装卸载使用全教程

docker安装卸载使用全教程 1.确定你是Centos7及以上版本 cat /etc/redhat-release2.yum安装gcc相关依赖 yum install -y gcc Yum install -y gcc-c3.安装需要的软件包 sudo yum install -y yum-utils4.设置stable镜像仓库 这里设置的是国内阿里云的镜像库&#xff0c;国外的…

【计算机网络笔记】PPP协议

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

vue3中如何实现事件总线eventBus

使用插件 由于vue3中 “$ on”&#xff0c;$ off 和 $ once 实例方法已被移除&#xff0c;组件实例不再实现事件触发接口 所以我们可以使用官方推荐的这个第三方库实现同样的效果 mitt https://github.com/developit/mitt 安装 pnpm install mitt -S挂载全局写法 main.ts 初始…

[全球首款]开源智能串口屏方案发布

基于 AWTK 和 AWTK-MVVM 实现的串口屏方案。 界面修改数据&#xff0c;自动通知 MCU。 MCU 修改数据&#xff0c;自动更新界面。 1. 主要特色&#xff1a; 1.1 开发 强大的界面设计器 AWStudio。基于 AWTK 实现强大的 GUI 功能&#xff08;多窗口、输入法、动画和各种控件&am…