大数据技术之HBase1

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