Hbase存储及元数据meta

2023-11-16

Hbase的列族式存储

列族就是多个数据列的组合,列族式可以说是表的schema的一部分,而列不是。Hbase可以说是列簇数据库,在创建表的时候要指定列族,而不需要指定具体的列。

Hbase Table组成:Table = rowkey + family + column + timestamp + value

数据存储模式:(Table, rowkey , family , column , timestamp) -> Value

Hbase数据存储原型

HBase 是一个稀疏的、分布式、持久、多维、排序的映射,它以行键(row key),列键(column key)和时间戳(timestamp)为索引。

Hbase在存储数据的时候,有两个SortedMap,首先按照rowkey进行字典排序,然后再对Column进行字典排序。

SortedMap< RowKey, LIst< SortedMap<Column,List<Value, Timestamp> > >  >

Hbase数据表解析

我们分析下条语句,在hbase shell中,直接按create命令不带参数,hbase会提示建表的语法。

create 'demo:user', {NAME => 'f1', VERSIONS => 5, COMPRESSION => 'SNAPPY',COMPRESSION_COMPACT=>'snappy','REPLICATION_SCOPE'=>1}

- 表名字叫做'demo:user'

- NAME 列族名字是 f1,记住建表一定要指定列族名

- VERSION 是Hbase的表保存的数据版本数,默认保存3个版本

- REPLICATION_SCOPE 值可以为0或者1,0代表不复制,1代表启用复制

- COMPRESSION_COMPACT,COMPRESSION 是表的压缩类型

Hbase提供了三种常用的压缩类型,如下,并且官方给出的压缩率如下:

Hbase数据存储目录解析

我们在搭建Hbase的时候需要在hbase-site.xml中指定其存储目录,Hbase在指定的目录中构造数据数据

- .tmp 当对表进行创建和删除的时候会把表移动到.tmp目录下,然后再进行表操作,他是一个临时的数据交换目录

- WALS 理解为存储Hbase的操作日志

- archive 管理表的归档,这个由一个定时任务定时处理,管理和维护hbase的数据

- corrupt 一般是损坏的数据

- data 存储数据的核心目录

- hbase.id 标识hbase进程

- hbase.version 表名的

- oldWALs 日志已经被持久化之后,日志就被移动到这个目录下等待删除

- data/default 目录存储的是当前Hbase内包含的的表信息

- data/hbase 存储元数据和命名空间

Hbase的元信息表

hbase的元数据表为'hbase:meta',存储在ZooKeeper上面。它也是一张普通的hbase表。它的结构如下:

region是存储数据的最基本单元

Key: 

  • table,key,time 三个部分的组合。因为Hbase根据rowkey排序,所有可用很快的找打对应的表

  • Values: 指向的是region server指向的region

  •  info:regioninfo 对于region的基本信息存储,平时基本上用不到

  •  info:server region服务器的地址和端口,这样就可以找到服务器

  •  info:serverstartcode 数据校验的时候才用得到的里面的值也是会进行变化的。RegionServer挂掉,它也会及时的更新,Hbase表相当于Hbase的第一级索引,是Hbase最重要的系统表。

Hbase读取数据过程

在读数据的时候,客户端首先连接到ZooKeeper上面,然后查找"hbase:meta"表的位置,客户端查询"hbase:meta"表然后找到对应rowKey的Region,然后Region和RegionServer的信息缓存到客户端,在接下来的交互中就无需再次连接查询"hbase:meta"表了,如果缓存过期之后,客户端会发起一个新的查询,然后再缓存到本地。

在读取的时候,其中的WAL功能如下:

在写数据的时候,数据首先被写到日志文件中(write-ahead log),然后写到MemStore中。直接写到MemStore很有可能导致数据丢失的问题,因为它存储在内存中。一旦MemStore满了,MemStore的内容就会刷新到磁盘中的HFile文件中。

在发生故障的时候,WAL的作用就显示出来了。因为WAL存储在HDFS上面,一般会有多份的复制,任何一个服务器有复制的WAL都可以使用。

而HFile代表真实的数据存储文件,这个文件包含不同数量的数据块和固定数量的文件信息块。索引块记录数据和元数据块的偏移量,每一个数据块包含魔数头和许多的KeyValue实例。

以上内容来自:https://vip.kingdee.com/article/9416

参考

  • [Hbase .META table](https://stackoverflow.com/questions/25917701/hbase-meta-table)

  • [Hbase 官方参考](http://hbase.apache.org/book.html#arch.catalog.meta)

  • [Hbase 存储原理剖析](https://www.imooc.com/learn/996)

  • [几张图看懂列式存储](https://blog.csdn.net/dc_726/article/details/41143175)

  • [Hbase模式设计介绍](https://zhuanlan.zhihu.com/p/36235199)

  • [Hbase存储原理剖析](https://www.imooc.com/learn/996)

 

Hbase基本操作(shell操作)

在Hbase中,数据的存储都是二进制,并且列族和列都会根据字典顺序排序

$>hbase shell                            //登录shell终端.
    $hbase>help                                //帮助
    $hbase>help    'list_namespace'            //查看特定的命令帮助,命名空间就如同关系型数据库中的库

    $hbase>list_namespace                    //列出名字空间(如同数据库)
    $hbase>list_namespace_tables 'defalut'    //列出名字空间(如同数据库下的表)

    $hbase>create_namespace 'ns1'            //创建名字空间
    $hbase>help 'create'
    $hbase>create 'ns1:t1','f1'                //创建表,指定空间下,并且指明列族
    $hbase>put 'ns1:t1','row1','f1:id',100        //插入数据,指明RowKey,列族:列
    $hbase>put 'ns1:t1','row1','f1:name','tom'    //

    $hbase>get 'ns1:t1','row1'                    //查询指定RowKey
    $hbase>scan 'ns1:t1'                        //扫描表

     $hbase>flush 'ns1:t1'        //清理内存数据到磁盘。
    $hbase>count 'ns1:t1'        //统计函数
    $hbase>disable 'ns1:t1'        //删除表之前需要禁用表
    $hbase>drop 'ns1:t1'        //

   $hbase>scan 'hbase:meta'    //查看元数据表

不论哪一个shell我们首先要做的就是学会使用它自带的帮助文档,help是Hbase的帮助命令,如果想查看某个命令的用法,就用help '命令'查看。

 

元数据表meta

  HMaster在Hbase集群启动的时候将存放数据的区域region指定到区域服务器HRegionServer节点上,并且将这些信息写到了一张名为meta的元数据表,这张表就想目录一样,用户在存储或是查找数据的时候通过这张表进行查找比对,找到自己操作所在的HRegionServer的区域region进行操作。

$hbase>list_namespace                    //列出名字空间(如同数据库)

发现有两个名字空间是默认的,default和hbase,我们看一下hbase名字空间下的表

$hbase>list_namespace_tables 'hbase'    //列出名字空间(如同数据库下的表)

发现元数据meta表,使用scan来查看一下

$hbase>scan 'hbase:meta'                        //扫描表

发现我们建的所有表信息,都在这里面,包括在哪台HRegionServer节点上,我们拿出一些基本信息看一下

 此图仅供参考,不是原图。

如上图所示,最左边的 ns2:t2,,1532055628871.c4f8bb62217c308f2844aa5fcd599f69. 是HRegionServer节点分配的一个区域region名。从左边开始ns2:t2是我们建的名字空间ns2以及该名字空间下的表t2,紧接着的逗号标识开始行RowKey,如果一张表没有被切割过,就是默认的逗号,表示这张表没有被切割,是一张完整的表,如果被切割了,则切割处或是在所在区域的开始行RowKey。而c4f8bb62217c308f2844aa5fcd599f69则是HRegionServer节点分配的一个区域region编码,由前面的一串字符串按照MD5加密而来。

区域名所对应的右边column=列族:列记录了这个区域的一些基本信息,包括所在的HRegionServer节点s11:16020,开始行STARTKEY=>,ENDKEY=>,(都是逗号表示这个表没有被切割,从开始到结束)以及区域编码c4f8bb62217c308f2844aa5fcd599f69。有了这些基本信息我们就能够实时的读写了,根据匹配最左边的(例如ns2:t2,开始行RowKey,1532055628871.c4f8bb62217c308f2844aa5fcd599f69.)找到区域所在地HRegionServer节点地址,然后从HRegionServer节点上所对应的区域中查找存储数据。

Hbase既然将数据存储到了HDFS上,那目录结构是什么样子的呢?我们在搭建集群时候,已经配置在了hbse-site.xml中

在我们的HDFS的webui界面查找一下,发现其表数据存储目录结构格式为:hdfs://s10:8020/hbase/data/${名字空间}/${表名}/${区域名称}/${列族名称}/${文件名}

truncate 对表预分区信息的影响

使用hbase命令truncate 'tablename'后, 预分区信息没了,本来这张表进行了预分区,但是truncate之后表的预分区信息就没有了。要保留分区应该使用 truncate_preserve 'tablename'命令,如果直接使用truncate 'tablename'是不会保留分区的

create 'staff','info','partition1',SPLITS => ['1000','2000','3000','4000']

scan 'hbase:meta',{COLUMNS=>'info:regioninfo',FILTER=>"RowFilter(=, 'substring:staff,')" }

truncate_preserve 'staff'

truncate ‘staff’

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hbase存储及元数据meta 的相关文章

  • 大数据毕业设计:python微博舆情分析系统+可视化+情感分析+爬虫+机器学习(源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 扬帆证券:突发利好!外资重大转变,A股收到多份喜报

    A股财报季 利好音讯密集传来 1月16日晚间 A股多家上市公司披露了成绩预告 其间成绩预增 扭亏等利好公告数量占比超80 其间 普瑞眼科公告 估计2023年净赢利同比添加高达1163 98 1285 51 别的 多家上市公司公告称 估计20
  • AI在保护环境、应对气候变化中的作用

    对于AI生命周期数据领域的全球领导者而言 暂时搁置我们惯常的AI见解和AI生命周期数据内容产出 来认识诸如世界地球日这样的自然环境类活动日 似乎是个奇怪的事情 我们想要知道 数据是否真的会影响我们的地球环境 简而言之 是 确实如此 但作为一
  • 使用企业订货软件的担忧与考虑|网上APP订货系统

    使用企业订货软件的担忧与考虑 网上APP订货系统 网上订货系统担心出现的问题 1 如果在订货系统中定错 多 货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误 但是网上订货平台为大家提供了很多的解决方案 其中对于订单的修改
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告
  • 知道hadoop中数据节点的磁盘空间吗?

    有没有一种方法或任何命令可以让我了解每个数据节点的磁盘空间或总集群磁盘空间 我尝试了命令 dfs du h 但似乎我没有权限对许多目录执行它 因此无法获取实际的磁盘空间 From UI http namenode 50070 dfsheal
  • Hive 数据存储在哪里?

    我对配置单元存储数据的位置有点困惑 它将数据存储在 HDFS 还是 RDBMS 中 Hive Meta 存储是否使用 RDBMS 来存储 Hive 表元数据 提前致谢 Hive 数据存储在其中之一Hadoop 兼容文件系统 https cw
  • Hadoop 框架中使用的属性的完整列表

    我正在对 Hadoop 框架进行一些研究 我想问一下框架中可以使用的属性 例如 io sort mb io sort record percent etc 我可以参考这个框架的整个属性列表吗 非常希望有人能帮助我 另外 我想问一下 io s
  • 如何将小型 ORC 文件组合或合并为较大的 ORC 文件?

    SO 和网络上的大多数问题 答案都讨论使用 Hive 将一堆小 ORC 文件合并为一个较大的文件 但是 我的 ORC 文件是按天分隔的日志文件 我需要将它们分开 我只想每天 汇总 ORC 文件 HDFS 中的目录 我最有可能需要用 Java
  • 解析数百万个小 XML 文件

    我有 1000 万个小 XML 文件 300KB 500KB 我在 Mapreduce 中使用 Mahaout 的 XML 输入格式来读取数据 并使用 SAX 解析器进行解析 但处理速度非常慢 使用输入文件的压缩 lzo 有助于提高性能吗
  • 如何在 Amazon EMR 上重新启动 HDFS

    我对 Amazon EMR 集群上的 HDFS 设置进行了一些更改 我想重新启动名称节点和数据节点以使更改生效 我无法在名称节点 主节点 和数据节点上找到任何启 动和停止脚本来执行此操作 应该怎样重启集群呢 在 EMR4 上 在主控主机上运
  • PySpark:使用 newAPIHadoopFile 从多行记录文本文件中读取、映射和减少

    我正在尝试解决一个类似于这个帖子 https stackoverflow com questions 31227363 creating spark data structure from multiline record 我的原始数据是一
  • Hadoop 块大小 vs 分割 vs 块大小

    我对 Hadoop 的概念有点困惑 有什么区别Hadoop Chunk size Split size and Block size 提前致谢 块大小和块大小是一样的 分体尺寸可能不同于块 块 size 地图缩减算法不适用于文件的物理块 它
  • 从 hdfs 读取 ocr 文件后令人难以置信地触发数据帧

    我在 Ambari 上使用 Spark 2 1 1 和 hadoop 2 6 时遇到问题 我首先在本地计算机上测试了我的代码 单节点 本地文件 一切都按预期工作 from pyspark sql import SparkSession sp
  • HDFS 作为 cloudera 快速入门 docker 中的卷

    我对 hadoop 和 docker 都很陌生 我一直致力于扩展 cloudera quickstart docker 镜像 docker 文件 并希望从主机挂载一个目录并将其映射到 hdfs 位置 以便提高性能并将数据保存在本地 当我在任
  • 格式化 HDFS 时出现 UnknownHostException

    我已经使用以下命令在伪分布式模式下在 CentOS 6 3 64 位上安装了 CDH4指示 https ccp cloudera com display CDH4DOC Installing CDH4 on a Single Linux N
  • HBase如何实现对HDFS的随机访问?

    鉴于HBase是一个数据库 其文件存储在HDFS中 那么它如何实现对HDFS中单个数据的随机访问呢 这是通过什么方法实现的呢 From Apache HBase 参考指南 http hbase apache org book archite
  • 无法使用 PDI 步骤连接到 HDFS

    我已经配置成功了Hadoop 2 4 in an Ubuntu 14 04 虚拟机 from a 视窗8系统 Hadoop 安装工作绝对正常 而且我还可以从 Windows 浏览器查看 Namenode 附图如下 所以 我的主机名是 ubu
  • 使用 Python3 与 HDFS 交互的最佳模块是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我看到有 hdfs3 snakebite 和其他一些 哪一个支持最好且最全面 据我所知 可能性并不像人们想象的那么多 但我建议使用官方的Pyth
  • Spark 在 WholeTextFiles 上创建的分区少于 minPartitions 参数

    我有一个文件夹 里面有 14 个文件 我在一个集群上使用 10 个执行器运行 Spark Submit 该集群的资源管理器为 YARN 我创建了我的第一个 RDD 如下所示 JavaPairRDD

随机推荐

  • 基于python管理系统论文_基于Python网络爬虫的设计与实现毕业论文+源码-学生毕业作品网站...

    本课题的主要目的是设计面向定向网站的网络爬虫程序 同时需要满足不同的性能要求 详细涉及到定向网络爬虫的各个细节与应用环节 搜索引擎作为一个辅助人们检索信息的工具 但是 这些通用性搜索引擎也存在着一定的局限性 不同领域 不同背景的用户往往具有
  • 第1章-Java语言概述

    Java基础知识图解 1 Java语言概述 1 1 Java简史 是SUN Stanford University Network 斯坦福大学网络公司 1995年推出的一门高级编程语言 是一种面向Internet的编程语言 Java一开始富
  • Unity的 Input.GetAxis使用

    使用GetAxis可获得很多常用的设备输入 鼠标左右键 滚轮 鼠标移动增量 空格跳跃 WSAD 可用这些输入增量进行操作控制 比如物体的前后左右移动 镜头前进后退 缩放观察 物体拖拽旋转等 转载于 https www cnblogs com
  • postman 执行下载接口时闪退问题

    下载内容过多时容易导致postman闪退 在试验接口正确性时不要着急 可以对下载日志大小进行一个缩减
  • vmware14安装黑苹果max ox x 10.13懒人版教程

    准备材料 vmware 14 0 链接 https pan baidu com s 1 fjAngjUZ9HihzboBR0eJA 提取码 wwnn vmware文件名后面有永久可用的序列号 14 0目前最高支持mac10 13 故使用这个
  • UVA 10970 - Big Chocolate

    Root AOAPC I Beginning Algorithm Contests Training Guide Rujia Liu UVA 10970 Big Chocolate 题意 计算将一块n m的巧克力切成n m块所需的次数 方法
  • Android studio报错:e: org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error

    Android studio运行时报错 e org jetbrains kotlin codegen CompilationException Back end JVM Internal error wrong bytecode gener
  • mtu设置--解决部分网站打不开的问题

    资料一 一 常见问题介绍 1 什么情况下需要改MTU 如果您的动态域名网站不能被正常访问 很难连接 连接上也非常慢 请试试把DirectSend设为 总是关闭 如果关闭后可以正常访问 这种情况就需要修改MTU 如果您的网站连接正常 只是下载
  • 达尔文商品体系

    一 背景介绍 最初是由天猫发起的 针对天猫品牌混乱 原始商品信息错误和商家重复铺货 商家的宝贝 库存价格等信息杂乱无章 商家发布商品流程冗长 管理商品非常不便 消费者也很难找到确定的商品相关信息 前台的搜索应用困难等问题 旨在规范商品信息确
  • 批量爬虫采集大数据的技巧和策略分享

    作为一名专业的爬虫程序员 今天主要要和大家分享一些技巧和策略 帮助你在批量爬虫采集大数据时更高效 更顺利 批量爬虫采集大数据可能会遇到一些挑战 但只要我们掌握一些技巧 制定一些有效的策略 我们就能在数据采集的道路上一帆风顺 1 设立合理的请
  • 服务器虚拟机无法连接msk,无法连接mks【图文详解】

    喜欢使用电脑的小伙伴们一般都会遇到win7系统无法连接mks的问题 突然遇到win7系统无法连接mks的问题就不知道该怎么办了 其实win7系统无法连接mks的解决方法非常简单 按照1 首先检查了下 windows的防火墙设置 可以看到Vm
  • QT笔记——QProcess学习

    我们常常想通过某一个类 来启动一个外部进程 本文将讲解如何通过QProcess来进行启动外部进程 一 了解QProcess QProcess是Qt框架提供的一个类 用于在应用程序中执行外部进程 它提供了一系列函数来启动 控制和与外部进程进行
  • axios请求超时

    axios请求超时 设置重新请求的完美解决方法 自从使用Vue2之后 就使用官方推荐的axios的插件来调用API 在使用过程中 如果服务器或者网络不稳定掉包了 你们该如何处理呢 下面我给你们分享一下我的经历 具体原因 最近公司在做一个项目
  • Spring Cloud Gateway学习

    文章大纲 为什么需要网关 传统的单体架构只有一个服务开放给客户端调用 但是在微服务架构体系中是将一个系统拆分成多个微服务 那么作为客户端如何去调用这些微服务呢 如果没有网关的存在 就只能在本地记录每个微服务的调用地址 无网关的微服务架构存在
  • C++之MFC学习

    问题1 stdafx h是怎么引入进来的 define h与stdafx h之间的关系 为什么在MuisicPlayer cpp中引入stdafx h 问题2 enum class的使用 问题3 列表初始化 int window trans
  • linux重做系统分区,搜索所有硬盘分区上的linux系统,重新安装grub的方法

    电脑硬盘上 非vmware 安装了Ubuntu Fedora Debian openSUSE linuxMint Mageia elementaryOS PearOS ZorinOS Bodhi Manjaro Sparky linuxDe
  • 【星球精选】如何高效构建 Roam 与 theBrain 间细粒度双向链接?

    Roam Research 作为卡片盒很好用 只是目前缺乏中观网络可视化能力 老牌知识管理应用TheBrian 可以很好补充上这个短板 因此我希望将二者结合起来使用 只是这个过程 有些曲折 在 Obsidian 中的 excalibrain
  • redis可视工具AnotherRedisDesktopManager的使用

    redis可视工具AnotherRedisDesktopManager的使用 系列文章 macm1安装redis过程 springboot整合redis及set map list key value和实体类操作 redis可视工具Anoth
  • 龙书11_chapter_6 一:一般绘制流程

    先看BoxDemo的前几节 1 vertex input Layout 2 vertexBuffer 3 IndexBuffer 4 vertexShader 5 constant Buffer 6 pixelShader 7 render
  • Hbase存储及元数据meta

    Hbase的列族式存储 列族就是多个数据列的组合 列族式可以说是表的schema的一部分 而列不是 Hbase可以说是列簇数据库 在创建表的时候要指定列族 而不需要指定具体的列 Hbase Table组成 Table rowkey fami