ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HBase —— 入门

2022-07-15 10:34:01  阅读:242  来源: 互联网

标签:列簇 存储 入门 region Region hbase HBase


HBase —— 入门

HBase介绍

    HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。



HBase的架构组件

Client

  • 客户端负责发送请求到数据库
  • 客户端的连接方式主要有两种:hbase shell 和 类JDBC
  • 发送的请求也是基本的数据库操作 DDL、DML、DQL
  • client还维护着一些cache来加快hbase的访问,例如Region的位置信息

Zookeeper

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

  • 存储所有Region的寻址入口和所有元数据信息

  • 实时监控Region Server的状态,将其上下线信息汇报给Master

  • 存储Hbase的schema,包括表和列簇


HMaster

  • HBase的主节点,为Region Server分配Region并负责其负载均衡
  • 管理用户的DDL操作,表的元数据存储在Zookeeper中,表的数据存储在HRegionServer上
  • 当HRegionServer下线时,HMaster会将该HRegionServer上的region转移到其他HRegionServer上

HRegionServer

  • HBase具体数据的管理者,维护Master分配给它的region,处理对这些region的IO请求
  • 实时和Master保持通信,汇报当前节点信息
  • 当接收到master创建一张表的命令时,分配一个region对应一张表
  • Region Server 负责切分在运行过程中变得过大的region
  • 当客户端发送DML和DQL操作时,HRegionServer负责和客户端连接
  • 当前Region Server意外关闭,其region会被其他Region Server接手

HRegion

  • HRegion是HBase中分布式存储的最小单元,可存储在不同的HRegionServer中
  • HBase自动把表水平划分为多个region,每个region会保存一个表里某一段连续的数据
  • 开始一张表只有一个region,当region增大一定程度会发生等分裂变。

Store

  • HRegion是表获取和分布的基本元素,由一个或多个Store组成,每个store保存一个列簇
  • store又由一个memstore和零个或多个StoreFile组成
  • HFile是HBase在HDFS中文件的存储格式,包含多层索引,不必为了一部分数据而加载整个文件

Hlog

  • 做任何事情之前先写日志,Hlog实际是一个普通的Hadoop Sequence文件
  • Hlog直接存储在HDFS上,一个HRegionServer只有一个log文件
  • 当memstore达到阈值开始写出日志文件,会在日志文件中设置一个检查点
  • MasterProcWAL:HMaster记录管理操作,WAL记录所有HBase数据改变



HBase的数据模型

数据类型:HBase不存在数据类型,唯一的数据类型就是字节

NameSpace:命名空间是关系数据库中的概念,实际是表的逻辑分组。HBase有两个特殊的命名空间,default和hbase。

Table:

Row key Time Stamp Column Family1 Column Family2 Column Family3
1 t6 CF2:q1=val1 CF3:q3=val3
2 t3 CF1:q2=val3
t2 CF2:q3=val2

Row Key

  • 一行的唯一标识,是用来检索记录的主键。
  • 行键可以是任意字符串,最长64kb,以字节数组保存
  • 存储是按照行键的字典序(byte order)进行排序。设计时一般将会一起被读取的行放在一起。

Column Family

  • 每一行都有相同的列簇,列簇包含许多列与列的值,每个列簇都有一些存储属性可配置。
    • 例如:可使用存储、压缩类型、存储版本号。
  • 将功能属性相近的放在同一个列簇,而同一个列簇的列会存储在同一个Store中。
  • 列簇一般在创建表的时候就声明,一般不要超过三个。
  • 列簇由多个列组成,表由多个列簇组成。

Column Qualifier

  • 列簇的限定词,可以理解为唯一标识,但是列标识时可改变的,所以每一行可以有不同的列标识。
  • 使用方式必须为,列簇: 列
  • 列可以根据需求动态添加或删除,同一个表中不同行的数据列都可以不同。

Cell

  • cell由row key、column family、column qualifier、version组成
  • cell中数据没有类型,全部由字节存储

Time Stamp

  • HBase中每个cell存储着同一份数据的不同版本。
  • 版本通过时间戳来索引:
    • 时间戳的类型是64位整型
    • 时间戳精确到毫秒,不自行设置默认为系统当前时间
    • 若应用程序想要避免版本冲突,就需要自己生成具有唯一性的时间戳
  • 每个cell中不同版本的数据按照时间倒序排序,最新的排在最前
  • 查询时不指定时间戳,则默认显示最新数据
  • 为了避免数据存在过多版本难以管理,采用保存最后n个版本或保存最后一段时间内的版本的方式。


安装HBase

上传解压安装包

scp hbase压缩包 用户@机器IP:/上传/目录

tar -xzvf hbase压缩包 -C /解压/目录

修改配置文件

修改hbase-env.sh:

cd hbase-2.4.13/conf/
vim hbase-env.sh

export JAVA_HOME=/JDK安装路径
export HBASE_MANAGES_ZK=false

修改hbase-site.xml:

vim hbase-site.xml
<property>
        <name>hbase.rootdir</name>
        <value>hdfs://192.168.19.5:8020/hbase</value>
</property>
<!--false单机模式、true分布式-->
<property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
</property>
<!--zookeeper位置-->
<property>
        <name>hbase.zookeeper.quorum</name>
        <value>192.168.19.5:2181</value>
</property>
<!--zookeeper快照存储位置-->
<property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/sjj/install/apache-zookeeper-3.7.1-bin/data</value>
</property>
<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
</property>

配置环境变量

vim /etc/profile

# 配置HBase环境
export HBASE_HOME=/home/sjj/install/hbase-2.4.13
export PATH=$PATH:${HBASE_HOME}/bin:${HBASE_HOME}/sbin

source /etc/profile

复制jar包到lib

cd hbase-2.4.13/lib/client-facing-thirdparty

cp htrace-core4-4.2.0-incubating.jar ../lib

修改regionservers

cd hbase-2.4.13/conf
vim regionservers

你的节点机器

分发HBase包

scp -r hbase包 用户名@机器IP:/分发/目的地

分发完之后记得还要为分发的机器设置环境变量


启动HBase

# 注意要先启动zookeeper
start-dfs.sh

start-hbase.sh

hbase shell

标签:列簇,存储,入门,region,Region,hbase,HBase
来源: https://www.cnblogs.com/S2Jgogo/p/16480358.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有