学习 HBase
1 由来
HBase 应大数据而生,是Apache Hadoop项目孵化而来的一种NoSQL数据库,HBase 是 Hadoop Database 的简称。
它的出现有以下几个原因:
大数据时代的到来:随着互联网技术和信息化水平的不断提高,数据量不断增加,对数据的存储、处理和分析提出了更高的要求。传统的关系型数据库在处理大规模数据时面临着性能瓶颈和扩展性问题,因此需要一种更为适合大数据存储和处理的NoSQL数据库。
数据访问的灵活性:随着互联网应用的不断发展,数据访问的灵活性和查询效率变得越来越重要。HBase采用基于列的数据存储方式,支持随机读写和范围查询,具有更高的查询效率和数据访问的灵活性。
数据复制和高可用性:随着数据量的不断增加,数据的可靠性和高可用性变得越来越重要。HBase采用数据的副本机制和多节点部署方式,可以实现数据的复制和高可用性。
数据分析和挖掘的需求:随着数据量的不断增加,数据分析和挖掘的需求也越来越强烈。HBase提供了MapReduce和Hive等数据分析工具,可以方便地进行数据分析和挖掘。
2 架构
HBase = HMaster + HRegionServer + ZooKeeper + HDFS(DataNode) + Client
2.1 HMaster
HMaster是HBase集群的管理节点,负责管理HBase的元数据,包括表的结构、Region的分配等。HMaster还负责监控RegionServer的状态,并进行负载均衡和故障转移等工作。
2.2 RegionServer
RegionServer是HBase集群中的数据存储节点,每个RegionServer可以管理多个Region。RegionServer负责存储和管理数据,并提供数据的读写服务。每个RegionServer会为每个Region维护一个MemStore和多个StoreFile,用于存储数据。
2.3 ZooKeeper
ZooKeeper是HBase集群的协调节点,它用于管理HBase的配置信息、元数据和集群状态等。ZooKeeper还负责监控RegionServer的状态,并进行故障检测和转移等工作。
2.4 HDFS
HDFS是HBase集群中的存储层,用于存储HBase的数据。HBase将数据存储在HDFS的数据块中,以实现高可靠性和高可扩展性。
2.5 客户端
客户端是使用HBase的应用程序。客户端通过HBase API连接HBase集群,并进行数据的读写和管理。
3 Region 介绍
在HBase中,Region是一个基本的存储单元,用于存储HBase表中一部分的数据,是HBase实现分布式存储和管理的基本单元。HBase中的每个Region包含一段连续的行键范围,并存储在一个或多个RegionServer上。
具体来说,HBase中的Region具有以下特点:
数据存储顺序:Region中的数据按照行键顺序存储,因此可以支持行键的范围查询。
可动态扩展:当Region中的数据达到一定大小时,HBase会自动进行Region分裂,将一个大Region分成两个小Region,以保证数据均衡和查询效率。
数据副本:每个Region在HBase集群中都有多个副本,以保证数据的可靠性和高可用性。
多版本支持:HBase支持多版本数据存储,可以在同一个行键中存储多个版本的数据,并支持按版本号查询。
分布式管理:HBase集群中的Region分布在多个RegionServer上,每个RegionServer可以管理多个Region,以达到分布式管理的目的。
HBase中的Region是自动分配的,当一个表被创建时,HBase会为该表自动创建一个或多个Region,并将它们分配给不同的RegionServer。Region的分配是自动的,并且可以根据集群负载和数据均衡进行调整。当Region中的数据达到一定大小时,HBase会自动进行Region分裂,将一个大Region分成两个小Region,以保证数据均衡和查询效率。
在HBase的架构中,数据被分割成多个Region,并分布在多个RegionServer上。每个RegionServer管理多个Region,每个Region包含一段连续的行键范围。这样,HBase就可以实现数据的水平扩展和负载均衡,从而提高了系统的可靠性和性能。
详细可参考: HBase-Region详解
4 Region 是怎么存储数据的
在HBase中,Region是一个基本的存储单元,用于存储HBase表中一部分的数据。当一个Region中的数据达到一定大小时,HBase会自动进行Region分裂,将一个大Region分成两个小Region,以便于数据的管理和查询。HBase的Region是按照行键范围进行划分的,每个Region包含一段连续的行键范围。具体来说,HBase的Region存储数据的方式如下:
Region分割:HBase首先将表分成多个Region,并将这些Region分配给不同的RegionServer。在RegionServer上,每个Region会分成多个Store,用于存储数据。
数据存储:在每个Store中,数据按照列族存储,列族中的每个列都会存储相同的类型的数据。在每个列族中,数据按照行键顺序存储,并且可以存储多个版本的数据。
内存缓存:每个RegionServer会为每个Region维护一个MemStore,用于缓存数据的写入操作。当MemStore中的数据达到一定大小时,HBase会将其持久化到磁盘中的StoreFile中。
StoreFile:在每个Store中,数据会被持久化到多个StoreFile中,每个StoreFile对应一个HFile文件。HFile文件是HBase中的一个底层存储格式,它将数据按照行键顺序存储,并支持快速的随机读取和范围查询。
数据合并:当RegionServer中的StoreFile数量达到一定数量时,HBase会对StoreFile进行合并,以减少文件数量和提高查询效率。同时,HBase还会对StoreFile进行压缩和归档,以减小磁盘空间的占用。
5 附录:HDFS 的优点和缺点
HDFS(Hadoop Distributed File System)是Hadoop生态系统中的分布式文件系统,它是一个高容错、高可靠、高性能的分布式存储系统,具有以下优点:
优点:
高可靠性:HDFS采用了数据冗余机制,将数据分为多个块并备份到不同的节点上,一旦某个节点失效,数据可以从备份节点上恢复。
高可扩展性:HDFS支持添加新的节点来扩展存储容量和计算能力,可以轻松地扩展到PB级别的数据规模。
高性能:HDFS采用了数据本地性原则,将数据存储在离计算节点最近的节点上,以减少数据的网络传输和提高数据访问速度。
适合大数据处理:HDFS适合存储和处理大规模的数据集,可以支持PB级别的数据存储和处理。
开源免费:HDFS是开源的,可以免费使用,没有任何授权费用。
缺点:
不适合小文件存储:因为HDFS将数据分为多个块并备份到不同的节点上,因此存储小文件时会造成存储空间的浪费。
不支持高并发写入:HDFS的写入性能较低,不支持高并发写入,因此不适合高并发写入场景。
不支持低延迟访问:HDFS的数据访问速度较慢,不支持低延迟访问,因此不适合对响应时间要求较高的应用场景。
需要专门的管理和维护:HDFS是一个分布式的系统,需要专门的管理和维护
学习 HBase的更多相关文章
- 暑假第五周总结(学习HBASE相关知识)
本周主要对HBASE的相关知识进行了学习,主要是通过视频的讲解了解到了HBASE的存储机制,HBASE的机制与普通的关系型数据库完全不同,HBASE以列进行存储,其主要执行的就是增删查操作,其更改主要 ...
- 深入学习HBase架构原理
HBase定义 HBase 是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建 大规模结构化存储集群. HBase 是Google Bigtabl ...
- HBase学习-HBase原理
1.系统架构 1.1 图解 从HBase的架构图上可以看出,HBase中的组件包括Client.Zookeeper.HMaster.HRegionServer.HRegion.Store.MemS ...
- 一脸懵逼学习HBase的搭建(注意HBase的版本)
1:Hdfs分布式文件系统存的文件,文件存储. 2:Hbase是存储的数据,海量数据存储,作用是缓存的数据,将缓存的数据满后写入到Hdfs中. 3:hbase集群中的角色: ().一个或者多个主节点, ...
- 深入学习hbase:表,列族,列标识,版本和cell
HBase是面向列的分布式的数据库,和传统的关系型数据库有很大的不同:物理模型和逻辑模型.这里我们要首先讲一下HBase数据库相关的区别于关系型数据库的几个基本概念: 表:HBase ...
- 大数据学习——hbase的shell客户端基本使用
1 基本shell命令 1 在hbase的 bin目录下进入命令行 ./hbase shell 2 查看有哪些表 list 3 创建一个表 create 't_user_info', {NAME = ...
- 大数据学习——hbase数据库
Hhbase集群搭建 一 第一步 准备:搭建hadoop集群,搭建zookeeper 二 第二步:上传安装包 解压 1 tar -zxvf hbase-1.2.1-bin.tar.gz 重命名 2 ...
- 大数据学习——Hbase
1. Hbase基础 1.1 hbase数据库介绍 1.简介 hbase是bigtable的开源java版本.是建立在hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写nosql的数据库系统 ...
- Hbase学习Hbase基础介绍
一.产生背景 自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案.大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像Hadoop的解决方案.Hadoop使用分布式文件系统,用 ...
- Hbase学习笔记01
最近做项目接触到了HDFS.mapreduce以及Hbase,有了实战机会,今天打算将这些知识好好总结下,以备不时之需.首先从Hbase开始吧. Hbase是建立在HDFS上的分布式数据库,下图是Hb ...
随机推荐
- 前端获取不到环境变量NODE_ENV
有时候我们期望通过执行不同的 npm script 来区分诸如 dev.prod.uat.sit等多环境下使用的不同变量 今天我也在整环境变量,碰到一个小小的bug.装了 cross-env 但还是没 ...
- 如何通过C#/VB.NET 代码调整PDF文档的页边距
PDF边距是页面主要内容区域和页面边缘之间的距离.与Word页边距不同,PDF文档的页边距很难更改.因为Adobe没有提供操作页边距的直接方法.但是,您可以通过缩放页面内容来改变页边距.本文将介绍如何 ...
- linux syslog.d日记操作记录-小节
以下记录在学习LDD3时调试处理打印的一些操作 syslog 不同的发行版,不同的脚本文件,如fedora18中为rsyslog的名称 1:配置文件 /etc/syslog.conf(fedora r ...
- Android-图片压缩(二)-纯干货
Android - 图片压缩(一)- 项目中取图片转bitmap Android - 图片压缩(二)- 纯干货 前言:让我们手撸一个图片压缩库,对压缩工具鲁班进行升级改造. 在平常开发当中,我们一般是 ...
- 2022-08-27:以下go语言代码输出什么?A:[0];B:panic;C:7;D:不清楚。 package main import ( “fmt“ ) func main() { a
2022-08-27:以下go语言代码输出什么?A:[0]:B:panic:C:7:D:不清楚. package main import ( "fmt" ) func main() ...
- 2022-08-25:以下go语言代码输出什么?A:1 0;B:1 2;C:不能编译;D:0 0。 package main import “fmt“ func named() (n, _ int
2022-08-25:以下go语言代码输出什么?A:1 0:B:1 2:C:不能编译:D:0 0. package main import "fmt" func named() ( ...
- 2020-10-23:go中channel的创建流程是什么?
福哥答案2020-10-23:1.元素大小是否小于2的16次方,否则throw.2.对齐检查,否则throw.3.元素大小和容量的乘积不能超出范围,否则panic.4.生成*hchan,设置buf.4 ...
- 2021-10-08:填充每个节点的下一个右侧节点指针。给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找
2021-10-08:填充每个节点的下一个右侧节点指针.给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点.填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找 ...
- ue全家桶进阶之路30:Vue3定义组件和常用指令
要定义 Vue 3 组件,你可以使用 Vue 3 提供的 defineComponent 函数. 例如,以下是一个简单的 Vue 3 组件定义: import { defineComponent } ...
- 【GiraKoo】Android监听屏幕尺寸变化通知
[GiraKoo]Android监听屏幕尺寸变化通知 Android系统中存在多种情况可能导致屏幕尺寸发生变化.例如:横竖屏切换,虚拟按键,分屏,键盘弹出等. App有的时候需要了解屏幕的真实尺寸,D ...