HBase学习的第一天--hbase的简介和搭建

news/2024/11/15 9:21:23/文章来源:https://www.cnblogs.com/shmil/p/18355580

HBase架构与基础命令

一、了解HBase

1.1 HBase概述

  • HBase是基于Hadoop中HDFS做存储的数据库

HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于存储海量的结构化或者半结构化,非结构化的数据(底层是字节数组做存储的)

HBase是Hadoop的生态系统之一,是建立在Hadoop文件系统(HDFS)之上的分布式、面向列的数据库,通过利用Hadoop的文件系统提供容错能力。如果需要进行实时读写或者随机访问大规模的数据集的时候,会考虑使用HBase。

HBase作为Google Bigtable的开源实现,Google Bigtable利用GFS作为其文件存储系统类似,则HBase利用Hadoop HDFS作为其文件存储系统;Google通过运行MapReduce来处理Bigtable中的海量数据,同样,HBase利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby作为协同服务,HBase利用Zookeeper作为元数据的元数据存储和容灾。在2010年5月,成为apache顶级项目

1.2 HBase处理数据

虽然Hadoop是一个高容错、高延时的分布式文件系统和高并发的批处理系统,但是它不适用于提供实时计算;

HBase是可以提供实时计算的分布式数据库,数据被保存在HDFS分布式文件系统上,由HDFS保证期高容错性;

但是再生产环境中,HBase是如何基于hadoop提供实时性呢?

​ HBase上的数据是以StoreFile(HFile)二进制流的形式存储在HDFS上block块儿中;

​ 但是HDFS并不知道的HBase用于存储什么,它只把存储文件认为是二进制文件,也就是说,HBase的存储数据对于HDFS文件系统是透明的。

1.3 HBase与HDFS

在下面的表格中,我们对HDFS与HBase进行比较:

HDFS HBase
HDFS适于存储大容量文件的分布式文件系统。 HBase是建立在HDFS之上的数据库。
HDFS不支持快速单独记录查找。 HBase提供在较大的表快速查找
HDFS提供了高延迟批量处理;没有批处理概念。 HBase提供了数十亿条记录低延迟访问单个行记录(随机存取)。
HDFS提供的数据只能顺序访问。 HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。

Hbase--->HashMap

二、HBase相关概念

2.1 数据模型

HBase通过表格的模式存储数据,每个表格由列和行组成,其中,每个列又被划分为若干个列族(colnum family),请参考下面的图:
image-20220608214455582

表:HBase的数据同样是用表来组织的,表由行和列组成,列分为若干个列族,行和列的坐标交叉决定了一个单元格。

行:每个表由若干行组成,每个行有一个行键作为这一行的唯一标识。访问表中的行只有三种方式:通过单个行键进行查询、通过一个行键的区间来访问、全表扫描。

列簇:一个HBase表被分组成许多“列族”的集合,它是基本的访问控制单元。

列修饰符(列限定符):列族里的数据通过列限定符(或列)来定位

单元格:在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[]

时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引

2.1.1 Hbase数据模型

HBase将数据存放在带有标签的中,表由行和列组成,行和列交叉确定一个单元格,单元格有版本号,版本号自动分配,为数据插入该单元格时的时间戳。单元格的内容没有数据类型,所有数据都被视为未解释的字节数组

表格中每一行有一个行键(也是字节数组,任何形式的数据都可以表示成字符串,比如数据结构进行序列化之后),整个表根据行键的字节序来排序,所有对表的访问必须通过行键。

表中的列又划分为多个列族(column family),同一个列族的所有成员具有相同的前缀,具体的列由列修饰符标识,因此,列族和列修饰符合起来才可以表示某一列,比如:info:format、cotents:image

image-20220608215452989

在创建一个表的时候,列族必须作为模式定义的一部分预先给出,而列族是支持动态扩展的,也就是列族成员可以随后按需加入。物理上,所有的列族成员一起存放在文件系统上,所以实际上说HBase是面向列的数据库,更准确的应该是面向列族,调优和存储都是在列族这个层次上进行的。一般情况下,同一个列族的成员最后具有相同的访问模式和大小特征。

总结起来,HBase表和我们熟知的RDBMS的表很像,不同之处在于:行按行键排序,列划分为列族,单元格有版本号,没有数据类型。

2.1.2 Hbase数据坐标

HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格(cell),cell中的数据是没有类型的,全部是字节码形式存贮。,因此,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳]

  • 注意:行键,列簇,列名都是按照字典序排序的

image-20220608215545217

对于上图这样一个HBase表,其数据坐标举例如下:

[“201505003”, “Info”, “email”, 1174184619081] “xie@qq.com”
[“201505003”, “Info”, “email”, 1174184620720] “you@163.com”

2.1.3 HBase区域

HBase自动把表水平划分为区域(Region),每个区域都是有若干连续行构成的,一个区域由所属的表、起始行、终止行(不包括这行)三个要素来表示。

一开始,一个表只有一个区域,但是随着数据的增加,区域逐渐变大,等到它超出设定的阈值(128M)大小,就会在某行的边界上进行拆分,分成两个大小基本相同的区域。然后随着数据的再增加,区域就不断的增加,如果超出了单台服务器的容量,就可以把一些区域放到其他节点上去,构成一个集群。也就是说:集群中的每个节点(Region Server)管理整个表的若干个区域。所以,我们说:区域是HBase集群上分布数据的最小单位

image-20220608215649244

2.2 稀疏性

3、

HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳]

三、HBase系统架构

3.1 架构图

image-20220608221621833

3.2 组件介绍

HBase由三种类型的服务器以主从模式构成:

  • Region Server:负责数据的读写服务,用户通过与Region server交互来实现对数据的访问。
  • HBase HMaster:负责Region的分配及数据库的创建和删除等操作。
  • ZooKeeper:负责维护集群的状态(某台服务器是否在线,服务器之间数据的同步操作及master的选举等)。

HDFS的DataNode负责存储所有Region Server所管理的数据,即HBase中的所有数据都是以HDFS文件的形式存储的。出于使Region server所管理的数据更加本地化的考虑,Region server是根据DataNode分布的。HBase的数据在写入的时候都存储在本地。但当某一个region被移除或被重新分配的时候,就可能产生数据不在本地的情况。这种情况只有在所谓的compaction之后才能解决。

Client

包含访问HBase的接口并维护cache来加快对HBase的访问

Zookeeper

保证任何时候,集群中只有一个master

存贮所有Region的寻址入口。

实时监控Region server的上线和下线信息。并实时通知Master

存储HBase的schema和table元数据的meta信息

Master

为Region server分配region

负责Region server的负载均衡

发现失效的Region server并重新分配其上的region

管理用户对table的增删改操作

RegionServer

Region server维护region,处理对这些region的IO请求

Region server负责切分在运行过程中变得过大的region 

HLog(WAL log):

HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和 region名字外,同时还包括sequence number和timestamp,timestamp是” 写入时间”,sequence number的起始值为0,或者是最近一次存入文件系 统sequence number。

HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的 KeyValue

Region

HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;每个表一开始只有一个region,随着数据不断插 入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region(裂变);

当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver上。

Memstore 与 storefile

  1. 一个region由多个store组成,一个store对应一个CF(列簇)

  2. store包括位于内存中的memstore和位于磁盘的storefile写操作先写入 memstore,当memstore中的数据达到某个阈值,hregionserver会启动 flashcache进程写入storefile,每次写入形成单独的一个storefile

  3. 当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、 major compaction),在合并过程中会进行版本合并和删除工作 (majar),形成更大的storefile。

  4. 当一个region所有storefile的大小和超过一定阈值后,会把当前的region 分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡。

  5. 客户端检索数据,先在memstore找,找不到再找storefile

  6. HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表 示不同的HRegion可以分布在不同的HRegion server上。

  7. HRegion由一个或者多个Store组成,每个store保存一个columns family。

  8. 每个Strore又由一个memStore和0至多个StoreFile组成。

如图:StoreFile 以HFile格式保存在HDFS上。

image-20220608221644247

image-20220608221654847

3.3 理解难点

  1、flush刷新在HDFS上呈现究竟是怎么刷新的呢??我们目前刚刚学习的时候,添加数据,都是一条一条的put进去,而我们在put的数据比较少(小于128M)的时候,我们put完去HDFS上并未查看到我们put的文件,这是因为数据还在内存中,也就是还在memStore中,所以要想在HDFS中查看到,我们必须手动刷新到磁盘中,这是将memStore的数据刷新到StoreFile中去,这样我们在HDFS中就可以查看到了。  2、为什么Hbase不可以使用像Mysql那样进行查询??首先,我们应该可以感受到,我们在插入的时候,每行数据,有多少列,列名叫什么完全是我们自己定义的,之所以不支持像MySql那样对列进行查询和操作,因为不确定列的个数和名称。3、数据最后存在HDFS上的,HDFS不支持删改,为什么Hbase就可以呢??这里有个思想误区,的确,数据是以HFile形式存在HDFS上的,而且HDFS的确是不支持删改的,但是为什么Hbase就支持呢?首先,这里的删除并不是真正意义上的对数据进行删除,而是对数据进行打上标记,我们再去查的时,就不会查到这个打过标记的数据,这个数据Hmaster会每隔1小时清理。修改是put两次,Hbase会取最新的数据,过期数据也是这个方式被清理。

四、HBase 2.2.7安装搭建

4.1 hbase下载

官网下载地址:https://www.apache.org/dyn/closer.lua/hbase/1.4.6/hbase-1.4.6-bin.tar.gz

image-20220907193935229

4.2 前期准备(Hadoop,zookeeper,jdk)

启动hadoop

start-all.sh

验证

http://master:50070

启动zookeeper(三台分别启动)

zkServer.sh start

检查状态

zkServer.sh status

4.3 搭建Hbase

1、上传解压

tar -zxvf hbase-1.4.6-bin.tar.gz

2、配置环境变量

export HBASE_HOME=/usr/local/soft/hbase-1.4.6$HBASE_HOME/bin

source /etc/profile

3、修改hbase-env.sh文件

增加java配置

export JAVA_HOME=/usr/local/soft/jdk1.8.0_171

关闭默认zk配置(原本是注释的,放开修改false)

export HBASE_MANAGES_ZK=false

4、修改hbase-site.xml文件

# 增加以下配置
<!--指定 zookeeper 服务器 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,node1,node2</value>
</property><!--指定 hbase 根路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property><!--将 hbase 设置为分布式部署。 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property><!-- 避免出现启动错误。 -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property> 

5、修改regionservers文件

如果是伪分布式版本,增加master即可

node1
node2

6、同步到所有节点(如果是伪分布式不需要同步)

scp -r hbase-2.2.7 node1:`pwd`
scp -r hbase-2.2.7 node2:`pwd`

7、启动hbase集群 , 在master上执行

start-hbase.sh

image-20220608224430921

8、验证hbase

http://master:16010

image-20220608224544266

hbase日志文件所在的目录: /usr/local/soft/hbase-1.7.1/logs

9、关闭集群的命令

stop-hbase.sh

4.4 启动顺序

启动顺序
Hadoop及hbase集群启动顺序 zookeepeer -> hadoop -> hbase停止顺序
Hadoop及hbase集群关闭顺序 hbase -> hadoop -> zookeepeer

4.5 重置hbase

1、关闭hbase集群
   1)杀死进程2)stop-hbase.sh
2、删除数据 hdfs
hdfs dfs -rmr /hbase
3、删除元数据 zk
   zkCli.shrmr /hbase
4、重新启动hbase
   start-hbase.sh
时间同步
yum install ntp -yntpdate -u time.windows.com

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

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

相关文章

实景三维:解锁地理信息新维度,引领未来城市智慧之钥

在这个信息爆炸与科技日新月异的时代,地理信息与遥感技术正以前所未有的速度改变我们认知世界的方式。在推动“实景三维平台”这一前沿科技的构建上,它不仅是地理信息的立体呈现,更是智慧城市的基石,打开了通往未来城市规划、管理、决策与服务的新视界。实景三维平台:数字…

【Linux系列】内核参数

sysctl命令常用参数 RAID性能参数调优 网络协议栈调整:单位是字节 TCP并发性能优化 对于用不上IPV6的建议直接禁用 TCP keepalive时长控制 memory OOM控制 安全防护模块 保障TCP通信质量 IO密集性服务器优化参数 路由器选项控制 路由机制控制 内存大页面使用策略内核参数主要保…

外心与垂心

外心(这三条结论并不完全是平凡的) 1、 \(\angle BOC=2\angle A\) 2、 \(\angle CBO+\angle A=Rt \angle\) 3、 \(O\) 在三角形三边的中垂线上 例1如图,\(\triangle ABC\) 内接于圆 \(O\) ,\(AD\perp BC\) ,延长 \(CD,BD\) 交圆 \(O\) 于点 \(F,E\) ,作 \(DE,DF\) 中垂线…

计算机体系结构技术杂谈(上)

计算机体系结构技术杂谈(上) 2.1 计算机的层次结构 2.1.1基本概念介绍 1. 计算机基本概念 1) 机器数:用0和1编码的计算机内部的0/1序列。 2) 真值:机器数真正的值,即:现实中带正负号的数(通常指带符号二进制数对应的真正的数值)。 3) 定点数:将一个实数表示为带有固…

驱动开发环境搭建

1.安装 VS2019 首先,我们需要安装 VS2019,资源链接如下: VS2019 + WDK: https://pan.baidu.com/s/1LYIn1MXLjY_zgEgLr8SgYA?pwd=xyji 在安装的时候我们需要注意务必要注意,图上已勾选的选项必须要全部勾选,漏勾可能会导致各种奇怪的问题! 可选部分我们需要勾选的安装项如…

Jetbrains Fleet: 很好, 但是谁在乎呢?

作者对Jetbrains Fleet项目的发展历程进行了回顾和批评,认为其缺乏IDE的第一性以及Jetbrains工程便利。虽然现在支持自定义插件,但插件开发难度大且资源不足,面临Vscode等竞争对手的压力,Jetbrains Idea也停滞不前,新UI等更新未能带来实质性改进。作者表示不再购买Jetbrai…

pritunl安装及配置https证书

1、pritunl 简介#官方网站 https://pritunl.com/ ​ #官方文档 https://docs.pritunl.com/docs ​ #Github项目地址 https://github.com/pritunl/pritunl ​ #客户端下载地址(也可以使用OpenVPN作为客户端) https://client.pritunl.com/#install https://openvpn.net/client …

ClueCon 2024:音视频开发者的技术盛会

前面的话:ClueCon 是音视频开发者的年度技术盛会,每年都在美国芝加哥举行。RTE 开发者社区的联合主理人杜金房在即将踏上 ClueCon 之际,写下了这段文字。也邀请大家一同关注这次大会。时间过得真快,转眼,又是一届新的 ClueCon 了。ClueCon 是一个音视频开发者的年度技术盛…

fomepay虚拟信用卡跑路了?可以看看其他平台

最近fomepay虚拟卡平台跑路了,很多人的余额都无法提现!基本就是充值进去的钱被吞了,以前能够联系到的客服现在联系不到了,贴吧上面一搜,全部都是被骗的说法; 博主体验,以前我就在wildcard平台和fomepay两个平台之间来回跑,给我的感觉就是fomepay这个平台很像那种钓鱼网…

KETTLE 服务器版下载

kettle 9.4 (PENTAHO-SERVER-CE-9.4.0.0-343.ZIP 下载地址 kettle 9.4 (PENTAHO-SERVER-CE-9.4.0.0-343.ZIP 下载地址 pentaho-server-ce-9.4.0.0.-343.ZIP 下载 地址 https://www.hitachivantara.com/en-anz/products/pentaho-platform/data-integration-analytics/pentaho-…

关于fixed 修改z-index无效,定位relative 将fixed覆盖问题

https://img2024.cnblogs.com/blog/3388853/202408/3388853-20240812183846280-1202542483.png主要原因: 观察z-index 文档由于定位盒子受层叠上下文 - CSS:层叠样式表 | MDN (mozilla.org)影响。解决方法:发现.header 为fixed定位,使得与下方input 定位relative 在同一级,都…

Java学习笔记3--java编译和运行的CMD命令

windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量 执行命令解析: javac 命令用于将 java 源文件编译为 class 字节码文件,如: javac HelloWorld.java。 运行javac命令后,如果成功编译没有错…