IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hbase -> 正文阅读

[大数据]Hbase


一、HBase前置知识

  1. mysql是b+树存储?
  2. Hbase之所以快是因为?
    1. ?利用了顺序io
    2. ?利用了内存存储 将上一次查询的数据放入内存,下次直接在内存查看


二 、 Hbase简介

?面向行就是 类似于mysql那种,一行存储许多字段,即使那个字段没有初始化,他也会给他占用存储空间,比较浪费

面向列 后面说 但是他类似于k,v键值对

非结构化数据 比如爬虫爬的html标签

半结构化数据 json 每个json里面的kv都是不一样的

结构化数据 就是mysql那种 每条信息的字段我都是自定义好的


?三、数据模型

?Row Key就是一行 一个记录

Time Stamp就是时间戳 表明某一个时间点我插入的数据

CF1是列族的意思 q1 q2是列名 val1 是具体的值

列族+列名可以固定一个属性值,但由于时间戳的存在,他的值不唯一

他的查询就是 先看行号 再看是哪个列族,哪个列名 哪个时间戳

3.1 Row Key

?字典序就是不同字符的ascll码值顺序比较 如 a在b前面 1在2前面??

3.2?Column Family列族& qualifier列

一个列族里面可以有一堆列?

3.3?Timestamp时间戳

3.4 cell单元格


四、Hbase架构

?client客户端负责对Hbase读写东西??

Hbase主从架构,HMaster主? HRegionServer是从

HLog类似于mysql里的日志, HRegion类似于mysql里的一个表,store类似于列族,MemStore就是存在内存,StoreFile存在磁盘

写具体流程:

  • zookeeper里会有 元数据的存储地址(元数据他就是指示我某个资源在某个地方 类似于索引的一种东西)
  • 第一次访问 先访问zookeeper获取元数据存在哪个 HRegionServer里面
  • 第二次就去对应的HRegionServer找到我的目标表对应的地址
  • 第三次就可以去目标表所在HRegionServer直接进行读写
  • 找到目标表 也要找到目标的列族 也就是store,对其Memstore进行读写。
  • MemStore有一个大小限制,只有在溢写的情况或者用户强行存储才会持久化到磁盘StoreFile里面。 如果这些文件太小或者达到某一个阈值时候 也会有一个合并文件compaction的操作 他包括major和minor(合并大规模文件 小规模数量文件)

通常zookeeper也会存储少量元数据,比如在某次访问后,可以将对应表名存在zookeeper中,如果我访问某个表问了zookeeper,他告诉我表不存在 那我直接返回

写的时候 肯定是先写日志Hlog 防止出现断电内存丢失这种情况 然后才进行读写,Hlog存在内存,对接有一个Logsync这样一个线程,每一秒就溢写Hlog的内容到磁盘,这样就能最大限度的防止数据丢失

读具体流程:

  • 走到HRegionServer并找到对应列族store了,读的话 Memstore除了是写的缓存,他也可以看做一部分读缓存
  • 因为 你当时写的时候 可能还没有进行溢写,那么你刚才写的东西磁盘没有 只有内存有,所以读会先访问Memstore
  • 看完Memstore后再看? 一个blockcache这个读缓存?
  • blockcache没有再去看 磁盘Hfile
  • 通常 为了后续查看的方便,刚读的内容会放进blockcache里? ?它采用是LRU原则。 这就有一个麻烦的地方,以后我再读Hbase的时候,就不太能用select *这种查看全部信息,因为每次查看完我都会更新blockcache,浪费了大量时间不说 而且我前面好不容易缓存的内容也会被刷写掉。? ?但是 blockcache也有一定的机制,他的内存为了支持LRU会分为三块,一块是访问一次就会放进去的,另外几块是访问多次才会刷写进内存,所以select *只能是会对访问一次那个块造成影响

五、Client和zookeeper

?client的cache并不是上面的blockcache

六、?Master和RegionServer

?Master主要是观察各个regionServer的状态,保证能做到负载均衡。或者是哪个regionserver挂掉了(他挂了数据不会丢,因为看起来是数据存在Hbase,其实还是存在了HDFS的DataNode里) 他会将那个传hdfs的接口黑别的regionserver。

常见的负载均衡案例:? 比如常用的表都只在一个regionserver里,我的master就要将这些表分一下 给别的server。

又或者是 某一个表里面一直不停的在存数据,变得异常巨大,这时候 regionserver就会把这个大表一分为二,然后去问问master哪个server空闲啊,我把这半个表送给他们。

?每次溢写都是写一个新的文件 并存在hdfs里面? 文件合并(在hdfs里面合并的)也有说道 慢慢看

这个Hfile合并操作非常有必要,因为 比如我第一次溢写 int a = 1存成一个文件放入磁盘,然后我读取这个文件,我的blockcache里面a是1

第二次溢写 a = 2了,又是一个新的文件了

那我第二次读取的时候 我先读memstore啥也没有,读取blockcache是之前的旧数据了,这就很麻烦

所以经常会进行一个文件的合并,而且合并之后 我会保证数据是最新的(第一个文件a=1,第二个a=2,合并之后只有a=2),除此之外 好像Hbase也有一个机制 类似于索引 即便没有合并之前我读的时候,也会看一看这个值是否更改过,索引是blockCache和磁盘的索引,?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:22:24  更:2022-10-22 21:26:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/4 6:21:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码