45分钟

HBase 应用实战

HBase实战练习

实验预计耗时:45分钟

1. 课程背景

1.1 课程目的

弹性 MapReduce(EMR)是腾讯云结合云技术和 Hadoop、HBase、Spark 等社区开源技术,提供的安全、低成本、高可靠、可弹性伸缩的云端托管 Hadoop 服务。您可以在数分钟内创建安全可靠的专属 Hadoop 集群,以分析位于集群内数据节点或 COS 上的 PB 级海量数据。

本实验将搭建一个EMR集群,通过使用HBase命令行创建表并写入数据,让学员掌握HBase Shell命令和HBase WebUI的基本使用。

1.2 课前知识准备

学习本课程前,学员需要掌握以下前置知识:

1、能力基础

  • Linux运维基础:掌握Linux远程登录、文件与目录管理等。
  • Hadoop基础:理解Hadoop基本组件的功能与原理。

2、相关技术

  • HBase:HBase是一个开源的、分布式的、key-value结构的、列式数据库。能够对特定大型数据集提供实时的随机读写。Hbase集群由以下组件构成:
    • Zookeeper集群:实时监控RegionServer的状态,将上下线信息通知HMaster。
    • HMaster节点:管理HRegionServer,实现其负载均衡。
    • HRegionServer节点:管理本地HRegion。
    • Client节点:整个HBase集群的访问入口。
    • HRegion:负责管理着一个表的一部分数据,按RowKey范围划分的某段连续的数据,管理的数据真实存储在HDFS上。
  • HBase的数据存储具有以下核心概念
  • 命名空间(Name Space):命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。
  • 表(Table):类似于关系型数据库的表概念。不同的是,HBase定义表时只需要声明列族,不需要声明具体的列。
  • 行(Row):HBase表中的每行数据都由一个行键(Row Key)和多个列(Column)组成。
  • 行键(Row Key):一行数据的主键,数据切分的依据;表中所有数据按照Row key的字典序排序存储。
  • 列族(Column Family):是表结构(schema)的一部分,需在使用表前创建,表在水平方向由一个或多个列族组成,一个列族可以由任意多个列组成;同一列族的数据底层存储在同一目录下。
  • 列(Column):由列族名称+列的名称组成,如:user:name,可动态扩展,无需预先定义;通过RowKey和列确定的一个存贮单元称为单元格(cell) 。
  • 版本(Version):每行数据都有多个版本,版本通过时间戳来索引。
  • 时间戳(TimeStamp):用于标识数据的不同版本(version)。时间戳默认由系统指定,也可以由用户显式指定。
  • Region:Region由一个表的若干行组成,在Region中行的排序按照行键(Row Key)字典排序。

2. 实验环境

2.1 实验操作环境

本课程需要以下实验操作环境:

  1. 可以接入互联网的笔记本电脑或者台式机,本实验使用Windows系统
  2. 实验环境:计算机本地+腾讯云控制台

2.2 实验架构图

本实验将使用EMR三节点集群(Master节点和两个Core节点),使用PuTTY连接Master节点的方式访问集群。

2.3 实验的数据规划表

资源名称

数据

说明

腾讯云账号

账号:XXXXXXXX、密码:XXXXXXXX

涉及产品如下:VPC、EMR

PuTTY

版本:0.73

PuTTY下载

3. 实验流程

实验共分为四个部分,首先为实验环境准备,通过腾讯云弹性MapReduce创建一个HBase集群,并使用PuTTY进行远程连接。接下来分为通过HBase基本功能、HBase表操作和HBase数据操作三个任务,带领学员熟悉和掌握HBase基本命令和功能的使用。

4. 实验步骤

任务1 实验环境准备

【任务目标】

通过EMR集群的搭建练习,使学员可以熟练EMR集群搭建,并掌握使用PuTTY连接EMR集群。

【任务步骤】

1、EMR集群选购

1.在腾讯云官网,找到弹性MapReduce首页,点击立即购买

2.可用区与软件配置如下:

配置项

配置项说明

计费模式

按量计费

地域/可用区

广州/广州四区(可根据所在地自定义选择)

产品版本

EMR-V3.0.0

必选组件

hadoop、zookeeper、knox

可选组件

hbase

确认配置无误后,点击下一步:硬件配置

注意:请勿选择EMR-3.0.0 tlinux,如产品版本无EMR-3.0.0版本,请更换个人主账号进行实验。

3.硬件配置如下:

配置项

配置项说明

节点高可用

不启用

Master配置1台

EMR标准型S4 / 2核8G,CBS云盘:100G高效云盘 X 1

Core配置2台

EMR标准型S4 / 2核8G,CBS云盘:100G高效云盘 X 1

集群外网

开启集群Master节点公网

集群网络

新建或选择已有的私有网络

启动高可用选项可以自定义选择,默认是选择的,如果取消需要手动取消选择。由于我们这里的实验环境仅仅是一个学习的实验环境所以这里我们将此选项取消,实际生产中要根据实际环境合理选择是否需要这个配置。

确认硬件配置信息无误后,点击下一步:基础配置

4.基础配置如下:

配置项

配置项说明

集群名称

emr-test

远程登录

开启

安全组

创建新安全组

对象存储

不开启

登录密码

EMR集群云主机root用户登录的密码

确认信息无误后,点击购买,会自动跳转至集群页。图中的集群实例状态中显示集群创建中

等待8min左右,集群构建成功,截图如下:

2、第三方工具连接EMR集群

1.复制集群页的主节外网IP,打开PuTTY创建连接,将复制的外网IP粘贴至Host Name,端口默认22,如图:

2.点击Open,第一次连接会弹出安全警告,点击是(Y)

3.接下在login as:后填写用户名为root,密码为构建EMR的时候设置的密码:

备注:这里只能使用root用户进行连接。

回车确认后,我们即可成功访问主节点实例。输入java进程查看命令jps,可看到应用进程已经启动。

jps

任务2 HBase基本功能

【任务目标】

掌握HBase shell启动和基本命令的使用,了解WebUI的查看方式。

【任务步骤】

1、Hbase Shell基础命令

1.进入HBase客户端命令行:

hbase shell

2.查看帮助命令,可以查看命令的全部介绍,分为general、ddl、namespace、dml、tools等等。

help

查看具体命令的帮助,help后的内容需要用引号括起来,例如:

help 'get'

3.查看集群状态

status

如图可以查看到目前HBase集群各个节点角色的数量:

4.查看版本

version

5.查看操作用户及组信息

whoami

6.退出shell

quit

2、HBase WebUI使用

1.在弹性 MapReduce控制台,点击左侧的组件管理,点击HBase的原生WebUI访问地址:

2.如浏览器弹出警告,选择接受风险并继续,接下来还需输入集群的用户名root和登录密码进行页面的访问。

3.进入页面后,可在UI界面查看集群或表的信息。

任务3 HBase表操作

【任务目标】

掌握HBase表操作与命名空间操作的基本命令,理解表与命名空间的关系。

【任务步骤】

1、表的基本操作

1.进入HBase命令行

hbase shell

2.创建表

创建表时,需要指定表名和列族名,而且至少需要指定一个列族。

create'表名','列族名1' ,'列族名2', …

create 'student','info'

3.查看所有表

list

2.描述表信息

desc 'student'

可知目前student表为可用的,列族info,版本为1等等:

3.删除表

drop 'student'

提醒表需要先失效才能删除:

4.先要让这个表失效

disable 'student'

然后再使用drop删除表。

drop 'student'

使用list进行验证

list

5.查看表是否存在:

exists 'student'

2、命名空间操作

1.创建一个命名空间

create_namespace 'tx'

2.查看命名空间

list_namespace

目前已经有三个命名空间,其中’default‘存储了没有指定命名空间的表和数据,‘hbase’存储了HBase的元数据。

3.创建一个person表,并指定一个命名空间为tx:

create 'tx:person','info'

使用list进行查看:

list

4.在WebUI进行表信息查看

刷新HBase WebUI,可查看person表的信息如下:

任务4 HBase数据操作

【任务目标】

通过HBase数据增删改查的基本操作,理解表、行键、列族和列等概念的含义与联系。

【任务步骤】

1、数据的增删改

1.使用put命令插入数据

put 'tx:person', '1001', 'info:name','Nick'
put 'tx:person', '1001', 'info:sex','male'
put 'tx:person', '1001', 'info:age','18'

再向一个新的Row Key插入数据

put 'tx:person', '1002', 'info:name','Tom'
put 'tx:person', '1002', 'info:sex','female'
put 'tx:person', '1002', 'info:age','20'

2.数据的查询

scan 'tx:person'

可见HBase为我们自动加了时间戳:

3.数据的获取

get 'tx:person', '1001'

4.数据的修改

put 'tx:person','1001','info:age','19'

验证数据修改:

scan 'tx:person'

5.数据的删除

delete 'tx:person','1001','info:sex'

验证数据删除

scan 'tx:person'

2、数据在HDFS查看

1.在弹性 MapReduce控制台,点击左侧的组件管理,点击HDFS的原生WebUI访问地址:

2.找到上方的Utilities下拉栏,点击Browse the file system

3.点击根目录下的hbase

4.命名空间和表都是以文件夹形式在HDFS内进行保存,在/hbase/data/tx/person目录下一直点下去找到一个info文件夹,查看内容以发现,此时数据为空。因为目前HBase还没有将数据刷新到磁盘,目前数据还在内存中。

如果要HBase自动刷数据到磁盘,需要当某个memstore的大小达到了hbase.hregion.memstore.flush.size(默认值128M),其所在region的所有memstore都会刷写到磁盘。配置可以在配置文件中查看。

在弹性MapReduce控制台,点击组件管理,找到HBase,点击右侧的配置:

配置管理下,hbase-site.xml中可以查看到如图所示的参数:

hbase.hregion.memstore.block.multiplier指单个memStore超过 hbase.hregion.memstore.block.multiplier 的倍数,就阻止写入操作。当一个集群批量导入数据时,写入速度过快导致异常可调整 hbase.hregion.memstore.block.multiplier 参数。

5.使用flush命令,可以手动从内存刷数据到磁盘。

查看帮助;

help 'flush'

如图可知flush有以下四种用法:

hbase> flush 'TABLENAME' hbase> flush 'REGIONNAME' hbase> flush 'ENCODED_REGIONNAME' hbase> flush 'REGION_SERVER_NAME'

执行如下命令,将person表的数据刷新到HDFS:

flush 'tx:person'

再次刷新HDFS页面,就可以看到HDFS内的文件是有数据的了。

至此,HBase实战练习的实验任务就全部完成了,您可以通过help功能查看HBase的其他Shell命令,自行进行练习。

5. 注意事项

如实验资源无需保留,请在实验结束后及时销毁,以免产生额外费用。