HBase数据库应用案例教程全套课件_第1页
HBase数据库应用案例教程全套课件_第2页
HBase数据库应用案例教程全套课件_第3页
HBase数据库应用案例教程全套课件_第4页
HBase数据库应用案例教程全套课件_第5页
已阅读5页,还剩454页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HBase数据库应用案例教程全课导航01HBase数据库基础02HBaseShell03HBase客户端API04HBase客户端API进阶05HBase原理实现06HBase性能优化07HBase与MapReduce的集成1HBase数据库基础项目项目导读随着大数据时代的到来,面对快速增长的数据规模和日渐复杂的数据模型,关系型数据库已无法满足海量数据的高效率存储和访问需求,以及数据库的高可扩展性和高可靠性需求等。在这种背景下,非关系型数据库(NoSQL)应运而生,并逐渐成为人们使用数据库时的新选择。HBase作为典型的非关系型数据库之一,具有广阔的应用前景。知识目标了解HBase的特性及应用场景。了解HBase与Hadoop的关系。熟悉HBase数据模型的相关知识。熟悉HBase的架构组成部分及其功能。能力目标能够安装HBase、Hadoop等。能够配置HBase的单机模式、伪分布式模式和完全分布式模式。素质目标通过了解Hadoop生态系统的各个组件,增强团结协作意识。学会利用事物间的关联性解决问题,提高逻辑思维能力。项目分析深入理解HBase的原理,并在使用时对其进行恰当的管理和维护,能够有效提高数据的访问效率,以及集群的性能和安全性。本项目首先介绍HBase的工作原理、Region

管理、运维管理及数据管理方面的内容,然后通过基于用户行为数据表的预拆分和在HBase集群中添加RegionServer节点的操作,让读者对HBase的原理有更深刻的理解。项目导航HBase简介1HBase与Hadoop的关系2HBase数据模型3HBase架构401HBase简介问题导入NoSQL的典型应用HBase的应用场景全班学生以3~5人为一组,各组选出组长。组长组织组员扫码观看“NoSQL的典型应用”和“HBase的应用场景”视频,讨论并回答下列问题。问题1:说一说你对NoSQL的理解。问题2:根据HBase的应用场景类型,尝试列举HBase在日常生活中的应用场景(不少于3个)。1.1.1HBase的特性01HBase的表可以非常大,其单表可存储达百亿行、百万列数据。海量存储02HBase

是面向列的数据库,它将数据按列族划分(一个列族中可以包含一个列或多个列),并将同一个列族的数据存储在一起。面向列03HBase

中的数据可以有多个版本。默认情况下,版本号是数据写入时的时间戳。数据多版本04HBase是非关系型数据库,适合存储非结构化数据。非结构化1.1.1HBase的特性05由于值为空的列不占用存储空间,因此,在实际应用中通常将

HBase

表设计为稀疏矩阵,这样既可以节省存储开销,又可以提高读性能。稀疏06HBase

可以通过横向扩展的方式,将多个性能普通的服务器添加到集群中(无须提升服务器自身的性能),从而实现动态扩展。高可扩展性07HBase的数据存储在HDFS(Hadoopdistributedfilesystem,Hadoop分布式文件系统)中,HDFS

的多副本机制可以实现故障的自动修复,能够保证

HBase

的高可靠性。高可靠性1.1.1HBase的特性请同学们思考,面向行的关系型数据库主要有哪些?他们的特点与HBase有何不同?课堂讨论1.1.2HBase的应用场景1日志数据交易数据海量数据存储2实时监控系统互联网搜索低延迟、高并发读写3气象数据统计股票行情分析数据分析和挖掘4实时推荐系统实时计算和流处理课堂检测HBase的特点都有哪些?主要的应用场景有哪些?HBase和Hadoop的关系是什么?简述HBase的逻辑模型和物理模型?HBase的架构基本组成有哪些?它们都有哪些作用?课堂小结HBase简介HBase的特性HBase的应用场景02HBase与Hadoop的关系视频导入1.2HBase与Hadoop的关系Hadoop是由Apache软件基金会主持开发的一个开源软件,它为用户提供了底层细节透明的分布式基础框架。

现如今,Hadoop已成为大数据的代名词,针对大数据处理过程中的各个环节,它都有相应的解决方案,于是逐渐形成了完整的Hadoop生态系统,如右图所示。Hadoop生态系统拓展阅读Hadoop生态系统由多个组件构成,它们需要协同工作,才能更好地完成大数据处理任务,这体现了协作的重要性。团结协作是现代生活中不可缺少的一环。“众人拾柴火焰高”,只有善于团结协作,才能实现优势互补,进而激发协同效应,最终产生“1+1>2”的效果。1.2HBase与Hadoop的关系简述HBase与Hadoop的关系。课堂讨论1.2HBase与Hadoop的关系正是因为HBase底层依赖Hadoop,所以选择HBase版本时,还要考虑其与Hadoop版本的兼容性。下表为HBase官方网站发布的HBase与Hadoop版本兼容信息。Hadoop版本HBase2.5.xHadoop版本HBase2.4.xHadoop版本HBase2.3.xHadoop2.10.2+SHadoop2.10.2+SHadoop2.10.xSHadoop3.1.1+XHadoop3.1.1+SHadoop3.1.0XHadoop3.2.3+SHadoop3.2.3+SHadoop3.1.1+SHadoop3.3.[0~1]XHadoop3.3.[0~1]SHadoop3.2.xSHadoop3.3.2+SHadoop3.3.2+SHadoop3.3.xS注:(1)S=supported,表示经过测试是支持的;(2)X=notsupported,表示不支持。课堂检测HBase与Hadoop的关系是什么?03HBase数据模型视频导入1.3.1相关概念表1HBase表(table)的作用是将数据组织起来,同一个表中的数据通常都是相关的。行键2每个HBase表由若干行(row)组成,每行数据又由一个行键(rowkey)和若干列值组成,且可通过行键唯一标识一行数据。列族3一个HBase表中可以包含一个列族(columnfamily)或多个列族,一个列族中可以包含一个列或多个列。列族需要在定义表时定义。1.3.1相关概念列限定符4HBase列族中的列通过列限定符(columnqualifier)进行标识。列限定符不需要在定义表和列族时定义,可以按需求动态添加。HBase

中的列名由列族名和列限定符名两部分组成,中间用冒号隔开。单元格5单元格(cell)是HBase中数据的存储单元。在HBase表中,行键、列族和列限定符共同确定一个单元格。时间戳6HBase

表的单元格中可以保存同一份数据的多个版本,每个版本对应一个时间戳(timestamp),该时间戳通常为数据写入的时间。1.3.1相关概念为便于理解HBase数据模型的相关概念,下面通过一个实例进行说明。假设下表是一个存储了图书借阅信息的

HBase

表,表中的图书编号是行键,用来唯一标识每本图书的信息;列族info中包含了两个列,分别是book_name和date,对应保存的是书名和借阅时间。在下表中行键、列族、列限定符、单元格、时间戳分别对应哪些内容?课堂讨论1.3.1相关概念列族列限定符单元格行键t1=2023-09-20T17:57:39.210t2=2023-09-01T10:23:19.265图书借阅表1.3.2逻辑模型逻辑模型就是逻辑视图,也称概念视图,是

HBase

中数据的逻辑组织方式。HBase

表可视为一个稀疏、多维的数据映射关系。为便于理解,下面通过下表的实例说明HBase的逻辑模型。行键stu_infostu_grade列值时间戳列值时间戳20231001stu_info:nameLilyt1

stu_info:sexfemalet1

stu_info:citybeijingt1

20232001stu_info:nameTomt2stu_grade:math59t2stu_info:sexmalet2stu_grade:computer88t2

stu_grade:math70t3HBase逻辑模型实例1.3.3物理模型关系型数据库需要预先创建表结构,为每个列预留存储空间,因此对于稀疏数据来说,表中会产生大量的

NULL

值,这样会消耗大量的存储空间。而基于列存储的HBase

对于内容为空的单元格,实际上并不会存储,也就是说内容为空的单元格并不占用存储空间。1.3.3物理模型例如,表(HBase逻辑模型实例)中行键为

20232001

的数据在物理存储时会将两个列

stu_info

stu_grade

分别存储,属于同一个列族的数据会存储在一起,如下表所示。行键stu_info列值时间戳20232001stu_info:nameTomt2stu_info:sexmalet2行键stu_grade列值时间戳20232001stu_grade:math59t2stu_grade:computer88t2stu_grade:math70t3HBase物理存储方式(列族stu_info)HBase物理存储方式(列族stu_grade)课堂检测简述数据模型的相关概念?数据模型的分类及定义是什么?课堂小结HBase数据模型相关概念表行键列族列限定符单元格时间戳逻辑模型物理模型04HBase架构视频导入1.4HBase架构HBase由客户端、Zookeeper、Master和RegionServer这4部分组成,其架构如下图所示。HBase架构1.4.1客户端客户端包含访问HBase的接口,是整个HBase集群的入口。对于管理类的操作,客户端与Master通信;对于数据读写类的操作,客户端与RegionServer通信。

提示远程过程调用(remoteprocedurecall,RPC),是一台计算机跨越底层网络协议调用另一台计算机的子程序或服务所遵循的协议标准,具有透明性、高性能、可控性等特点。1.4.2ZookeeperZookeeper是由Apache维护的分布式协作服务,主要用于实现分布式系统中Master选举、分布式协调、集群管理、负载均衡、分布式锁等功能。在HBase集群中,Zookeeper为集群提供稳定、可靠的协作服务。通常情况下,HBase

集群中包含一个

Master

和多个

RegionServer,但

HBase

集群也可以启动多个

Master,然后利用

Zookeeper

的选举机制从多个

Master

中选举一个作为主Master。当

HBase

启动时,每个

RegionServer

都需要将自己的信息注册到

Zookeeper

中,Zookeeper会实时监控每个RegionServer并告知选中的Master,这样Master就可以随时感知RegionServer的运行状态,从而更好地管理HBase集群。1.4.2Zookeeper请同学们思考,Zookeeper在HBase中(Master节点、RegionServer节点)的主要作用有哪些?课堂讨论1.4.3MasterMaster是HBase集群中的服务器,Zookeeper可以保证在任何时刻总有唯一一个

Master正常运行,所以

Master

不存在单点失效的问题。Master

负责监控集群中所有

RegionServer的运行状态;用来管理表和Region,具体包括以下几点。(1)管理用户对表的增、删、改、查等操作。(2)管理RegionServer的负载均衡。(3)Region拆分或合并之后,负责重新调整Region的分布。(4)在RegionServer发生故障后,负责失效RegionServer上Region的迁移工作。Master还负责维护当前可用的RegionServer列表,以及哪些Region分配给哪些RegionServer,哪些

Region

还未被分配等。1.4.4RegionServerRegionServer

HBase

的核心模块,主要功能是维护分配给自己的

Region,并响应用户的数据读写请求(具体内容在

5.1.3

节详细介绍)。HBase

通常使用

HDFS

作为其底层文件存储系统,因此RegionServer须向HDFS中读写数据。1.4.4RegionServerHBase系统基本结构中Master的作用主要有哪些?课堂讨论课堂检测HBase有哪些部分组成?HBase各组成部分作用是什么?课堂小结HBase架构客户端ZookeeperMasterRegionServer项目实施1——安装HBase安装HBase前须选择合适的HBase版本。在实际应用中,选择HBase版本时通常遵循非最新、稳定原则。鉴于此,本书使用HBase2.4.14。……详见教材。安装HBase项目实施2——配置HBase单机模式默认情况下,HBase运行在单机模式下,该模式是HBase最简单的运行模式,通常只用于测试。HBase是基于Java语言开发的,因此,安装Java环境(JDK)是基本要求。同时,由于HBase单机模式采用本地文件系统存储数据,所以配置HBase单机模式只需安装JDK。……详见教材。配置HBase单机模式配置HBase伪分布式模式安装JDK配置SSH免密登录项目实施3——配置HBase伪分布式模式HBase

伪分布式模式仍然完全运行在单个主机上。该模式常用于测试,不应将其用于实际生产或性能评估。……详见教材。配置HBase伪分布式模式配置HBase伪分布式模式安装JDK配置SSH免密登录安装Hadoop配置Hadoop伪分布式模式配置HBase伪分布式模式项目实施4——配置HBase完全分布式模式在实际生产环境中,为了满足业务的可扩展性与读写性能要

求,HBase通常运行在完全分布式模式下。在配置HBase完全分

布式模式时,HBase集群至少需要3个节点(各节点相关信息见

下表),且使用外部Zookeeper。……详见教材。配置HBase完全分布式模式节点编号主机名IP地址1master512slave1523slave253项目实施4——配置HBase完全分布式模式配置HBase完全分布式模式设置节点信息安装JDK配置SSH免密登录安装Hadoop配置Hadoop完全分布式模式安装并配置Zookeeper配置HBase完全分布式模式文旌客服对课件有修改、优化建议作业布置遇到问题想免费使用平台免费建课请扫描右侧二维码,添加客服微信解决文旌客服联系方式谢谢HBase数据库应用案例教程2HBaseShell项目项目导读HBaseShell是HBase数据库自带的命令行工具。通过HBaseShell,用户可以直接使用命令来完成数据库的常见操作,无须编写额外的代码或使用其他工具。这种交互方式简单直观,使得用户能够更加轻松地使用HBase,同时也为用户提供了最基本的学习和探索HBase功能的途径。知识目标掌握常规操作命令的格式,如help、status、version命令等。掌握数据定义命令的格式,如create、list、describe命令等。掌握数据操作命令的格式,如put、get、scan、delete命令等。能力目标能够使用HBaseShell与HBase进行交互。素质目标增强主动思考、积极寻求问题解决方法的意识。提高隐私保护意识,树立正确的价值观。项目分析使用HBaseShell提供的各种命令,用户可以轻松地与HBase进行交互,如创建、删除和修改表,插入、更新和查询数据等。本项目就以学生信息表为例,介绍常用HBaseShell命令的格式,然后通过创建并操作用户行为数据表,练习HBaseShell的综合应用。项目导航常规操作命令1数据定义命令2数据操作命令301常规操作命令问题导入全班学生以3~5人为一组,各组选出组长。组长组织组员扫码观看“什么是Shell”和“使用HBaseShell操作HBase的好处”视频,讨论并回答下列问题。问题1:说一说你对Shell的理解。问题2:简述使用HBaseShell操作HBase的好处。什么是Shell使用HBaseShell

操作HBase的好处常规操作命令HBase启动成功后,输入以下命令可进入Shell环境,如下图所示。Shell环境[root@localhost~]#hbaseshell常规操作命令HBase的单机模式、伪分布式模式和完全分布式模式有什么区别?课堂讨论2.1.1查看帮助熟练使用

help

命令,可在不借助网络或其他参考资料的情况下快速获取命令的帮助信息。help命令格式如下。help['命令名']2.1.1查看帮助【实例2-1】

查看HBaseShell中的所有命令。help语句执行结果如图所示。实例2-1语句执行结果(部分)2.1.1查看帮助【实例2-2】

查看create命令的帮助信息。help'create'语句执行结果如图所示。实例2-2语句执行结果(部分)2.1.1查看帮助在HBaseShell中,命令名称以及命令格式中的参数在使用时需要区分大小写吗?课堂讨论2.1.2查看状态使用status命令可查看HBase集群的状态信息,其命令格式如下。//查看集群的状态信息statusstatus'summary'//查看集群最简洁的状态信息status'simple'//查看集群详细的状态信息status'detailed'2.1.2查看状态status命令不加参数时,status语句表示什么?课堂讨论2.1.2查看状态【实例2-3】

查看HBase集群的状态信息。status语句执行结果如图所示。实例2-3语句执行结果2.1.2查看状态【实例2-4】

查看HBase集群详细的状态信息。status'detailed'语句执行结果如图所示。实例2-4语句执行结果(部分)2.1.3查看版本【实例2-5】

查看当前环境中HBase的版本信息。version语句执行结果如图所示。使用version命令可查看HBase的版本信息,其命令格式如下。version实例2-5语句执行结果2.1.4查看当前用户【实例2-6】

查看当前用户的详细信息。whoami语句执行结果如图所示。使用whoami命令可查看当前用户的详细信息,其命令格式如下。whoami实例2-6语句执行结果课堂检测查看帮助、查看状态、查看版本和查看当前用户的命令分别是什么?课堂小结常规操作命令查看帮助查看状态查看版本查看当前用户02数据定义命令问题导入提问回顾上节课知识点:(1)查看帮助的命令是什么?(2)查看状态的命令是什么?(3)查看版本的命令是什么?(4)查看当前用户的命令是什么?2.2.1创建表create

命令:可创建一个新表,须指明表名和列族名。create'表名','列族名1'[,'列族名2']…create'表名',{NAME=>'列族名1'[,VERSIONS=>版本号]}[,{NAME=>'列族名2'[,VERSIONS=>版本号]}]…方括号表示内容为可选项;符号“=>”表示将后面的值赋给指定的参数;版本号表示列族版本数,是指单元格内的数据可以保留的版本个数。2.2.1创建表【实例2-7】创建名为test的表,要求表中包含一个列族info,且使用默认参数。create'test','info'也可以使用以下语句。create'test',{NAME=>'info'}语句执行结果如下图所示。实例2-7程序运行结果2.2.1创建表【实例2-8】创建名为student的表,要求表中包含两个列族stu_info和stu_grade,且列族版本数分别为2和5。create'student',{NAME=>'stu_info',VERSIONS=>2},{NAME=>'stu_grade',VERSIONS=>5}2.2.1创建表在创建表时,如果不指定列族版本数,查询结果是什么?课堂讨论2.2.2查看所有表使用list命令可查看HBase中的所有表,其命令格式如下。list【实例2-9】查看HBase中的所有表。list语句执行结果如下图所示。实例2-9程序运行结果2.2.3查看表结构使用describe命令可查看表的结构信息,其命令格式如下。describe'表名'【实例2-10】查看student表的结构信息。describe'student'语句执行结果如右图所示。实例2-9程序运行结果2.2.3查看表结构一般情况下,describe命令可以简写为“desc”。在使用desc简写命令时,下列那种情况会出错?(a)desc‘my_table’(b)desc‘desc_table’课堂讨论2.2.4修改表结构使用

alter

命令可修改表结构,如修改列族版本数,添加或删除列族等。alter

命令格式如下。//修改列族版本数alter'表名',{NAME=>'列族名1',VERSIONS=>版本号}[,{NAME=>'列族名2',VERSIONS=>版本号}]…//添加列族alter'表名','列族名1'[,'列族名2']…//删除列族alter'表名',{NAME=>'列族名1',METHOD=>'delete'}[,{NAME=>'列族名2',METHOD=>'delete'}]…2.2.4修改表结构【实例2-11】添加列族。在student表中添加列族test。alter'student','test'语句执行结果如下图所示。实例2-11程序运行结果2.2.4修改表结构【实例2-12】修改列族版本数。将student表中列族stu_info的版本数修改为4。alter'student',{NAME=>'stu_info',VERSIONS=>4}使用describe命令查看student表当前的结构信息,如下图所示。实例2-12程序运行结果2.2.4修改表结构【实例2-13】删除列族。将student表中的列族test删除。alter'student',{NAME=>'test',METHOD=>'delete'}也可以使用以下语句。alter'student','delete'=>'test'2.2.4修改表结构当HBase表中只有一个列族时,能否将其删除?课堂讨论2.2.5判断表是否存在使用exists命令可判断指定表是否存在,其命令格式如下。exists'表名'【实例2-14】判断student表是否存在。exists'student'语句执行结果如下图所示。实例2-14程序运行结果student表存在2.2.5判断表是否存在【实例2-15】判断teacher表是否存在。exists'teacher'语句执行结果如下图所示。实例2-15程序运行结果teacher表存在2.2.6禁用/启用表1.禁用表01disable命令:禁用指定表。disable'表名'02disable_all命令:禁用所有满足正则表达式的表。disable_all'正则表达式'03is_disabled命令:判断指定表是否被禁用。is_disabled'表名'2.2.6禁用/启用表1.禁用表【实例2-16】禁用表student。disable'student'【实例2-17】禁用所有以“t”开头的表。disable_all't.*'语句执行结果如下图所示。实例2-17程序运行结果2.2.6禁用/启用表1.禁用表【实例2-18】判断student表是否被禁用。is_disabled'student'语句执行结果如下图所示。实例2-18程序运行结果student表已经被禁用2.2.6禁用/启用表2.启用表01enable命令:启用指定表。enable'表名'02enable_all命令:启用所有满足正则表达式的表。enable_all'正则表达式'03is_enabled命令:判断指定表是否被启用。is_enabled'表名'2.2.6禁用/启用表2.启用表【实例2-19】启用student表。enable'student'【实例2-20】判断student表是否被启用。is_enabled'student'语句执行结果如下图所示。实例2-20程序运行结果2.2.7删除表删除表分两步进行,首先禁用表,然后删除表。(1)drop命令:删除指定表。disable'表名'drop'表名'(2)drop_all命令:删除所有满足正则表达式的表。disable'正则表达式'drop_all'正则表达式'2.2.7删除表【实例2-21】删除test表。//禁用test表,若test表已禁用,可不执行该操作disable'test'//删除test表drop'test'使用list命令查看test表是否删除成功,如下图所示。实例2-20程序运行结果test表删除成功课堂检测如何创建一个新表?如何查看HBase中的所有表?如何查看表的结构信息?如何修改列族版本数,添加或删除列族?如何判断表是否存在?如何禁用/启用表?如何删除表?课堂小结数据定义命令创建表查看所有表查看表结构修改表结构判断表是否存在禁用/启用表禁用表启用表删除表03数据操作命令问题导入提问回顾上节课知识点:创建表、查看所有表、查看表结构、修改表结构、判断表是否存在、禁用/启用表、删除表的命令分别是什么?2.3.1插入/更新数据使用put命令可向表中插入数据,或更新指定行的数据。在使用put命令时,必须指明表名和行键,其命令格式如下。put'表名','行键','列族名[:列限定符名]','列值'【实例2-22】向student表中插入数据。put'student','20231001','stu_info:name','Lisi'上述语句中,student是表名;20231001是行键;“stu_info:name”中的stu_info是列族名,必须是已经定义的;“stu_info:name”中的name是列限定符名,是临时定义的;Lisi

是单元格的值。2.3.1插入/更新数据put'student','20231001','stu_info:sex','female'put'student','20231001','stu_info:class','1'put'student','20231001','stu_grade:Chinese','95'put'student','20231001','stu_grade:English','99'继续向student表中插入数据,完善Lisi的信息。以上语句的作用是插入一条学号为

20231001,姓名为

Lisi,性别为

female,班级为

1班,语文、英语科目成绩分别为95分和99分的数据。2.3.1插入/更新数据//插入第二行数据put'student','20231002','stu_info:name','zhangxin'put'student','20231002','stu_info:sex','male'put'student','20231002','stu_info:class','2'put'student','20231002','stu_grade:Chinese','90'put'student','20231002','stu_grade:English','95'//插入第三行数据put'student','20231003','stu_info:name','wangwei'put'student','20231003','stu_info:sex','male'put'student','20231003','stu_info:class','3'put'student','20231003','stu_grade:Chinese','92'put'student','20231003','stu_grade:English','93'继续向student表中插入两行数据。2.3.1插入/更新数据插入数据后的student表如下图所示。插入数据后的student表2.3.1插入/更新数据此时,student表的逻辑模型如下表所示。行键stu_infostu_gradenamesexclassChineseEnglish20231001Lisifemale1959920231002zhangxinmale2909520231003wangweimale39293student表的逻辑模型如果使用put语句操作的单元格中已有数据,则在不考虑时间戳的情况下,执行put语句将更新单元格中已有的数据。2.3.1插入/更新数据【实例2-23】将student表中行键为20231001的学生姓名由Lisi更新为Lisa。put'student','20231001','stu_info:name','Lisa'更新数据后的student表如下图所示。更新数据后的student表2.3.1插入/更新数据执行put命令时,插入和更新有什么不同?课堂讨论拓展阅读HBase提供了append命令用于给某个单元格的值拼接新的值,其命令格式如下。append'表名','行键','列族名:列限定符名','值'假设test表中行键为101、列名为“info:name”的单元格数据为“wang”,则执行语句“append'test','101','info:name','dong'”后,列名为“info:name”的单元格数据变为“wangdong”。2.3.2查询数据1.get命令使用get命令可查询表中的一行数据或一个单元格的数据,其命令格式如下。//查询一行数据或一行中指定列族名或列名的数据get'表名','行键'[,'列族名1[:列限定符名1]'][,'列族名2[:列限定符名2]']…//查询一个指定列族名或列名的数据get'表名','行键',{COLUMN=>'列族名[:列限定符名]'}//查询多个指定列族名或列名的数据,此处列族名外的方括号不能省略get'表名','行键',{COLUMN=>['列族名1[:列限定符名1]','列族名2[:列限定符名2]']…}//查询单元格中多个版本数据get'表名','行键',{COLUMN=>'列族名[:列限定符名]',VERSIONS=>版本号}2.3.2查询数据1.get命令【实例2-24】使用get命令查询student表中的数据。get'student','20231001'(1)查询student表中行键为20231001的数据。语句执行结果如下图所示。使用get命令查询一行数据2.3.2查询数据1.get命令get'student','20231002','stu_grade'(2)查询student表中行键为20231002、列族名为stu_grade的数据。语句执行结果如下图所示。get'student','20231002',{COLUMN=>'stu_grade'}也可以使用以下语句。使用get命令查询一行中指定列族名数据2.3.2查询数据1.get命令get'student','20231003',{COLUMN=>['stu_info:name','stu_info:sex']}(3)查询student表中行键为20231003、列族名为stu_info、列限定符名为name和sex的数据。语句执行结果如下图所示。get'student','20231003','stu_info:name','stu_info:sex'也可以使用以下语句。使用get命令查询一行中指定列名数据2.3.2查询数据1.get命令(4)查询student表中行键为20231001、列族名为stu_info、列限定符名为name的两个版本数据。语句执行结果如下图所示。get'student','20231001',{COLUMN=>'stu_info:name',VERSIONS=>2}使用get命令查询单元格中多个版本数据2.3.2查询数据2.scan命令使用scan命令既可查询表中的一行数据,又可查询表中的全部数据,其命令格式如下。//查询全部数据或指定列族名或列名的数据scan'表名'[,{COLUMN=>'列族名[:列限定符名]'}]//查询多个指定列族名或列名的数据,此处列族名外的方括号不能省略scan'表名',{COLUMNS=>['列族名1[:列限定符名1]','列族名2[:列限定符名2]']…}//查询指定列族名或列名的数据,并指定返回最大行数scan'表名',{COLUMNS=>'列族名[:列限定符名]',LIMIT=>行数}//查询指定行键范围的数据,起始行键和结束行键可同时存在,也可任选其一scan'表名',{COLUMNS=>'列族名[:列限定符名]',STARTROW=>'起始行键',ENDROW=>'结束行键'}2.3.2查询数据2.scan命令使用STARTROW和ENDROW限制查询范围时,查询出来的行数是否包括STARTROW和ENDROW?课堂讨论2.3.2查询数据2.scan命令【实例2-25】使用scan命令查询student表中的数据。scan'student'(1)查询student表中的全部数据。语句执行结果如下图所示。使用scan命令查询全部数据2.3.2查询数据2.scan命令scan'student',{COLUMN=>'stu_grade'}(2)查询student表中列族名为stu_grade的数据。语句执行结果如下图所示。使用scan命令查询指定列族名数据2.3.2查询数据2.scan命令scan'student',{COLUMNS=>['stu_info:name','stu_info:class'],LIMIT=>2}(3)查询student表中列族名为stu_info、列限定符名为name和class的前2行数据。语句执行结果如下图所示。使用scan命令查询指定列名数据2.3.2查询数据2.scan命令scan'student',{COLUMNS=>['stu_info:name','stu_info:class'],STARTROW=>'20231002',LIMIT=>1}(4)查询

student

表中行键大于或等于

20231002、列族名为

stu_info、列限定符名为name和class的数据,并只返回满足条件的1行数据。语句执行结果如下图所示。使用scan命令查询指定数据2.3.3删除数据1.delete命令使用delete命令可删除表中某个列的数据,其命令格式如下。delete'表名','行键','列族名:列限定符名'[,时间戳]【实例2-26】删除student表中行键为20231001、列族名为stu_grade、列限定符名为English的数据。delete'student','20231001','stu_grade:English'使用scan命令查看数据是否删除成功,如右图所示。使用delete命令删除数据后的student表2.3.3删除数据1.delete命令执行delete命令后,系统是否会物理删除数据?课堂讨论2.3.3删除数据2.deleteall命令使用deleteall命令既可删除表中某个列的数据,又可删除表中的整行数据,其命令格式如下。deleteall'表名','行键'[,'列族名:列限定符名'][,时间戳]【实例2-27】删除student表中行键为20231001的全部数据。deleteall'student','20231001'使用scan命令查看数据是否删除成功,如下图所示。使用deleteall命令删除数据后的student表2.3.3删除数据3.truncate命令使用truncate命令可清空整个表,但不会保留表所对应的Region,其命令格式如下。truncate'表名'2.3.3删除数据3.truncate命令truncate命令,是直接将表数据清空吗?课堂讨论2.3.3删除数据4.truncate_preserve命令使用truncate_preserve命令也可清空整个表,但会保留表所对应的Region,其命令格式如下。truncate_preserve'表名'2.3.3删除数据4.truncate_preserve命令如何退出Shell环境,退出方式有哪些?可以使用哪些命令?课堂讨论课堂检测如何插入/更新数据?查询数据的命令有哪些?具体如何使用?输出数据的命令有哪些?具体如何使用?课堂小结数据操作命令插入/更新数据查询数据get命令scan命令删除数据delete命令deleteall命令truncate命令truncate_preserve命令项目实施

——使用HBaseShell创建并操作用户行为数据表在互联网快速发展的背景下,人们在使用互联网的过程中,任何一个简单的行为(如搜索、浏览、购买等)都会产生大量数据。在这样的情况下,使用HBase数据库存储海量的用户行为数据是一个不错的选择。本项目实施就来使用HBaseShell创建并操作用户行为数据表。……详见教材。使用HBaseShell创建

并操作用户行为数据表使用HBaseShell创建并操作用户行为数据表创建表修改表结构插入数据更新数据查询数据删除数据谢谢HBase数据库应用案例教程3HBase客户端API项目项目导读HBase是基于Java语言开发的,因而它提供了原生Java客户端。这种客户端是HBase最主要、最高效的客户端,它可以直接与HBase服务器通信,使得开发者可以使用Java语言来操作HBase数据库。知识目标掌握使用HBaseJava客户端API操作表的方法。掌握使用HBaseJava客户端API操作数据的方法。能力目标能够使用HBaseJava客户端API操作表。能够使用HBaseJava客户端API操作数据。素质目标提高举一反三、从多个角度思考问题的能力。养成精益求精、严谨认真的工作态度。项目分析使用HBaseJava客户端API,用户可以轻松地与HBase进行交互,如创建、删除和修改表,插入、更新和查询数据等。本项目首先搭建Java集成开发环境,然后以员工信息表为例,介绍使用HBaseJava客户端API操作HBase的方法,最后通过创建并操作用户行为数据表,练习HBaseJava客户端API的综合应用。项目导航HBase客户端API概述1表操作2数据操作301HBase客户端API概述问题导入全班学生以3~5人为一组,各组选出组长。组长组织组员扫码观看“什么是API”和“常用的Java集成开发环境”视频,讨论并回答下列问题。问题1:说一说你对API的理解。问题2:你知道Java集成开发环境有哪些吗?它们各有什么特点?什么是API常用的Java集成开发环境3.1HBase客户端API概述通过使用HBase客户端API,开发者可以利用Java语言或其他编程语言编写程序来连接、管理和操作HBase数据库。由于HBase基于Java语言开发,因此使用HBaseJava客户端API与HBase进行交互更加高效。使用HBaseJava客户端API操作HBase前,须下载并安装Java集成开发环境。目前较为常用的Java集成开发环境为IntelliJIDEA(以下简称IDEA)。下面介绍如何使用IDEA新建Java项目。API(applicationprogramminginterface,应用程序接口)是一组定义了软件组件或系统之间交互方式的规则和协议。3.1HBase客户端API概述选择“新建项目”选项步骤1

启动IDEA,在打开的窗口右侧选择“新建项目”选项,如右图所示。3.1HBase客户端API概述步骤2

设置完成后,单击“新建项目”对话框中的“确定”按钮,即可创建一个项目文件。在“语言”列表中选择“Java”选项,在“构建系统”列表中选择“Maven”选项,在“JDK”编辑框中单击,然后在展开的列表中选择“添加SDK”/“JDK”选项,接着选择JDK在本地计算机中的安装路径,最后单击“创建”按钮,如右图所示。新建项目3.1HBase客户端API概述什么是Maven?课堂讨论3.1HBase客户端API概述步骤3

等待片刻,即可新建项目“HBaseTest”。此时,项目中会生成一个“pom.xml”文件,用于配置开发Java程序的相关依赖包。打开“pom.xml”文件,在<project></project>标签中添加配置信息(添加完成后的“pom.xml”文件中的内容见右图),配置Java访问HBase的相关依赖包。“pom.xml”文件中的内容3.1HBase客户端API概述IDEA安装时,语言插件如何安装?如何将界面调亮?课堂讨论3.1HBase客户端API概述步骤4

单击代码编辑区中的“加载Maven更改”按钮,或在代码编辑区中右击,在弹出的快捷菜单中选择“Maven”/“重新加载项目”选项,将更改加载到IDEA。步骤5

以记事本方式打开本地计算机“C:\Windows\System32\drivers\etc”目录中的“hosts”文件,在最后一行添加HBase所在主机的IP地址与主机名映射关系“30localhost”。添加完成后的“hosts”文件中的内容如下图所示。“hosts”文件中的内容(部分)3.1HBase客户端API概述步骤6

返回IDEA,在“HBaseTest”项目的“src/main/java”目录中创建“Demo”类。右击“java”目录,在弹出的快捷菜单中选择“新建”/“Java类”选项,在打开的“创建新的类”对话框中输入类名“Demo”并按“Enter”键,如下图所示。创建新的类3.1HBase客户端API概述步骤7

在“Demo”类中编写Java访问HBase的代码。此处为判断HBase中是否存在对应表的代码,代码如下。importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.hbase.HBaseConfiguration;

importorg.apache.hadoop.hbase.TableName;

importorg.apache.hadoop.hbase.client.Admin;

importorg.apache.hadoop.hbase.client.Connection;

importorg.apache.hadoop.hbase.client.ConnectionFactory;

importjava.io.IOException;

publicclassDemo{

publicstaticvoidmain(String[]args)throwsIOException{

(接下页)3.1HBase客户端API概述

(接上页)

//创建HBaseConfiguration对象,用于加载与设置HBase的各项配置

Configurationconf=HBaseConfiguration.create();

//指定Zookeeper所在位置

conf.set("hbase.zookeeper.quorum","30");

conf.set("perty.clientPort","2181");

//使用ConnectionFactory类创建conn对象,用于连接HBase

Connectionconn=ConnectionFactory.createConnection(conf);

//创建Admin对象,用于调用HBase客户端API

Adminadmin=conn.getAdmin();

//使用tableExists方法判断HBase中是否存在test表

System.out.println("test表:"+admin.tableExists(TableName.valueOf("test")));}

}3.1HBase客户端API概述步骤8

为便于调试,保证输出对应的日志,可在“src/main/resources”目录中创建“perties”配置文件。右击“resources”目录,在弹出的快捷菜单中选择“新建”/“资源包”选项,在打开的“创建资源包”对话框中输入资源捆绑包基名称“log4j”并按“Enter”键,此时会自动生成“perties”文件,然后在该文件中输入以下配置信息。//所有日志

log4j.rootLogger=DEBUG,stdout

.apache.itatis=warn

log4j.logger.java.sql=warn.springframework=warn

//控制台输出

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.Threshold=DEBUG

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-ddHH:mm:ss}[%p]%m%n3.1HBase客户端API概述步骤9

在虚拟机中启动HBase,然后运行“Demo.java”,结果如图所示。由上图可以看出,HBase中不存在test表。程序运行结束后,可以使用HBaseShell提供的命令查看test表是否存在,如下图所示。查看test表是否存在程序运行结果课堂检测什么是API?API的作用是什么?如何安装IDEA?02表操作问题导入提问回顾上节课知识点:(1)什么是API?API作用是什么?(2)使用HBaseJava客户端API操作HBase前,需要准备怎样的开发环境?3.2.1创建表在HBaseJava客户端API中,创建表通过Admin类的createTable方法实现。createTable方法的语法格式如下。createTable(TableDescriptordesc)其中,desc参数是一个TableDescriptor对象。TableDescriptor类的构造方法是私有的,可以使用TableDescriptorBuilder类构建TableDescriptor对象。3.2.1创建表TableDescriptorBuilder类提供了一系列方法来设置表的属性,具体如下。(1)newBuilder

方法用于创建一个

TableDescriptorBuilder

对象,该对象可以构建TableDescriptor

对象。通过TableDescriptorBuilder对象,可以设置表的属性,如表的名称、列族的名称等。newBuilder方法的语法格式如下。newBuilder(TableNametableName)其中,tableName参数是表的名称。(2)build方法用于构建最终的TableDescriptor对象,其语法格式如下。build()3.2.1创建表(3)setColumnFamily

方法用于将列族描述器(设置列族的属性,如列族的名称、版本数等)添加到表描述器(设置表的属性,如表的名称、列族信息等)中,其语法格式如下。//一个列族描述器setColumnFamily(ColumnFamilyDescriptorcfDescriptor)//多个列族描述器setColumnFamilies(ColumnFamilyDescriptorcfDescriptor)其中,cfDescriptor参数是一个ColumnFamilyDescriptor对象。ColumnFamilyDescriptor类的构造方法也是私有的,可以使用ColumnFamilyDescriptorBuilder类构建ColumnFamilyDescriptor对象。3.2.1创建表ColumnFamilyDescriptorBuilder类提供了一系列方法来设置列族的属性,具体如下。(1)newBuilder

方法用于创建一个

ColumnFamilyDescriptorBuilder

对象,该对象可以构建

ColumnFamilyDescriptor

对象。通过

ColumnFamilyDescriptorBuilder

对象,可以设置列族的属性,如列族的名称、版本数等。newBuilder方法的语法格式如下。newBuilder(byte[]name)其中,name参数是列族的名称。(2)build方法用于构建最终的ColumnFamilyDescriptor对象,其语法格式如下。build()3.2.1创建表在HBase2.x版本中,HTableDescriptor类和HColumnDescriptor类被替换的类叫什么?课堂讨论3.2.1创建表【实例3-1】创建名为employee的表,要求表中包含basic和salary两个列族。【参考代码】publicstaticvoidcreate(StringtableName,String...columnfamilyNames)throwsIOException{//获取配置信息Configurationconf=HBaseConfiguration.create();……详见教材。程序运行结果如下图所示。实例3-1程序运行结果3.2.1创建表由于HBase中默认不存在employee表,因此该表可以创建成功。程序运行结束后,可以使用HBaseShell提供的命令查看employee表是否创建成功,如下图所示。查看employee表是否创建成功3.2.1创建表再次运行程序,即再次创建employee表,此时程序会抛出异常,提示employee表已经存在,如下图所示。程序抛出异常3.2.2修改表结构添加列族通过Admin类的addColumnFamily方法实现。addColumnFamily方法的语法格式如下。addColumnFamily(TableNametableName,ColumnFamilyDescriptorcolumnFamily)其中,tableName

参数是要修改的表的名称;columnFamily

参数是要添加的列族描述器。删除列族通过Admin类的deleteColumnFamily方法实现。deleteColumnFamily方法的语法格式如下。deleteColumnFamily(TableNametableName,byte[]columnFamily)其中,tableName

参数是要删除的表的名称;columnFamily

参数是要删除的列族的名称。3.2.2修改表结构【实例3-2】向employee表中添加列族experience和other。【参考代码】publicstaticvoidaddColumnFamily(StringtableName,String...columnfamilyNames)throwsIOException{Configurationconf=HBaseConfiguration.create();……详见教材。程序运行结果如下图所示。实例3-2程序运行结果3.2.2修改表结构程序运行结束后,可以使用HBaseShell提供的命令查看列族是否添加成功,如下图所示。查看列族是否添加成功3.2.2修改表结构【实例3-3】删除employee表中的列族experience。【参考代码】publicstaticvoiddeleteColumnFamily(StringtableName,String...columnfamilyNames)throwsIOException{Configurationconf=HBaseConfiguration.create();……详见教材。程序运行结果如下图所示。实例3-3程序运行结果3.2.2修改表结构程序运行结束后,可以使用HBaseShell提供的命令查看列族是否删除成功,如下图所示。查看列族是否添加成功3.2.3禁用/启用表1.禁用表(1)在HBaseJava客户端API中,禁用表通过Admin类的disableTable方法实现。disableTable方法的语法格式如下。disableTable(TableNametableName)其中,tableName参数是要禁用的表的名称。3.2.3禁用/启用表1.禁用表【实例3-4】禁用employee表。【参考代码】publicstaticvoiddisableTable(StringtableName)throwsIOException{

Configurationconf=HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum","30");……详见教材。程序运行结果如下图所示。实例3-4程序运行结果3.2.3禁用/启用表1.禁用表(2)在HBaseJava客户端API中,判断表是否被禁用通过Admin类的isTableDisabled方法实现。isTableDisabled方法的语法格式如下。isTableDisabled(TableNametableName)其中,tableName参数是要判断是否被禁用的表的名称。3.2.3禁用/启用表1.禁用表【实例3-5】判断employee表是否被禁用。【参考代码】publicstaticvoidisTableDisabled(StringtableName)throwsIOException{Configurationconf=HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","30");……详见教材。程序运行结果如下图所示。实例3-5程序运行结果3.2.3禁用/启用表1.禁用表程序运行结束后,可以使用HBaseShell提供的命令查看employee表是否被禁用,如下图所示。查看employee表是否被禁用3.2.3禁用/启用表2.启用表(1)在

HBaseJava

客户端

API

中,启用表通过

Admin

类的

enableTable

方法实现。enableTable方法的语法格式如下。enableTable(TableNametableName)其中,tableName参数是要启用的表的名称。3.2.3禁用/启用表2.启用表【实例3-6】启用employee表。【参考

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论