你应该知道的 HBase 基础,都在这儿了

阿里妹导读:2006 年10 月Google 发布三架马车之一的《Bigtable:A Distributed Storage System for Strctured Data》论文之后,Powerset 公司就宣布 HBase 在 Hadoop 项目中成立,作为子项目存在。后来,在2010 年左右逐渐成为 Apache 旗下的一个顶级项目。可能是实际应用中包装得太好,很多人对于 HBase 的认识止步于 NoSQL 。今天,蚂蚁金服的南俊从基础开始讲起,希望有助于增强大家在实际业务中对 HBase 的理解。

一、 HBase 简介

HBase 名称的由来是由于其作为 Hadoop Database 存在的,用来存储非结构化、半结构化数据。

要想知道 HBase 的用途,就需要看一看其在 Apache 的 Hadoop 生态系统中的位置,可以看到 HBase 是构建在 HDFS 之上的,这是由于 HBase 内部管理的文件全部都是存储在 HDFS 当中的。同时,MapReduce 这个计算框架在 HBase 之上又提供了高性能的计算能力来处理海量数据。此外还有一些像 Pig、Hive 用来提供高层语言的支持。还有 Sqoop 用来完成传统数据库到 HBase 之间的数据迁移。类似衍生出来的新技术还有很多,有兴趣的同学可以自己去了解一下。

Google 的三架马车 BigTable、GFS、MapReduce 现在在开源社区中都能找到对应的实现。HBase 就是 Bigtable 的开源实现,当然这句话不是完全正确,因为两者之间还是有些差异的。但是主要还是基于 BigTable 这个数据模型开发的,因此也是具有 Key-Value 特征的,同时也就具有 Bigtable 稀疏的、面向列的这些特性。

也是由于 HBase 利用 HDFS 作为它的文件系统,因此它也具有 HDFS 的高可靠性和可伸缩性。和 Hadoop 一样,HBase 也是依照横向扩展,通过不断地通过添加廉价的服务器来增加计算和存储的能力。BigTable 利用 Chubby 来进行协同服务,HBase 则是利用 Zookeeper 来对整个分布式系统进行协调服务。正是因为通过HDFS 的高可靠可伸缩性,以及应用了 Bigtable 的稀疏的面向列的这些高效的数据组织形式。所以 HBase 才能如此地适合大数据随机和实时读写。

二、 HBase 基本概念

这里介绍一下 HBase 的一些基本概念:

RowKey(行键),顾名思义也就是我们在关系型数据库中常见的主键,它是Unique 的,在 HBase 中这个主键可以是任意的字符串,其最大长度是64K,在内部存储中会被存储为字节数组,HBase 表中的数据是按照 RowKey 的字典序排列的,例如很多索引的实现,包括地理空间索引很大程度就是依赖这个特性。

不过也要注意一个点,现实当中期望排序是1、2、3、4...10,而在 HBase 中1 后面紧跟的会是10。因此,在设计行键的时候一定要充分地利用字典序这个特性,将一下经常读取的行存储到一起或者靠近,减少Scan 的耗时,提高读取的效率。这里一定要说的一点是,行键设计真的很重要,例如做组合行键时将时间排前面,导致写热点(曾经踩过的坑,记忆犹新)。

Column Family(列族),它是由若干列构成,是表 Schema 的一部分,所以需要在创建表的时候就指定好。但也不是所表创建完之后就不能更改列族,只是成本会比较大,因此不建议更改。HBase 中可允许定义的列族个数最多就20多个。列族不仅仅能够帮助我们构建数据的语义边界,还能有助于我们设置某些特性,比如可以指定某个列族内数据的压缩形式。一个列族包含的所有列在物理存储上都是在同一个底层的存储文件当中。

Column (列),一般都是从属于某个列族,跟列族不一样,列的数量一般的没有强限制的,一个列族当中可以有数百万个列,而且这些列都可以动态添加的。这也是我们常说的 HBase 面向列的优点,不像传统的关系型数据库,调整一下 Schema 都需要担心对于生产的影响。

Version Number(版本号),HBase 中每一列的值或者说是每个单元格的值都是具有版本号的,默认使用的系统当前的时间戳,精确到毫秒。当然也可以是用户自己显式地设置,我们是通过时间戳来识别不同的版本,因此如果要自己设置的话,也要保证版本号的唯一性。用户也可以指定保存指定单元格的最后 N 个版本,或者某个时间段的版本,这个是可以在配置中配置的。一个单元格里面是数据是按照版本号降序的。也就是说最后写入的值会被最先读取。

Cell(单元格),一个单元格就是由前面说的行键、列标示、版本号唯一确定的,这里说的列标示包括列族和列名。Cell 中的数据是没有类型的,全部都是字节码。

三、HBase 表逻辑视图

由于 HBase 表的一个单元格是由多维决定的,我这里尝试用一个二维的电子表格来展示。可以结合前面说的 HBase 的基本概念来理解。可以看到通过二维表格来展示一个成绩表,中间有很多单元格是空的,整体看起来很稀疏,需要说明的是在 HBase 的实际存储中这些空的单元格并不占存储。

四、HBase 表物理视图

物理视图比较复杂,下面以图来展示一个 HBase 表从宏观到微观到物理存储。尽量以最简单到方式展示物理视图的几个层次。

  • 表的横向切分(TableRegion)

  • Region 的分裂

  • Region 的分布

  • Region 的存储结构

一个 Region 是由一个或多个 Store 组成。每一个 Store 其实就是一个列族。每个

Store 又是由一个 memStore 和 0 个或者多个 storeFile 组成。memStore 是存储在内存中,storeFile 是存储在 HDFS 中,有时候也称作 HFile。数据都会先写入memStore,一旦 memStore 超过给的的最大值之后,HBase 就会将memStore 持久化为 storeFile。

五、HBase 集群结构

一个 HBase 集群一般由一个 Master 和多个 RegionServer 组成。

  • 客户端库:可以通过 HBase 提供的各式语言API 库访问集群。API 库也会维护一个本地缓存来加快对 HBase 对访问,比如缓存中记录着 Region 的位置信息。
  • Maste 节点:主要为各个 RegionServer 分配 Region,负责 RegionServer 对负载均衡,管理用户对于 Table 对 CRUD 操作。
  • RegionServer:维护 Region,处理对这些 Region 对IO 请求,负责切分在运行过程中变过大的 Region。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

一文读懂Docker及其对系统管理员的重要性

作者 | Damian Perera编译 | 火火酱,责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)自从Docker在2013年初上线以来,就与程序员及系统管理员之间产生了一种爱恨交加的奇妙关系。虽然与我交谈过的一些经验丰富的的开发人员…

主流微服务注册中心浅析和对比

开源产品受开发者热捧,是因为其代码透明、可以参与共建、有社区进行交流和学习,当然更重要的是开源产品的接入成本低。个人开发者或者中小型公司往往会将开源产品作为选型首选。 开发者通过阅读源代码,理解产品的功能设计和架构设计&#xf…

linux内核重要结构体,Linux中list_head结构体相关 | 技术部落

在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用&#xff0…

Java老矣,尚能饭否?2020 Java生态系统报告出炉

最近,Jrebel公布了一份2020 Java生态系统报告,这份报告主要关注开发人员在开发过程中使用的技术。这份报告包含了技术人员正在用的编程语言、应用程序架构、应用服务器、运行时平台、框架技术、IDE、JRE/JDK版本、数据库、部署模型、构建工具和虚拟化工具…

AI评委引热议,阿里巴巴表示:AI不会取代工程师

昨日,一位能给工程师代码打分的“AI评委”引发了热议。起因是在2019阿里巴巴“83行代码挑战赛”决赛现场,一位运行在云端的AI评委和现场的专家评委、大众评委配合,一起对选手提交的的代码做综合评价。 “AI是否会取代工程师”的话题再次在网络…

windows2012运行linux,Linux一分钟部署完毕上线运行,windows server你要折磨我两天?...

原标题:Linux一分钟部署完毕上线运行,windows server你要折磨我两天?周四晚上好,各位~~经过数度折腾之后,终于对windows累觉不爱了。且不说点点点的弊端,浪费鼠标左右键的机械力,还有无数个需要…

使用DataWorks来调度AnalyticDB任务

DataWorks作为阿里云上广受欢迎的大数据开发调度服务,最近加入了对于AnalyticDB的支持,意味着所有的AnalyticDB客户可以获得任务开发、任务依赖关系管理、任务调度、任务运维等等全方位强大的能力,现在就给大家仔细介绍下如何使用DataWorks来…

稳定、可扩展、模块化、简化部署过程、版本控制……一文看懂 Kubernetes 到底如何运用!...

来源 | Daniele Fontani编译 | 火火酱,责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)说实话,我是个Kubernetes爱好者。Kubernetes是软件开发的重要一步。当我遇到它时,我就想:“这就是将容器融入…

提升不止一点点,Dubbo 3.0 预览版详细解读

Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网、网易考拉等互联网公司,也不乏中国人寿、青岛海尔等大型传统企业。更多用户信息,可以访问Dubbo GitHub,issue#1012: Wanted: whos usi…

Jenkins Tutorial

什么是Jenkins Jenkins是一个自动化平台,它允许你使用pipelines去部署应用。它也可以自动化其他任务。 BUILDTESTDEPLOYMENT Jenkins 架构 首先,你拥有一个Master Server,它控制pipelines和安排Build到你的Agent上; 其次&…

阿里云首次在ASPLOS'19发布重磅论文:揭秘帮助ECS快速迭代的热升级技术

第24届ACM编程语言和操作系统(ASPLOS19),于2019年4月13日至17日,在普罗维登斯召开,阿里云高级技术专家郑晓代表团队在会上发表了技术报告。 论文主题为《Fast and Scalable VMM Live Upgrade in Large Cloud Infrastr…

痛!做C#半年,挣的不如做AI1个月?”看到第二句泪目……

前段时间在网上发现一个热门话题:“做开发一年,在北京月薪不到1万,有点迷茫。” 其中,这个回答我永远忘不了:来源:库库的派派知乎回答,已取得授权在这短短的一条信息里,小编佩服不…

联想电脑u盘安装Linux,如何使用u盘安装linux系统

ps: 请注意,硬盘不是软盘7. 选择您的U盘作为硬盘驱动器,然后写入usb hdd 8. 点击[写]三,安装系统1. 将U盘插入计算机2. 启动计算机并按住[F2]进入BIOS以修改第一个启动项3. 选择U盘后,跳转到以下界面4. 按键盘键进入第二个“测试…

源码|详解分布式事务之 Seata-Client 原理及流程

前言 在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案。自年初阿里开源了Fescar(四月初更名为Seata)后,该项目受到了极大的关注,目前已接近 8000 Star。Seata 以高性能和…

SonarQube中配置c语言/c++语言代码规则插件

文章目录一、下载安装重新启动1. 下载文件2.安装3. 重新启动SonarQube4. SonarQube管控台验证二、SonarQube管控台配置2.1. 创建配置模板2.2. 添加规则2.3. 查看配置模板规则列表2.4. 修改默认语言规则应用2.5. C配置流程同上我是java出身,因为特殊需要,要用sonarqube做一套c代…

从虚拟化前端Bug学习分析Kernel Dump

前言 也许大家都知道,分析 Kernel Dump 有个常用的工具叫 Crash,在我刚开始学习分析 Kernel Dump 的时候,总是花大量的时间折腾这个工具的用法,却总是记不住这个工具的功能。后来有一次在参加某次内部分享的时候,有位…

Apache Shiro RememberMe 1.2.4 反序列化过程命令执行漏洞【原理扫描】

文章目录一、分析定位1. 漏洞描述2. 项目引发漏洞简述二、 若依系统2.1. 版本升级2.2. 配置文件2.3. 推荐做法2.4. 栗子2.5. 项目场景三、Gus系统3.1. shiro版本升级3.2. 调用重新生成3.3. 生成工具类shiro漏洞补充:一、分析定位 1. 漏洞描述 目前厂商已经发布了新…

Linux系统json文件打中文,如何在 Linux 终端上漂亮地打印 JSON 文件

JSON 文件非常棒,因为它们以人类可读的格式存储数据集合。然而,如果 JSON 文件被最小化过,那么阅读 JSON 文件可能会很痛苦。• 来源:linux.cn • 作者:Abhishek Prakash • 译者:geekpi •(本文字数&#…

超级干货!31 条2020 年最新版 ZooKeeper面试题,先收藏再看!| 博文精选

作者| ThinkWon责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)金三银四,虽然受疫情影响,大多数企业还未正式复工,但没有条件,创造条件也要上,许多企业已经开始物色合适的人才了&#…

Node.js 应用故障排查手册 —— 雪崩型内存泄漏问题

楔子 实践篇一中我们也看到了一个比较典型的由于开发者不当使用第三方库,而且在配置信息中携带了三方库本身使用不到的信息,导致了内存泄漏的案例,实际上类似这种相对缓慢的 Node.js 应用内存泄漏问题我们总是可以在合适的机会抓取堆快照进行…