第8章 HBase分布式数据库_第1页
第8章 HBase分布式数据库_第2页
第8章 HBase分布式数据库_第3页
第8章 HBase分布式数据库_第4页
第8章 HBase分布式数据库_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

第八章

HBase分布式数据库大数据理论与应用基础8.1HBase简介8.2

HBase的基本组成结构8.3

HBase数据模型8.4

HBase的系统架构8.5

HBase的安装部署8.6

HBase的Shell操作8.7

HBase的JavaAPI介绍8.8

本章小结本章目录大数据理论与应用基础8.1HBase简介大数据理论与应用基础8.1HBase简介HBase可看作谷歌Bigtable的开源实现,部署于HadoopHDFS之上,提供类似Bigtable的功能。谷歌Bigtable利用GFS作为其文件存储系统。类似地,HBase利用HDFS作为其存储系统。因此,HBase可视为Hadoop生态系统的结构化存储层,数据存储于分布式文件系统的HDFS中,并使用ZooKeeper提供协调服务。HDFS为HBase提供了高可靠性的底层存储支持,MapReduce为HBase提供了高性能的计算能力,ZooKeeper为HBase提供了稳定的服务和实现恢复机制。大数据理论与应用基础8.1HBase简介HBase并不适合存储少量数据,其设计目的是处理非常庞大的表,其数据通常达到十亿甚至百亿级别。由于HBase依赖HadoopHDFS,因此它与Hadoop一样,主要依靠横向扩展,通过不断增加廉价的商用服务器来提高计算和存储能力。因此,HBase并不适用于所有场合,以下列出两点注意事项。如果数据量足够大,那么HBase是一个很好的选择。但如果只有几百万行甚至更少的数据量,那么传统的关系型数据库是一个更好的选择。要有足够的硬件资源,当每个HDFS集群在少于5个节点时,HBase的表现则不尽人意。大数据理论与应用基础8.2HBase的基本组成结构大数据理论与应用基础8.2HBase的基本组成结构HBase的基本组成结构包括表、行、列簇、列限定符、单元格等,下表给出了HBase表的简单样式,以下逐一介绍。大数据理论与应用基础行键(Rowkey)列簇1(Columnfamily1)列簇2(Columnfamily2)列簇3(Columnfamily3)Col1Col2Col3Col1Col2Col3Col1Col2Col31

2

8.2HBase的基本组成结构8.2.1表在HBase中,数据存储在表中,表名是一个字符串,表由行和列组成。与关系型数据库不同,HBase表是多维映射的,对表的处理也有其自身的特点。HBase中的表通常有上亿行、上百万列(后面将介绍HBase中的行和列);HBase表采用面向列的存储和权限控制;空列并不占用HBase的存储空间。大数据理论与应用基础8.2HBase的基本组成结构8.2.2行HBase中的行(Row)由行键(Rowkey)、一个或多个列(Column)组成。行键类似关系型数据库中的主键索引,但它没有数据类型,总被视为字节数组byte[]。在整个HBase表中,行键是唯一的,并且总是按照字母顺序排序的。例如,HBase表中已有3条行键分别为0000001、0000002和0000004的数据,当插入一条行键为0000003的数据时,该条数据不会排在最后,而是排在行键为0000002和0000004的数据的中间。因此,行键内容的设计非常重要,可以利用行键的这个特性有效地将相关的数据排列在一起。例如,可以将网站的域名反转后作为行键进行存储(如com.baidu.map、com.baidu.photo、com.baidu.tieba)。这样,所有的百度域名在表中将自动地排列在一起,而不是分散排列的。大数据理论与应用基础8.2HBase的基本组成结构8.2.3列簇列簇(Columnfamily),也称列族。HBase列簇由多个列组成,相当于列的分组。列的数量没有限制,一个列簇里可以有数百万个列。HBase表中的每一行都有相同的列簇。列簇必须在HBase表创建时指定,不能轻易修改,且列簇名的类型为字符串。大数据理论与应用基础8.2HBase的基本组成结构8.2.4列限定符列限定符(Qualifier)用于代表HBase表中列的名称,列簇中的数据通过列限定符来定位,常见的定位格式为“family:qualifier”。例如,要定位列簇cf1中的列stu_id,使用cf1:stu_id。HBase中的列簇和列限定符都可以理解为级别不同的列。一个列簇中可以有多个列限定符,因此列簇可以简单地理解为第一级列,列限定符是第二级列,两者是父子关系。与行键相同,列限定符也没有数据类型,总被视为字节数组byte[]。大数据理论与应用基础8.2HBase的基本组成结构8.2.5单元格单元格(Cell)通过行键、列簇和列限定符一起来定位。单元格包含值和时间戳。其中,值没有数据类型,总被视为字节数组byte[];时间戳代表该值的版本,类型为long。在默认情况下,时间戳表示数据写入服务器的时间,但是当数据被放入单元格时,也可以指定不同的时间戳。每个单元格都按照时间戳降序排列的形式保存着同一份数据的多个版本,即最新的数据排在最前面,这样有利于快速查找最新数据。对单元格中的数据进行访问时会默认读取最新的值。大数据理论与应用基础8.3HBase数据模型大数据理论与应用基础8.3HBase数据模型不同于常见的RDBMS,HBase有其自有的数据模型,本节介绍HBase数据模型并比较其与RDBMS数据模型的差异。下图展示了RDBMS和HBase的数据模型的不同。传统RDBMS数据库对于不存在的值,必须存储NULL值;而在HBase中,不存在的值可以省略,且不占存储空间。此外,HBase在新建表时必须指定表名和列簇,不需要指定列,所有列在后续添加数据时动态添加;而RDBMS指定好列以后不可以修改和动态添加。大数据理论与应用基础8.3HBase数据模型HBase数据模型也可被看作一个键值数据库,通过4个键定位具体的值。这4个键为行键、列簇、列限定符和时间戳(其中,时间戳也可省略,默认取最新数据)。HBase数据模型首先通过行键定位一整行数据,然后通过列簇定位列所在的范围,最后通过列限定符定位具体的单元格数据,若给定了时间戳,再上述定位时,则会定位到指定时间所在的单元格。既然是键值数据库,那么可以用来描述它的方法有很多。有图展示了由JSON数据格式表示的HBase数据模型。大数据理论与应用基础8.3HBase数据模型HBase数据模型也可被看作一个键值数据库,通过4个键定位具体的值。这4个键为行键、列簇、列限定符和时间戳(其中,时间戳也可省略,默认取最新数据)。HBase数据模型首先通过行键定位一整行数据,然后通过列簇定位列所在的范围,最后通过列限定符定位具体的单元格数据,若给定了时间戳,再上述定位时,则会定位到指定时间所在的单元格。既然是键值数据库,那么可以用来描述它的方法有很多。有图展示了由JSON数据格式表示的HBase数据模型。大数据理论与应用基础8.4HBase的系统架构大数据理论与应用基础8.4HBase的系统架构HBase采用主从架构,由HMaster节点、HRegionServer节点和ZooKeeper集群组成。HMaster节点作为主节点,HRegionServer节点作为从节点,这种主从模式类似HDFS的NameNode与DataNode。HBase集群中所有的节点均通过ZooKeeper进行协调工作。HBase底层通过HRegionServer节点将数据存储于HDFS中。为描述方便,下面的HMaster节点简称HMaster,HRegionServer节点简称HRegionServer,其他节点类似。需要说明的是,在分布式架构中,节点也是一台服务器,具体用语结合上下文理解。大数据理论与应用基础8.4HBase的系统架构HBase的系统架构如下图所示,主要包括4部分:HMaster、HRegionServer、Client和ZooKeeper。其中,HRegisonServer又包括HRegion、Store、MemStore、StoreFile、HFile和HLog等组件。各部分之间的关系为:一个HRegion由一个或多个Store组成;一个Store由1个MemStore和0~n个StoreFile组成,一个Store保存一个列簇;StoreFile存储在HDFS上,MemStore存储于内存中。大数据理论与应用基础8.4HBase的系统架构1.HMasterHMaster本身并不存储任何数据,主要负责维护表和HRegion的元数据信息,由于表的元数据信息保存在ZooKeeper上,所以HMaster本身负载不大。HBase一般有多个HMaster,用户可通过ZooKeeper的选举机制保持同一时刻只有一个HMaster处于活动状态,其他HMaster处于备用状态,如此可实现自动故障转移。HMaster的主要功能如下。(1)管理用户对标的进行增、删、改、查等操作。(2)为HRegionServer分配HRegion,负责HRegionServer的负载均衡。(3)发现离线的HRegionServer,并负责为其重新分配HRegion。(4)负责HDFS上的垃圾回收。(5)权限控制。大数据理论与应用基础8.4HBase的系统架构2.HRegionServerHRegionServer负责管理一系列的HRegion对象,是HBase的核心组件。一个HRegisonServer可以包含多个HRegion和HLog,用户可以根据需求添加或删除HRegisonServer。HRegisonServer的主要功能如下。(1)维护HMaster分配的HRegion,处理这些HRegion的输入、输出请求。(2)负责切分在运行过程中变得过大的HRegion。大数据理论与应用基础8.4HBase的系统架构3.HRegionHRegion是HBase中分布式存储和负载均衡的最小单元。一个HRegion由一个或多个Store组成。起初每个表只有一个HRegion,随着表中数据不断增多,HRegion会不断增大,当达到一定的阈值(默认为256MB)时,HRegion就会被切分为两个大小基本相同的新HRegion。不同的HRegion可以分布在不同的HRegionServer上,但同一个HRegion拆分后会分布在相同的HRegionServer上。4.ClientClient通过RPC机制与HBase的HMaster和HRegisonServer进行通信,其中,管理类的通信由HMaster负责,数据读写类的通信由HRegisonServer负责。大数据理论与应用基础8.4HBase的系统架构5.ZooKeeperZooKeeper在HBase中发挥着重要作用。例如,每个HRegionServer都会在ZooKeeper中注册一个自己的临时节点,HMaster可通过这些在ZooKeeper中注册的临时节点发现可用的HRegionServer,并跟踪HRegionServer的故障。总体来讲,ZooKeeper的作用体现以下在两方面。(1)HRegionServer主动向ZooKeeper集群注册,使得HMaster可以随时感知各个HRegisonServer是否在线,从而避免HMaster出现单点故障。(2)HMaster启动时会将HBase系统表加载到ZooKeeper集群中,通过ZooKeeper集群可以获得当前系统表hbase:meta存储的数据对应的HRegisonServer信息。其中,系统表指的是命名空间hbase下的表namespace和meta。大数据理论与应用基础8.4HBase的系统架构6.StoreStore是HBase的存储核心。每一个Region有一个或多个Store组成,至少是一个store,HBase会把一起访问的数据放在一个Store里面,即为每个ColumnFamily建一个Store(即有几个ColumnFamily,也就有几个Store)。一个Store由一个MemStore和零或多个StoreFile组成。7.MemStoreMemStore存储在内存中,当其大小达到一定的阈值(默认为128MB)时,MemStore中的数据会被刷新写入磁盘文件,类似生成一个快照。当关闭HRegionServer时,MemStore中的数据会被强制刷新并写入磁盘文件。大数据理论与应用基础8.4HBase的系统架构8.StoreFileStoreFile是MemStore中的数据被写入磁盘后得到的文件,一般存储在多个HDFS中。MemStore内存中的数据写到文件后就是StoreFile(即MemStore的每次Flush操作都会生成一个新的StoreFile),StoreFile底层以HFile格式保存。9.HFileHFile是一种二进制文件,用于存储HBase中的键值对数据,StoreFile底层存储使用的便是HFile。通常一个HFile会被分解成多个块,因此,对HFile文件的操作都是以块为单位的。HFile文件的块大小可以在列簇级别中进行设置,推荐设置为8~1024KB。较大的块有利于顺序读/写数据,但由于需要解压更多数据,因此不利于随机读/写数据;较小的块有利于随机读/写数据,但需要占用更多的内存,写入效率相对较低。大数据理论与应用基础8.4HBase的系统架构10.HLogHLog是HBase的日志文件,记录数据的更新操作。与RDBMS类似,为了保证数据的一致性和实现回滚等,HBase在写入数据时会先进行WAL(预写日志)操作,即只有在将更新操作写入HLog文件后才会将数据写入Store的MemStore中,只有这两个地方都写入并确认后,才认为数据写入成功。由于MemStore将数据存在内存中,且数据大小没有达到一定阈值时不会被写入HDFS,因此,若在数据被写入HDFS之前服务器崩溃,则MemStore中的数据将丢失,此时可以利用HLog来恢复丢失的数据。HLog日志文件存储于HDFS中,因此,若服务器崩溃,则HLog仍然可用。大数据理论与应用基础8.5HBase的安装部署大数据理论与应用基础8.5HBase的安装部署1.上传HBase安装包与之前的方法类似,直接将下载好的HBase文件hbase-2.5.2-bin.tar.gz利用MobaXTerm的拖曳功能上传至IP地址为00那台虚拟机的/export/software目录内(虚拟机IP地址信息参见第3章),如下图所示。大数据理论与应用基础8.5HBase的安装部署2.解压刚上传的hbase-2.5.2-bin.tar.gz安装包通常没有执行权限,先使用chmod命令添加执行权限:然后利用tar命令将HBase解压至/export/servers目录下:完成后便可在/export/servers目录下看到刚刚解压的hbase-2.5.2目录,如下图所示。大数据理论与应用基础[root@mastersoftware]#chmod777hbase-2.5.2-bin.tar.gz[root@mastersoftware]#tar-zxvf./hbase-2.5.2-bin.tar.gz-C/export/servers/8.5HBase的安装部署3.配置环境变量打开.bashrc文件,在其末尾添加如下内容:保存后使用source命令使环境变量生效:大数据理论与应用基础#>>>HBase>>>exportHBASE_HOME=/export/servers/hbase-2.5.2exportPATH=$PATH:$HBASE_HOME/bin#<<<HBase<<<[root@mastersoftware]#source~/.bashrc8.5HBase的安装部署4.修改hbase-env.sh文件修改/export/servers/hbase-2.5.2/conf目录下的hbase-env.sh文件,找到JAVA_HOME并将其修改为第3章安装的JDK的位置:继续在该文件中查找HBASE_MANAGES_ZK,并将其值修改为false:大数据理论与应用基础exportJAVA_HOME=/export/servers/jdk1.8.0_202#TellHBasewhetheritshouldmanageit'sowninstanceofZooKeeperornot.exportHBASE_MANAGES_ZK=false8.5HBase的安装部署5.修改hbase-site.xml文件修改/export/servers/hbase-2.5.2/conf目录下的hbase-site.xml文件,将<configuration>和</configuration>之间的内容修改如右侧所示:大数据理论与应用基础<configuration>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>perty.dataDir</name>

#安装ZooKeeper时设置的数据目录,根据实际情况修改

<value>/export/servers/apache-zookeeper-3.8.0-bin/zkdata</value>

</property>

<property>

#指定HBase连接的ZooKeeper集群

<name>hbase.zookeeper.quorum</name>

<value>master,slave01,slave02</value>

</property>

<property>

<name>vider</name>

<value>filesystem</value>

</property>

<property>

<name>hbase.tmp.dir</name>

<value>./tmp</value>

</property>

<property>

<name>hbase.unsafe.stream.capability.enforce</name>

<value>false</value>

</property></configuration>8.5HBase的安装部署6.修改regionservers文件修改/export/servers/hbase-2.5.2/conf目录下的regionservers文件,将文件内容替换如下:7.设置备份节点在/export/servers/hbase-2.5.2/conf目录下新建文件backup_masters:该文件用于备份master节点,当master节点宕机时,启用备用节点,将slave01作为备用节点。backup_masters文件的内容如下:大数据理论与应用基础masterslave01slave02[root@masterconf]#vibackup_mastersslave018.5HBase的安装部署8.复制Hadoop配置文件将Hadoop的配置文件core-site.xml和hdfs-site.xml复制到/export/servers/hbase-2.5.2/conf目录下:9.将配置分发至其他节点将master节点的/export/servers/hbase-2.5.2目录复制到slave01和slave02节点上:将master节点的.bashrc文件复制到slave01和slave02节点上,并利用source命令使其生效。在slave01、slave02节点上使~/.bashrc生效:大数据理论与应用基础[root@masterconf]#/export/servers/hadoop-3.3.4/etc/hadoop/core-site.xml/export/servers/hbase-2.5.2/conf/[root@masterconf]#/export/servers/hadoop-3.3.4/etc/hadoop/hdfs-site.xml/export/servers/hbase-2.5.2/conf/[root@masterhbase-2.5.2]#scp-r/export/servers/hbase-2.5.2/slave01:/export/servers/hbase-2.5.2[root@masterhbase-2.5.2]#scp-r/export/servers/hbase-2.5.2/slave02:/export/servers/hbase-2.5.2[root@masterhbase-2.5.2]#scp~/.bashrcslave01:~/.bashrc[root@masterhbase-2.5.2]#scp~/.bashrcslave02:~/.bashrcsource~/.bashrc8.5HBase的安装部署10.启动要启动HBase,需要先启动ZooKeeper和Hadoop集群。注意:ZooKeeper集群需要在3个节点上分别启动。启动成功后,可利用jps命令查看相关进程,若出现下列进程,则表明启动成功:大数据理论与应用基础[root@master~]#zkServer.shstart[root@master~]#start-dfs.sh[root@master~]#start-yarn.sh[root@master~]#start-hbase.sh[root@master~]#jps3424HRegionServer1554QuorumPeerMain2194SecondaryNameNode2466ResourceManager3846Jps2745NodeManager1979DataNode3195HMaster1790NameNode[root@slave01~]#jps1664DataNode1560QuorumPeerMain2296Jps1802NodeManager1978HRegionServer[root@slave02~]#jps1664DataNode1846NodeManager2007HRegionServer2379Jps1567QuorumPeerMain8.5HBase的安装部署11.关闭使用stop-hbase.sh命令关闭HBase:大数据理论与应用基础[root@master~]#stop-hbase.sh8.6HBase的Shell操作大数据理论与应用基础8.6HBase的Shell操作HBase为用户提供了一种非常方便的命令行操作方式,称为HBaseShell。HBaseShell提供了大多数的HBase命令,用户可以方便地创建、删除、修改表,还可以向表中添加数据、列出表中的相关信息等。大数据理论与应用基础8.6HBase的Shell操作8.6.1基本命令1.启动在启动HBase之后,可以通过执行以下命令启动HBaseShell:启动成功后显示如下内容:大数据理论与应用基础[root@master~]#hbaseshellUse"help"togetlistofsupportedcommands.Use"exit"toquitthisinteractiveshell.ForReference,pleasevisit:/2.0/book.html#shellVersion2.5.2,r3e28acf0b819f4b4a1ada2b98d59e05b0ef94f96,ThuNov2402:06:40UTC2022Took0.0010secondshbase:001:0>从结果中可以看出,用户可输入help命令查看帮助信息,输入exit退出Shell命令行。最下方的hbase:001:0>是命令提示符,其中的001用来提示用户输入的行数,该数字会随着用户的输入递增,为了便于描述,下面统一使用hbase:000>。8.6HBase的Shell操作2.查看状态3.查看HBase版本大数据理论与应用基础hbase:000:0>status1activemaster,1backupmasters,3servers,0dead,1.0000averageload可以看出,当前有1个活跃的主节点、1个备份节点和3个服务节点。hbase:000:0>version2.5.2,r3e28acf0b819f4b4a1ada2b98d59e05b0ef94f96,ThuNov2402:06:40UTC2022Took0.0002seconds可以看出,当前HBase版本为2.5.2。8.6HBase的Shell操作8.6.2命名空间操作1.命名空间2.查看命名空间大数据理论与应用基础hbase:000:0>create_namespace'my_namespace'上述命令创建了一个名为my_namespace的命名空间。hbase:000:0>list_namespaceNAMESPACEdefaulthbasemy_namespace3row(s)Took0.0087seconds命令list_namespace会列出当前所有的命名空间,由返回结果可知,HBase默认定义了NAMESPACE和default两个命名空间。8.6HBase的Shell操作8.6.2命名空间操作3.查看命名空间下的表大数据理论与应用基础hbase:000:0>list_namespace_tables'hbase'TABLEmetanamespace2row(s)Took0.0083seconds=>["meta","namespace"]可以看出,命名空间NAMESPACE包括meta和namespace两个系统表,命名空间default保存用户创建表时未指定命名空间的表。8.6HBase的Shell操作8.6.2命名空间操作4.删除命名空间大数据理论与应用基础hbase:000:0>drop_namespace'my_namespace'Took0.1280secondshbase:000:0>list_namespaceNAMESPACEdefaulthbase2row(s)Took0.0086seconds可以看出,利用drop_namespace命令删除my_namespace命名空间后,当再次查看命名空间时,发现所创建的my_namespace命名空间已被删除,只剩下HBase默认的两个命名空间。8.6HBase的Shell操作8.6.3常用DDL操作与RDMBS中的DDL(DataDefinitionLanguage,数据定义语言)操作类似,HBase的DDL操作也常用于表相关的操作,如创建表、删除表、启用和禁用表等。大数据理论与应用基础8.6HBase的Shell操作8.6.3常用DDL操作1.创建表创建表时需要指定表名和列簇,通用语法如下:若未指定命名空间名,则会在系统默认的命名空间default下创建表。以下命令先创建了命名空间myNS1,然后在其中创建了表tab1,同时添加了3个列簇(fam1、fam2、fam3):大数据理论与应用基础create'namespace名:表名','列簇名1','列簇名2'…hbase:000:0>create_namespace'myNS1'Took0.1334secondshbase:000:0>create'myNS1:tab1','fam1','fam2','fam3'2023-03-1217:29:47,382INFO[main]client.HBaseAdmin(HBaseAdmin.java:postOperationResult(3591))-Operation:CREATE,TableName:myNS1:tab1,procId:75completedCreatedtablemyNS1:tab1Took0.6502seconds=>Hbase::Table-myNS1:tab18.6HBase的Shell操作8.6.3常用DDL操作2.查看表利用list命令列出用户创建的所有表:大数据理论与应用基础hbase:000:0>listTABLEmyNS1:tab11row(s)Took0.0102seconds=>["myNS1:tab1"]8.6HBase的Shell操作8.6.3常用DDL操作3.判断某表是否存在利用exists命令查看某表是否存在:可以看到,当直接使用exists'tab1'

命令时,返回false,这是因为此时并没有在default命名空间中创建表,而是在myNS1命名空间中创建了表tab1,因此,当指定命名空间后,返回true。大数据理论与应用基础hbase:000:0>exists'tab1'Tabletab1doesnotexistTook0.0040seconds=>falsehbase:000:0>exists'myNS1:tab1'TablemyNS1:tab1doesexistTook0.0046seconds=>true8.6HBase的Shell操作8.6.3常用DDL操作4.查看表的相关信息利用desc命令可查看表的相关信息,如右侧所示,字段含义见下表。大数据理论与应用基础hbase:000:0>desc'myNS1:tab1'TablemyNS1:tab1isENABLEDmyNS1:tab1,{TABLE_ATTRIBUTES=>{METADATA=>{'hbase.store.file-tracker.impl'=>'DEFAULT'}}}COLUMNFAMILIESDESCRIPTION{NAME=>'fam1',INDEX_BLOCK_ENCODING=>'NONE',VERSIONS=>'1',KEEP_DELETED_CELLS=>'FALSE',DATA_BLOCK_ENCODING=>'NONE',TTL=>'FOREVER',MIN_VERSIONS=>'0',REPLICATION_SCOPE=>'0',BLOOMFILTER=>'ROW',IN_MEMORY=>'false',COMPRESSION=>'NONE',BLOCKCACHE=>'true',BLOCKSIZE=>'65536B(64KB)'}{NAME=>'fam2',INDEX_BLOCK_ENCODING=>'NONE',VERSIONS=>'1',KEEP_DELETED_CELLS=>'FALSE',DATA_BLOCK_ENCODING=>'NONE',TTL=>'FOREVER',MIN_VERSIONS=>'0',REPLICATION_SCOPE=>'0',BLOOMFILTER=>'ROW',IN_MEMORY=>'false',COMPRESSION=>'NONE',BLOCKCACHE=>'true',BLOCKSIZE=>'65536B(64KB)'}{NAME=>'fam3',INDEX_BLOCK_ENCODING=>'NONE',VERSIONS=>'1',KEEP_DELETED_CELLS=>'FALSE',DATA_BLOCK_ENCODING=>'NONE',TTL=>'FOREVER',MIN_VERSIONS=>'0',REPLICATION_SCOPE=>'0',BLOOMFILTER=>'ROW',IN_MEMORY=>'false',COMPRESSION=>'NONE',BLOCKCACHE=>'true',BLOCKSIZE=>'65536B(64KB)'}3row(s)QuotaisdisabledTook0.0379seconds名称说明NAME列簇名INDEX_BLOCK_ENCODING索引块编码算法,NONE表示未使用VERSIONS保存的版本数,这里为1KEEP_DELETED_CELLS保留被删除的单元格DATA_BLOCK_ENCODING数据块编码,NONE表示不使用数据块编码TTL生存时间,到期时删除行MIN_VERSIONS最小版本,为0表示功能禁用REPLICATION_SCOPE是否复制簇,0表示禁用,1表示开启BLOOMFILTER布隆过滤器类型IN_MEMORY是否常驻缓存COMPRESSION这里压缩算法为NONE,表示不使用压缩BLOCKCACHE数据块缓存BLOCKSIZE数据块大小8.6HBase的Shell操作8.6.3常用DDL操作5.启用/禁用表刚建立的新表处于启用状态,可利用is_enabled命令进行查看:若要删除表,则需要使用disable命令将表禁用:大数据理论与应用基础hbase:000:0>is_enabled'myNS1:tab1'trueTook0.0068seconds=>truehbase:000:0>disable'myNS1:tab1'2023-03-1217:40:26,017INFO[main]client.HBaseAdmin(HBaseAdmin.java:rpcCall(926))-StarteddisableofmyNS1:tab12023-03-1217:40:26,344INFO[main]client.HBaseAdmin(HBaseAdmin.java:postOperationResult(3591))-Operation:DISABLE,TableName:myNS1:tab1,procId:81completedTook0.3395seconds8.6HBase的Shell操作8.6.3常用DDL操作6.向表中添加列簇向表中添加列簇的命令如下:7.删除表利用drop命令删除禁用状态下的表(启用状态下的表无法删除):大数据理论与应用基础hbase:000:0>alter'myNS1:tab1','fam4'Updatingallregionswiththenewschema...Allregionsupdated.Done.Took1.0918seconds再次使用desc命令查看表中的列簇,会发现表中已新增列簇fam4hbase:000:0>drop'myNS1:tab1'8.6HBase的Shell操作8.6.4常用DML操作DML(DataManipulationLanguage,数据操作语言)常用于处理数据相关的操作,如数据的添加、删除、修改、查询等。大数据理论与应用基础8.6HBase的Shell操作8.6.4常用DML操作1.向表中增加或更新数据向表中增加或更新数据的语法如下:以下命令表示先在default命名空间中创建info表,然后依次向其中添加数据:大数据理论与应用基础put'表明','Rowkey名','列簇名:列名','值'hbase:000:0>create'info','f1','f2','f3'hbase:000:0>put'info','row1','f1:id','001'hbase:000:0>put'info','row1','f1:name','ZhangSan'hbase:000:0>put'info','row1','f1:age','19'hbase:000:0>put'info','row1','f2:id','002'hbase:000:0>put'info','row1','f2:name','LiSi'hbase:000:0>put'info','row1','f2:age','20'hbase:000:0>put'info','row2','f1:city','Beijing'hbase:000:0>put'info','row2','f1:country','China'8.6HBase的Shell操作8.6.4常用DML操作2.查看表查看表的基本语法如下:可以只使用表名来查看指定表的所有信息:大数据理论与应用基础scan'表名',{COLUMNS=>['列簇名:列名',…],LIMIT=>行数}hbase:000:0>scan'info'ROWCOLUMN+CELLrow1column=f1:age,timestamp=2023-03-12T17:52:26.483,value=19row1column=f1:id,timestamp=2023-03-12T17:52:03.920,value=001row1column=f1:name,timestamp=2023-03-12T17:52:17.133,value=ZhangSanrow1column=f2:age,timestamp=2023-03-12T17:53:17.459,value=20row1column=f2:id,timestamp=2023-03-12T17:53:00.155,value=002row1column=f2:name,timestamp=2023-03-12T17:53:09.710,value=LiSirow2column=f1:city,timestamp=2023-03-12T17:53:58.478,value=Beijingrow2column=f1:country,timestamp=2023-03-12T17:54:31.626,value=China2row(s)Took0.0088seconds8.6HBase的Shell操作8.6.4常用DML操作3.获取表中指定行键下的数据(1)获取指定表的指定行键下的所有数据的语法如下:(2)获取指定表的指定行键下的指定列簇的所有数据的语法如下:(3)获取指定表的指定行键的指定列的数据的语法如下:大数据理论与应用基础get'表名','Rowkey'get'表名','Rowkey','列簇名'get'表名','Rowkey','列簇名:列名'8.6HBase的Shell操作8.6.4常用DML操作4.统计表的行数直接使用count命令统计指定表的总行数:大数据理论与应用基础hbase:000:0>count'info'2row(s)Took0.0110seconds=>28.6HBase的Shell操作8.6.4常用DML操作5.删除数据(1)删除一个单元格的数据的语法如下:(2)删除指定列的所有数据的语法如下:(3)删除指定行的所有数据的语法如下:(4)删除表中的所有数据:大数据理论与应用基础delete'表名','Rowkey','列簇名:列名',时间戳delete'表名','Rowkey','列簇名:列名'deleteall'表名','Rowkey'truncate'表名'8.7HBase的JavaAPI介绍大数据理论与应用基础8.7HBase的JavaAPI介绍8.7.1环境配置使用Maven构建Java项目,利用IntelliJIDEA集成开发环境新建项目(具体方法参见第4章),新建完成后,在pom.xml文件中添加如下依赖:大数据理论与应用基础<dependencies>

<dependency>

<groupId>org.apache.hbase</groupId>

<artifactId>hbase-client</artifactId>

<version>2.5.2</version>

</dependency>

<dependency>

<groupId>org.apache.hbase</groupId>

<artifactId>hbase-server</artifactId>

<version>2.5.2</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

</dependency>

</dependencies>8.7HBase的JavaAPI介绍8.7.2JavaAPI操作1.命名空间相关操作以右侧码利用JavaAPI实现命名空间的创建及查看。运行后输出如下图所示。大数据理论与应用基础publicclassHBaseTest{

@Test

publicvoidtestCreateNamespace()throwsIOException{

//获取HBase配置

Configurationconf=HBaseConfiguration.create();

conf.set("fs.defaultFS","hdfs://00:8020");

conf.set("hbase.zookeeper.quorum","master,slave01,slave02");

//创建连接

Connectionconn=ConnectionFactory.createConnection(conf);

//获取管理员权限

Adminadmin=conn.getAdmin();

//创建NamespaceDescriptor实例并设置其名称为myNS2

NamespaceDescriptornsDesc=NamespaceDescriptor.create("myNS2").build();

//创建命名空间

admin.createNamespace(nsDesc);

//查看所有命名空间

NamespaceDescriptor[]nsDescs=admin.listNamespaceDescriptors();

for(NamespaceDescriptornds:nsDescs){

System.out.println(nds);

}

admin.close();

}}8.7HBase的JavaAPI介绍8.7.2JavaAPI操作2.表的相关操作右侧代码利用JavaAPI实现了表的创建、删除等操作,运行结果如下图所示。大数据理论与应用基础@Test

publicvoidtestTable()throwsException{

//获取HBase配置

Configurationconf=HBaseConfiguration.create();

conf.set("fs.defaultFS","hdfs://:8020");

conf.set("hbase.zookeeper.quorum","master,slave01,slave02");

//创建连接

Connectionconn=ConnectionFactory.createConnection(conf);

//获取管理员权限

Adminadmin=conn.getAdmin();

//设置表名

TableNametableName=TableName.valueOf("myNS2:tab1");

//判断表是否存在,如果存在,就删除

if(admin.tableExists(tableName)){

//删除表之前需要禁用表

if(admin.isTableEnabled(tableName))

温馨提示

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

评论

0/150

提交评论