大数据技术之HBase1

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 大数据技术之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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
5天前
|
存储 机器学习/深度学习 SQL
大数据处理与分析技术
大数据处理与分析技术
25 2
|
24天前
|
存储 分布式计算 数据可视化
大数据常用技术与工具
【10月更文挑战第16天】
84 4
|
7天前
|
存储 分布式计算 NoSQL
【赵渝强老师】大数据技术的理论基础
本文介绍了大数据平台的核心思想,包括Google的三篇重要论文:Google文件系统(GFS)、MapReduce分布式计算模型和BigTable大表。这些论文奠定了大数据生态圈的技术基础,进而发展出了Hadoop、Spark和Flink等生态系统。文章详细解释了GFS的架构、MapReduce的计算过程以及BigTable的思想和HBase的实现。
|
7天前
|
SQL 存储 算法
比 SQL 快出数量级的大数据计算技术
SQL 是大数据计算中最常用的工具,但在实际应用中,SQL 经常跑得很慢,浪费大量硬件资源。例如,某银行的反洗钱计算在 11 节点的 Vertica 集群上跑了 1.5 小时,而用 SPL 重写后,单机只需 26 秒。类似地,电商漏斗运算和时空碰撞任务在使用 SPL 后,性能也大幅提升。这是因为 SQL 无法写出低复杂度的算法,而 SPL 提供了更强大的数据类型和基础运算,能够实现高效计算。
|
10天前
|
存储 大数据 定位技术
大数据 数据索引技术
【10月更文挑战第26天】
24 3
|
10天前
|
存储 大数据 OLAP
大数据数据分区技术
【10月更文挑战第26天】
39 2
|
13天前
|
消息中间件 分布式计算 大数据
数据为王:大数据处理与分析技术在企业决策中的力量
【10月更文挑战第29天】在信息爆炸的时代,大数据处理与分析技术为企业提供了前所未有的洞察力和决策支持。本文探讨了大数据技术在企业决策中的重要性和实际应用,包括数据的力量、实时分析、数据驱动的决策以及数据安全与隐私保护。通过这些技术,企业能够从海量数据中提取有价值的信息,预测市场趋势,优化业务流程,从而在竞争中占据优势。
45 2
|
15天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
59 2
|
16天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
56 1
|
1月前
|
存储 数据采集 分布式计算
大数据技术:开启智能时代的新引擎
【10月更文挑战第5天】大数据技术:开启智能时代的新引擎