大数据技术之HBase1

本文涉及的产品
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
PolarDB Agent Express,2核4GB
简介: 大数据技术之HBase

1 HBase 简介

1.1、HBase 定义

Apache HBase™ 是以 hdfs 为数据存储的,一种分布式、可扩展的NoSQL 数据库。


1.2、HBase 数据模型

HBase 的设计理念依据Google 的BigTable 论文,论文中对于数据模型的首句介绍。


Bigtable 是一个稀疏的、分布式的、持久的多维排序map(<K,V>类型)。


之后对于映射的解释如下:


该映射由行键、列键和时间戳索引;映射中的每个值都是一个未解释(序列化后的)的字节数组。


最终HBase 关于数据模型和BigTable 的对应关系如下:


HBase 使用与Bigtable 非常相似的数据模型。用户将数据行存储在带标签的表中。数据行具有可排序的键和任意数量的列。该表存储稀疏,因此如果用户喜欢,同一表中的行可以具有疯狂变化的列。


最终理解HBase 数据模型的关键在于稀疏、分布式、多维、排序的映射。其中映射map指代非关系型数据库的key-Value 结构。


1.2.1、HBase 逻辑结构

HBase 可以用于存储多种结构的数据,以JSON 为例,存储的数据原貌为:

1.2.2、HBase 物理存储结构

物理存储结构即为数据映射关系,而在概念视图的空单元格,底层实际根本不存储

1.2.3、数据模型

1)Name Space


命名空间,类似于关系型数据库的database 概念,每个命名空间下有多个表。HBase 两个自带的命名空间,分别是hbase 和default,hbase 中存放的是HBase 内置的表,default表是用户默认使用的命名空间。


2)Table


类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。因为数据存储时稀疏的,所有往HBase 写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。


3)Row


HBase 表中的每行数据都由一个RowKey 和多个Column(列)组成,数据是按照RowKey 的字典顺序存储的,并且查询数据时只能根据RowKey 进行检索(不支持SQL),所以RowKey 的设计十分重要。


4)Column


HBase 中的每个列都由Column Family(列族)和Column Qualifier(列限定符,其实就是列名 )进行限定,例如info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。


5)Time Stamp


用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,其值为写入HBase 的时间。


6)Cell


由{rowkey, column Family:column Qualifier, timestamp} 唯一确定的单元。cell 中的数据全部是字节码形式存贮。


其实就是这样一行就是一个单元

1.3、HBase 基本架构

架构角色:


1)Master


实现类为HMaster,负责监控集群中所有的RegionServer 实例。主要作用如下:


管理元数据表格hbase:meta,接收用户对表格创建修改删除的命令并执行


监控region 是否需要进行负载均衡,故障转移和region 的拆分。通过启动多个后台线程监控实现上述功能:


①LoadBalancer 负载均衡器


周期性监控region 分布在regionServer 上面是否均衡,由参数hbase.balancer.period 控制周期时间,默认5 分钟。


②CatalogJanitor 元数据管理器


定期检查和清理hbase:meta 中的数据。meta 表内容在进阶中介绍。


③MasterProcWAL master 预写日志处理器


把master 需要执行的任务记录到预写日志WAL 中,如果master 宕机,让backupMaster读取日志继续干。


2)Region Server


Region Server 实现类为HRegionServer,主要作用如下:


负责数据cell 的处理,例如写入数据put,查询数据get 等


拆分合并region 的实际执行者,由master 监控,由regionServer 执行。


3)Zookeeper


HBase 通过Zookeeper 来做master 的高可用、记录RegionServer 的部署信息、并且存储有meta表的位置信息。


HBase 对于数据的读写操作时直接访问Zookeeper 的,在2.3 版本推出Master Registry 模式,客户端可以直接访问master。使用此功能,会加大对master 的压力,减轻对Zookeeper 的压力。


4)HDFS


HDFS 为Hbase 提供最终的底层数据存储服务,同时为HBase 提供高容错的支持。


2 HBase 快速入门

2.1、HBase 安装部署

2.1.1、Zookeeper 正常部署

首先保证Zookeeper 集群的正常部署,并启动之。

[atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh start 
[atguigu@hadoop103 zookeeper-3.5.7]$ bin/zkServer.sh start 
[atguigu@hadoop104 zookeeper-3.5.7]$ bin/zkServer.sh start

2.1.2、Hadoop 正常部署

Hadoop 集群的正常部署并启动。

[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh 
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

2.1.3、HBase 的解压

  • 解压Hbase 到指定目录
[atguigu@hadoop102 software]$ tar -zxvf hbase-2.4.11-bin.tar.gz -C
/opt/module/
[atguigu@hadoop102 software]$ mv /opt/module/hbase-2.4.11/opt/module/hbase
  • 配置环境变量
[atguigu@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh


#HBASE_HOME
export HBASE_HOME=/opt/module/hbase export PATH=$PATH:$HBASE_HOME/bin
  • 使用source 配置的环境变量生效
[atguigu@hadoop102 module]$ source /etc/profile.d/my_env.sh


2.1.4、HBase 的配置文件

  • hbase-env.sh 修改内容,可以添加到最后:


export HBASE_MANAGES_ZK=false
  • hbase-site.xml 修改内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>hbase.zookeeper.quorum</name> //集群ip
        <value>hadoop102,hadoop103,hadoop104</value>
        <description>The directory shared by RegionServers.
        </description>
    </property>
<!--  <property>-->
<!--  <name>hbase.zookeeper.property.dataDir</name>-->
<!--  <value>/export/zookeeper</value>-->
<!--  <description> 记得修改ZK 的配置文件-->
<!--  ZK 的信息不能保存到临时文件夹-->
<!--  </description>-->
<!--  </property>-->
    <property>
        <name>hbase.rootdir</name> //设置根节点
        <value>hdfs://hadoop102:8020/hbase</value>
        <description>The directory shared by RegionServers.
        </description>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>//是否开启集群模式
        <value>true</value>
    </property>
</configuration>


  • regionservers
hadoop102 
hadoop103 
hadoop104
  • 解决HBase 和Hadoop 的log4j 兼容性问题,修改HBase 的jar 包,使用Hadoop 的jar 包

2.1.5、HBase 远程发送到其他集群

[atguigu@hadoop102 module]$ xsync hbase/


2.1.6、HBase 服务的启动

  • 单点启动
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start master 
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start regionserver
  • 群启

[atguigu@hadoop102 hbase]$ bin/start-hbase.sh

  • 对应的停止服务

[atguigu@hadoop102 hbase]$ bin/stop-hbase.sh

2.1.7、查看HBase 页面

启动成功后,可以通过“host:port”的方式来访问 HBase 管理页面,例如:http://hadoop102:16010



2.1.8、高可用(可选)

在HBase 中HMaster 负责监控HRegionServer 的生命周期,均衡RegionServer 的负载,如果HMaster 挂掉了,那么整个HBase 集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以HBase 支持对HMaster 的高可用配置。


关闭HBase 集群(如果没有开启则跳过此步)


[atguigu@hadoop102 hbase]$ bin/stop-hbase.sh


在conf 目录下创建backup-masters 文件


[atguigu@hadoop102 hbase]$ touch conf/backup-master


在backup-masters 文件中配置高可用HMaster 节点


[atguigu@hadoop102 hbase]$ echo hadoop103 > conf/backup-masters


将整个conf 目录scp 到其他节点


[atguigu@hadoop102 hbase]$ xsync conf


重启hbase,打开页面测试查看 http://hadooo102:16010


2.2、HBase Shell 操作

2.2.1、基本操作

  • 进入HBase 客户端命令行

[atguigu@hadoop102 hbase]$ bin/hbase shell


查看帮助命令


能够展示HBase 中所有能使用的命令,主要使用的命令有namespace 命令空间相关,DDL 创建修改表格,DML 写入读取数据。


hbase:001:0> help


2.2.2、namespace

创建命名空间


使用特定的help 语法能够查看命令如何使用。


hbase:002:0> help 'create_namespace'


创建命名空间bigdata


hbase:003:0> create_namespace 'bigdata'


查看所有的命名空间


hbase:004:0> list_namespace

2.2.3、DDL

创建表


在 bigdata 命名空间中创建表格student,两个列族。info 列族数据维护的版本数为 5 个,如果不写默认版本数为1。


hbase:005:0> create 'bigdata:student', {NAME => 'info', VERSIONS => 5}, {NAME => 'msg'}


如果创建表格只有一个列族,没有列族属性,可以简写。如果不写命名空间,使用默认的命名空间default。


hbase:009:0> create 'student1','info'


查看表


查看表有两个命令:list 和describe


list:查看所有的表名


hbase:013:0> list


describe:查看一个表的详情


hbase:014:0> describe 'student1'


修改表


表名创建时写的所有和列族相关的信息,都可以后续通过alter 修改,包括增加删除列族。


增加列族和修改信息都使用覆盖的方法


hbase:015:0> alter 'student1', {NAME => 'f1', VERSIONS => 3}


删除信息使用特殊的语法


hbase:015:0> alter 'student1', NAME => 'f1', METHOD => 'delete' 
hbase:016:0> alter 'student1', 'delete' => 'f1'
  • 删除表

shell 中删除表格,需要先将表格状态设置为不可用。

hbase:017:0> disable 'student1' 
hbase:018:0> drop 'student1'

2.2.4、DML

  • 写入数据

在HBase 中如果想要写入数据,只能添加结构中最底层的cell。可以手动写入时间戳指定cell 的版本,推荐不写默认使用当前的系统时间。

 hbase:019:0> put 'bigdata:student','1001','info:name','zhangsan'
 hbase:020:0> put 'bigdata:student','1001','info:name','lisi' 
hbase:021:0> put 'bigdata:student','1001','info:age','18'

如果重复写入相同rowKey,相同列的数据,会写入多个版本进行覆盖。例如上面的rowKey是1001,最后info列族的name值是lisi

  • 取数据

读取数据的方法有两个:get 和scan。

 hbase:022:0> get 'bigdata:student','1001'
hbase:023:0> get 'bigdata:student','1001' , {COLUMN => 'info:name'}

get 最大范围是一行数据,也可以进行列的过滤,读取数据的结果为多行cell。


也可以修改读取cell 的版本数,默认读取一个。最多能够读取当前列族设置的维护版本数。

 hbase:024:0>get 'bigdata:student','1001' , {COLUMN => 'info:name', VERSIONS => 6}

scan 是扫描数据,能够读取多行数据,不建议扫描过多的数据,推荐使用startRow 和stopRow 来控制读取的数据,默认范围左闭右开。


hbase:025:0> scan 'bigdata:student',{STARTROW => '1001',STOPROW => '1002'}


实际开发中使用shell 的机会不多,所有丰富的使用方法到API 中介绍。


删除数据


删除数据的方法有两个:delete 和deleteall。


delete 表示删除一个版本的数据,即为 1 个 cell,不填写版本默认删除最新的一个版本。hbase:026:0> delete 'bigdata:student','1001','info:name'


deleteall 表示删除所有版本的数据,即为当前行当前列的多个 cell。(执行命令会标记


数据为要删除,不会直接将数据彻底删除,删除数据只在特定时期清理磁盘时进行)


hbase:027:0> deleteall 'bigdata:student','1001','info:name'

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
7月前
|
存储 人工智能 大数据
云栖2025|阿里云开源大数据发布新一代“湖流一体”数智平台及全栈技术升级
阿里云在云栖大会发布“湖流一体”数智平台,推出DLF-3.0全模态湖仓、实时计算Flink版升级及EMR系列新品,融合实时化、多模态、智能化技术,打造AI时代高效开放的数据底座,赋能企业数字化转型。
1440 0
|
9月前
|
数据采集 人工智能 分布式计算
ODPS在AI时代的发展战略与技术演进分析报告
ODPS(现MaxCompute)历经十五年发展,从分布式计算平台演进为AI时代的数据基础设施,以超大规模处理、多模态融合与Data+AI协同为核心竞争力,支撑大模型训练与实时分析等前沿场景,助力企业实现数据驱动与智能化转型。
623 4
|
10月前
|
存储 分布式计算 Hadoop
Hadoop框架解析:大数据处理的核心技术
组件是对数据和方法的封装,从用户角度看是实现特定功能的独立黑盒子,能够有效完成任务。组件,也常被称作封装体,是对数据和方法的简洁封装形式。从用户的角度来看,它就像是一个实现了特定功能的黑盒子,具备输入和输出接口,能够独立完成某些任务。
|
7月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
9月前
|
SQL 分布式计算 大数据
我与ODPS的十年技术共生之路
ODPS十年相伴,从初识的分布式计算到共生进化,突破架构边界,推动数据价值深挖。其湖仓一体、隐私计算与Serverless能力,助力企业降本增效,赋能政务与商业场景,成为数字化转型的“数字神经系统”。
|
9月前
|
存储 人工智能 算法
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。
|
9月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据在智能物流运输车辆智能调度与路径优化中的技术实现(218)
本文深入探讨了Java大数据技术在智能物流运输中车辆调度与路径优化的应用。通过遗传算法实现车辆资源的智能调度,结合实时路况数据和强化学习算法进行动态路径优化,有效提升了物流效率与客户满意度。以京东物流和顺丰速运的实际案例为支撑,展示了Java大数据在解决行业痛点问题中的强大能力,为物流行业的智能化转型提供了切实可行的技术方案。
|
10月前
|
数据采集 自然语言处理 分布式计算
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
|
10月前
|
存储 分布式计算 算法
Java 大视界 -- Java 大数据在智能教育在线考试监考与作弊检测中的技术创新(193)
本文探讨了Java大数据技术在智能教育在线考试监考与作弊检测中的创新应用。随着在线考试的普及,作弊问题日益突出,传统监考方式难以应对。通过Java大数据技术,可实现考生行为分析、图像识别等多维度监控,提升作弊检测的准确性与效率。结合Hadoop与Spark等技术,系统能实时处理海量数据,构建智能监考体系,保障考试公平性,推动教育评价体系的数字化转型。
|
10月前
|
SQL 缓存 监控
大数据之路:阿里巴巴大数据实践——实时技术与数据服务
实时技术通过流式架构实现数据的实时采集、处理与存储,支持高并发、低延迟的数据服务。架构涵盖数据分层、多流关联,结合Flink、Kafka等技术实现高效流计算。数据服务提供统一接口,支持SQL查询、数据推送与定时任务,保障数据实时性与可靠性。
1370 0