当前位置: 首页 > news >正文

大数据之HBase(二)

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));//删除某个列族DeleteFamilydelete.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的数据//获取rowkeyBytes.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);

相关文章:

大数据之HBase(二)

Master详细架构 位置&#xff1a;namenode实现类&#xff1a;HMaster组成 负载均衡器&#xff1a;通过meta了解region的分配&#xff0c;通过zk了解rs的启动情况&#xff0c;5分钟调控一次分配平衡元数据表管理器&#xff1a;管理自己的预写日志&#xff0c;如果宕机&#xff…...

前后端数据传输格式(下)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上篇主要复习了HTTP以及…...

mysql pxc高可用离线部署(三)

pxc学习流程 mysql pxc高可用 单主机 多主机部署&#xff08;一&#xff09; mysql pxc 高可用多主机离线部署&#xff08;二&#xff09; mysql pxc高可用离线部署&#xff08;三&#xff09; mysql pxc高可用 跨主机部署pxc 本文使用docker进行安装&#xff0c;主机间通过…...

XXL-JOB 日志表和日志文件自动清理

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…...

常用sql记录

备份一张表 PostgreSQL CREATE TABLE new_table AS SELECT * FROM old_table;-- 下面这个比上面好&#xff0c;这个复制表结构时&#xff0c;会把默认值、约束、注释都复制 CREATE TABLE new_table (LIKE old_table INCLUDING ALL) WITHOUT OIDS; INSERT INTO new_table SELE…...

设备温度和振动综合监测:温振一体式传感器的优点和应用

随着工业设备的复杂性和自动化程度的提高&#xff0c;对设备状态监测的需求也日益增加。温振一体式传感器作为一种集振动和温度监测于一体的传感器&#xff0c;具备多项优势&#xff0c;因此在工业设备状态监测领域得到广泛应用。 温振一体式传感器基于振动传感器和温度传感器的…...

彻底解决ModuleNotFoundError: No module named ‘exceptions‘【Bug完美解决】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结心得项目场景: 根据本文可找到bug原因并彻底解决**ModuleNotFoundError: No module named ‘exceptions‘**Bug 报错: E:\Anconda\python.exe c:\Users\24190\PycharmProjects\pythonProject4py尝试 gong…...

yarn和npm的区别

2023-12-8 yarn和npm的区别 是常用的包管理工具&#xff0c;用于node.js项目中安装、管理、和更新依赖项 有以下几个区别&#xff1a; 性能和速度&#xff1a;在包的安装和下载方面&#xff0c;yarn比npm更快速&#xff0c;yarn通过并行下载和缓存等优化策略&#xff0c;可以…...

设计图中时序图

设计图中的时序图通常用于展示两个或多个对象之间的交互和消息传递的顺序。它是一种用于描述软件或系统中的并发性和时序行为的工具。 以下是一个简单的时序图的示例&#xff1a; 首先&#xff0c;在时序图中创建两个对象&#xff0c;例如"对象A"和"对象B&quo…...

反射实现tomcat

获取类信息的方法 1.通过类对象 x.getClass() 2.通过class.forname方法 Class.forname(className);这里className是存储类名的字符串 3.通过类名.class 类名.class 通过类名创建对象 类名.newInstance&#xff08;&#xff09;&#xff1b; 反射可以看到类的一切信息&#xff1…...

Ubuntu 安装 CUDA 和 cuDNN 详细步骤

我的Linux系统背景&#xff1a; 系统和驱动都已安装。 系统是centos 8。查看自己操作系统的版本信息&#xff1a;cat /etc/issue或者是 cat /etc/lsb-release 用nvidia-smi可以看到显卡驱动和可支持的最高cuda版本&#xff0c;我的是12.2。驱动版本是535.129.03 首先&#…...

ArkTS快速入门

一、概述 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以…...

HTTP不同场景下的通信过程和用户上网认证过程分析

目录 HTTP不同场景的通信过程 HTTP正常交互过程 HTTP透明加速传输过程 HTTP代理服务器场景下交互过程 通过AC对上网用户不同场景的认证过程 AC上网认证正常交互过程 通过Cookie实现免认证交互过程 代理服务器场景下HTTP密码认证交互过程 HTTP不同场景的通信过程 HTTP、…...

VR 实现 Splash Screen 效果

文章目录 背景官方实现逆向分析 背景 手机 App 在实现 Splash Screen 的时候&#xff0c;目前都有成熟的方案可以参考&#xff0c;但是在做 VR 开发时&#xff0c;要如何实现一个 App 自己的 Splash Screen &#xff0c;下面是我们基于 PICO & OCULUS 进行业务开发时经过探…...

HarmonyOS学习--TypeScript语言学习(一)

注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 本章目录如下&#xff1a; 一、TypeScript语言…...

【C语言】函数递归详解(一)

目录 1.什么是递归&#xff1a; 1.1递归的思想&#xff1a; 1.2递归的限制条件&#xff1a; 2.递归举例&#xff1a; 2.1举例1&#xff1a;求n的阶乘&#xff1a; 2.1.1 分析和代码实现&#xff1a; 2.1.2图示递归过程&#xff1a; 2.2举例2&#xff1a;顺序打印一个整数的…...

WT588F02B-8S语音芯片助力破壁机:智能声音播放提示IC引领健康生活新潮流

在追求健康饮食的时代潮流中&#xff0c;破壁机作为榨汁、搅拌的重要厨房电器&#xff0c;融入智能技术的趋势不断加强。唯创知音的WT588F02B-8S语音芯片作为声音播放提示IC&#xff0c;为破壁机注入了更智能、便捷的声音提示功能&#xff0c;引领用户迈入健康生活的新潮流。 …...

NXP iMX8M Plus Qt5 双屏显示

By Toradex胡珊逢 简介 双屏显示在显示设备中有着广泛的应用&#xff0c;可以面向不同群体展示特定内容。文章接下来将使用 Verdin iMX8M Plus 的 Arm 计算机模块演示如何方便地在 Toradex 的 Linux BSP 上实现在两个屏幕上显示独立的 Qt 应用。 硬件介绍 Verdin iMX8M Plu…...

RepidJson中Writer类、FilewriteStream类、 PrettyWriter类的区别

rapidjson是一个C的JSON解析库&#xff0c;可以用于解析和序列化JSON数据。 Writer是rapidjson中一种基本的输出流&#xff0c;用于将JSON数据输出到字符串或文件中。 FileWriteStream是一个Writer的子类&#xff0c;它专门用于将JSON数据输出到文件中。相比于普通的Writer&a…...

IntelliJ idea卡顿解决,我遇到的比较管用的方案

Setttings> Build, Execution,Deployment>Debugger> Data Views> Java 取消 Enable "toString()" object view; Speed up debugging in IntelliJ Yesterday, I observed painfully slow debugging in IntelliJ. Every step over or step in took almost…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...