Hadoop之HBase(实践篇)

x33g5p2x  于2020-10-30 发布在 Hbase  
字(8.8k)|赞(0)|评价(0)|浏览(835)

上一篇文章介绍了HBase相关的基础理论知识,了解了HBase具有的优势和特点。本文将详细介绍HBase的三种安装模式,即本地模式、伪分布模式和全分布模式,及基于HBase的编程实践,相信会让你有所收获。

1**、安装和配置****HBase**

HBase跟Hadoop类似,同样有三种安装模式,分别是本地模式(也叫单机模式)、伪分布模式以及全分布模式,这三种安装模式各有其特点及应用场景,下面将一一作介绍。

A**、本地模式**

本地模式是HBase的默认模式,该模式是直接在本地文件系统中存放数据而不是基于HDFS,也不需要使用Zookeeper。注意,在本地文件系统上运行HBase一般不能确保数据的持久性,要想确保数据都被保存下来,需要在HDFS上运行HBase。但是在本地文件系统上运行HBase可以快速开始学习和熟悉HBase系统的运作,因而该模式通常用于HBase程序的测试。下面开始HBase本地模式的安装和配置。

首先,将HBase安装包上传到Hadoop221的/root/tools目录下,然后运行命令tar -zxvfhbase-1.3.1-bin.tar.gz -C /root/training/,将HBase解压到/root/training目录,接下来配置HBase的环境变量,运行命令vi ~/.bash_profile,在该文件末尾添加如下内容:

HBASE_HOME=/root/training/hbase-1.3.1

export HBASE_HOME

PATH=$HBASE_HOME/bin:$PATH

export PATH

保存退出后,运行命令source /root/.bash_profile,使环境变量生效。由于HBase本地模式是将数据保存在本地Linux系统中,因此需要在本地创建一个存放数据的目录,进入到HBase的home目录/root/training/hbase-1.3.1,运行命令mkdir data,创建一个data目录。

修改HBase的配置文件hbase-env.sh,将27行的内容从/# export JAVA_HOME=/usr/java/jdk1.6.0/修改为exportJAVA_HOME=/root/training/jdk1.8.0_144,保存退出;然后修改配置文件hbase-site.xml,在configuration标签中添加如下代码:

<property>

<name>hbase.rootdir</name>

<value>file:///root/training/hbase-1.3.1/data</value>

</property>

</configuration>

保存退出,至此,HBase的本地模式安装完成。HBase本地模式的配置总结如下表:
参数文件

配置参数

参考值.bash_profile

HBASE_HOME

/root/training/hbase-1.3.1hbase-env.sh

JAVA_HOME

/root/training/jdk1.8.0_144hbase-site.xml

hbase.rootdir

file:///root/training/hbase-1.3.1/data

运行命令start-hbase.sh,启动HBase。注意,HBase本地模式只会启动一个HMaster,因此仅能看到如下一行关键log:

starting master,logging to /root/training/hbase-1.3.1/logs/hbase-root-master-hadoop221.out

最后,测试下HBase是否安装成功。运行命令hbase shell,连接到HBase的终端,运行命令create 'student','info','grade',创建一个表及其两个列族info和grade,运行命令list,查看HBase中有哪些表,运行命令describe 'student',查看student表的结构。若这些命令都正常运行,则表明HBase的本地模式安装成功。运行exit退出HBase终端,进入到/root/training/hbase-1.3.1/data目录,运行命令tree -L 3,查看data目录的结构,如下图所示,可以得知,HBase中的一个表,如student,对应于data目录下的一个目录,如student。

B**、伪分布模式**

HBase的伪分布模式是在一台机器上模拟HBase的全分布环境,需要使用HDFS来保存数据,同时还需要运行Zookeeper。在HBase程序的开发和测试阶段,更多的是使用伪分布模式,而在生产环境中则必须使用全分布模式。下面介绍HBase伪分布模式的安装和配置。

由于前面已经安装了HBase的本地模式,现在就在本地模式的基础上进行修改,来搭建HBase的伪分布模式。HBase的伪分布模式需要使用到Zookeeper,而HBase自带了一个Zookeeper,在这里就使用自带的Zookeeper,当然了,也可以自己另外安装一个Zookeeper。使用HBase自带的Zookeeper,需要在配置文件中设置一个参数,进入目录/root/training/hbase-1.3.1/conf,运行命令vi hbase-env.sh,将128行的注释打开,即将/# export HBASE_MANAGES_ZK=true,修改为export HBASE_MANAGES_ZK=true即可。

由于HBase的伪分布模式将数据保存在HDFS中,因此需要配置一个HDFS的目录,用于存放HBase的数据。下面配置hbase-site.xml文件,运行命令vi hbase-site.xml,将configuration标签中的内容替换为如下:

<!--HBase的数据保存在HDFS中对应的目录-->

<property>

<name>hbase.rootdir</name>

<value>hdfs://192.168.12.221:9000/hbase</value>

</property>

<!--是否是分布式环境-->

<property>

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

<value>true</value>

</property>

<!--配置Zookeeper的地址-->

<property>

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

<value>192.168.12.221</value>

</property>

<!--冗余度-->

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

因为HBase的伪分布模式也属于分布式环境,因而需要配置其从节点的信息。运行命令vi regionservers,将其中的内容localhost替换为192.168.12.221(使用主机名hadoop221同理)。至此,HBase的伪分布模式安装完成,HBase伪分布模式的配置总结如下表:
参数文件

配置参数

参考值.bash_profile

HBASE_HOME

/root/training/hbase-1.3.1hbase-env.sh

JAVA_HOME

/root/training/jdk1.8.0_144HBASE_MANAGES_ZK

truehbase-site.xml

hbase.rootdir

hdfs://192.168.12.221:9000/hbasehbase.cluster.distributed

truehbase.zookeeper.quorum

192.168.12.221dfs.replication

1regionservers

192.168.12.221

接下来测试下HBase的伪分布模式是否安装成功。由于HBase的伪分布模式需要使用HDFS,确保先启动HDFS,然后运行命令start-hbase.sh,启动HBase(启动顺序不能颠倒,否则HBase不能正常工作,如在shell终端运行命令会报错:ERROR: Can't get master address from ZooKeeper; znodedata == null),可以看到如下图所示的log信息,启动了Zookeeper,master,regionserver。

运行命令hbase shell,连接到HBase终端,运行命令create 'student','info','grade',创建一个student表及其列族info和grade,运行命令list,查看HBase中有哪些表。HBase的伪分布模式把数据保存在HDFS上,可以上HDFS的Web Console,查看在HDFS上创建的hbase目录下都有哪些内容。在浏览器地址栏中输入http://192.168.12.221:50070,进入Utilities-Browse the file system-hbase,可以看到如下图所示的内容,不难发现,这些内容和本地模式data目录下的内容基本是一致的。

C**、全分布模式**

HBase的全分布模式通常应用于生产环境中,需要使用多台机器,下面就在hadoop222,hadoop223和hadoop224三台Linux上安装HBase的全分布环境。

在hadoop222上解压HBase的安装包,设置HBase的环境变量(同时在hadoop223和hadoop224上,按照相同的方式设置HBase的环境变量),这些操作跟前面安装HBase的本地模式完全一样,这里不做赘述。下面进行HBase全分布模式的配置,主要在hadoop222上进行配置,最后复制HBase安装目录到其他机器即可。

进入目录/root/training/hbase-1.3.1/conf,运行命令vi hbase-env.sh,将27行/# export JAVA_HOME=/usr/java/jdk1.6.0/修改为export JAVA_HOME=/root/training/jdk1.8.0_144,将128行/# export HBASE_MANAGES_ZK=true,去掉注释符/#,改为export HBASE_MANAGES_ZK =true,保存退出。

下面配置hbase-site.xml文件,运行命令vi hbase-site.xml,在configuration标签中添加如下内容:

<!--HBase的数据保存在HDFS上的对应目录-->

<property>

<name>hbase.rootdir</name>

<value>hdfs://192.168.12.222:9000/hbase</value>

</property>

<!--是否是分布式环境-->

<property>

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

<value>true</value>

</property>

<!--配置Zookeeper的地址-->

<property>

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

<value>192.168.12.222</value>

</property>

<!--冗余度-->

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<!--主节点和从节点允许的最大时间误差-->

<property>

<name>hbase.master.maxclockskew</name>

<value>180000</value>

</property>

保存退出。这里需要解释下hbase.master.maxclockskew这个参数,一般情况下需要保证HBase集群中各机器的时间是同步的(在生产环境中可以使用一个服务器,专门用于做时间同步),否则可能出现HBase启动后,过一段时间RegionServer就自动死掉了,这就是由于时间不同步,HMaster在一段时间内没有收到RegionServer的心跳信息,便认为该RegionServer已经死掉,从而将其杀掉。

下面配置regionservers文件,配置从节点的信息。运行命令vi regionservers,将其中的localhost替换为如下内容即可。

192.168.12.223

192.168.12.224

至此,HBase全分布环境的配置基本完成,最后需要将配置好的HBase安装目录复制到hadoop223和hadoop224机器上,依次运行如下两条命令即可。

scp -r /root/training/hbase-1.3.1/root@hadoop223:/root/training/

scp -r /root/training/hbase-1.3.1/root@hadoop224:/root/training/

HBase全分布模式的配置总结如下表所示。
参数文件

配置参数

参考值.bash_profile

HBASE_HOME

/root/training/hbase-1.3.1hbase-env.sh

JAVA_HOME

/root/training/jdk1.8.0_144HBASE_MANAGES_ZK

truehbase-site.xml

hbase.rootdir

hdfs://192.168.12.222:9000/hbasehbase.cluster.distributed

truehbase.zookeeper.quorum

192.168.12.222dfs.replication

2hbase.master.maxclockskew

180000regionservers

192.168.12.223

192.168.12.224

最后,测试下HBase是否安装成功,先确保HDFS集群已经正常运行,然后运行命令start-hbase.sh,启动HBase,输出的log信息如下图所示,可以看到启动了Zookeeper,Master,两个RegionServer。

运行命令hbase shell,连接到HBase终端,运行命令create 'student','info','grade',创建一个student表及其列族info和grade,运行命令list,查看HBase中有哪些表。至此,HBase的三种安装模式介绍完毕,后文将继续介绍HBase的操作及编程实践。

2**、操作****HBase**

HBase类似Hadoop,同样提供了三种操作方式,分别是命令行、Java API以及Web Console。下面将结合实际案例,简单介绍下这三种操作方式的用法。

A**、命令行**

HBase提供了一个shell终端供用户进行操作,常用的HBase操作命令如下表所示。

举几个操作实例。在HBase中创建一张名称为student的数据表,列族分别为info和grade,然后插入几条数据,命令如下:

创建表: create 'student','info','grade'

插入数据: put 'student','stu001','info:name','Tom'

put'student','stu001','info:age','24'

put'student','stu001','info:gender','Male'

put 'student','stu001','grade:math','80'

put 'student','stu002','info:name','Mike'

查询表内容:scan 'student'

也可以使用get命令查询表内容,get格式: get '表名','行键',如get 'student','stu001',scan和get命令运行结果如下图所示。

删除表:disable 'student'

drop 'student'

这里需要特别注意,删除表之前,先需要将表disable,再drop。

B**、**JavaAPI

HBase提供了丰富的Java API供程序员编程使用,通过编写下面的几个程序,可以充分感受到HBase面向对象的思想,在HBase中对表的操作及对表中数据的操作都被封装成了相应的类,非常方便理解及使用。下面的Java程序实例将在Base中进行创建表及增、删、改、查等操作。

使用Java程序创建一个名称为students的表:

使用Java程序往students表中插入一条数据:

使用Java程序往students表中插入多条数据:

使用Java程序从HBase的students表中查询一条数据:

使用Java程序从HBase的students表中查询所有数据:

使用Java程序从HBase中删除students表:

C**、**WebConsole

HBase同样也提供了网页的方式来查看和操作HBase,端口号为16010,在浏览器的地址栏中输入http://192.168.12.222:16010/,即可进行查看,如下图所示:

3**、HBase的过滤器**

HBase为筛选数据提供了一组过滤器,通过这些过滤器可以在HBase的数据表中,从不同的维度(行、列,数据版本等)进行筛选操作,也就是说,过滤器筛选的数据能够细化到具体的一个存储单元格(由行键、列名、时间戳定位)。一般来说,通过行键、值来筛选数据的应用场景较多一些。

HBase中的过滤器类似于SQL语句中的Where条件语句,过滤器在客户端创建,然后通过RPC通信的方式发送到服务器上,由服务器端执行,整个执行流程如下图所示:

**HBase****过滤器执行流程解析:**客户端首先创建相应的过滤器,然后将装载有过滤器的序列化对象Scan发送到HBase的各个RegionServer上(这是一个服务器端过滤器),这样也可以减小网络传输的压力。RegionServer使用Scan和内部的扫描器对数据进行过滤操作,查询相应的数据信息。下面结合实例程序,简单介绍下几种常见的过滤器的使用,这些程序实例使用的数据表内容参考如下图:

A**、列值过滤器**


B**、列名前缀过滤器**

C**、多列名前缀过滤器**


D**、行键过滤器**

E**、组合过滤器**


4**、基于HBase的****MapReduce**

下面将重新实现WordCount程序,但是跟前面有所不同,这里将从HBase表中获取数据,经过MapReduce程序的处理后,最终又将数据保存回HBase的表中。首先,准备测试数据,在hbase的shell终端依次运行如下命令,创建数据表words,并插入几条字符串数据:

create'words','content'

put 'words','1','content:info','Ilove Beijing'

put'words','2','content:info','I love ShenZhen'

put'words','3','content:info','I love ChengDu'

put'words','4','content:info','ShenZhen and ChengDu are very good'

Mapper组件类如下图所示,需要注意的是,这里的Mapper类继承的是TableMapper,而map方法中参数key的数据类型是ImmutableBytesWritable,参数value的数据类型是Result,它们都是直接跟HBase中的表相关联。

Reducer组件类如下图所示,需要注意的是,由于在reduce方法中是直接将结果保存回HBase的表中,因而其调用context.write()输出结果时,参数有所不同。

WordCount主程序类如下图,由于这里使用HBase作为MapReduce程序的数据源及结果存储目的地,需要在配置参数中设置Zookeeper的地址;为了提高效率,避免查询到多余的垃圾数据,可以为扫描器设定相应的过滤器。

将该程序导出为jar包,发布到HDFS上运行,执行结束后,在HBase的shell终端,运行命令scan ‘result’,查询到的结果如下图所示。

至此,关于HBase实验环境的搭建及其操作实践介绍完毕,相信看完后,你已经能够轻松驾驭,动起手来实践吧!

参考文献:

——《CSDN博客》

——《潭州大数据课程课件》

转自https://mp.weixin.qq.com/s/-OZP0a1E9KJThXLzEFHZrg

相关文章