大数据技术--实验03-HBase的安装与使用【实测可行】

1. 配置Vmware虚拟机

参考第2章的配置,配置好虚拟机。

虚拟机配置好后,配置Hbase参考下表的服务分配来配置HBase。

|--------|-----|-----------|--------------|
| 机器名 | 主节点 | ZooKeeper | RegionServer |
| master | 是 | 是 | 否 |
| slave1 | 备份 | 是 | 是 |
| slave2 | 否 | 是 | 是 |

2. 下载并配置HBase

在HBase的官网http://mirrors.cnnic.cn/apache/hbase/ 下载HBase,其文件为:hbase-1.0.1.1 -bin.tar.gz。下载后解压到master机器。

在master机器进行配置即可,然后可以通过把配置文件拷贝的方式,下载到slave1和slave2,这样可以减少工作量。

注:书上是将hbase安装在root用户下,实测时存在一些问题,主要是权限交叉造成的。我们假设本实验的hbase-1.0.3和hadoop-2.6.0等组件都是装在/home/hadoop/local/opt下,后续都建立在Hadoop用户下(除用户组以上的配置用root用户修改,其他配置及目录全部使用Hadoop用户,保持用户权限的一致性,避免出现不必要的错误)。

[hadoop@master Hbase]$ tar -zxvf hbase-1.0.3-bin.tar.gz -C ~/local/opt

[hadoop@master ~]$ vim ~/.bashrc

将hbase添加到环境变量中

export HBASE_HOME=$HOME/local/opt/hbase-1.0.3

export HBASE_CONF_DIR=$HBASE_HOME/conf

并修改环境变量:

export PATH=PATH:HADOOP_PREFIX/bin:HADOOP_PREFIX/sbin:HBASE_HOME/bin

[hadoop@master conf]# vim hbase-site.xml

配置文件在$HBASE_HOME/conf文件夹里面。修改文件hbase-site.xml文件,内容如下:

<configuration>

<property>

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

<value>true</value>

</property>

<property>

<name>hbase.rootdir</name>

<value>hdfs://master/hbase</value>

</property>

<property>

<name>hbase.master</name>

<value>master</value>

</property>

<property>

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

<value>master,slave1,slave2</value>

</property>

<property>

<name>hbase.zookeeper.property.dataDir</name>

<value>/home/hadoop/local/var/zookeeper</value>

</property>

</configuration>

注意hbase.rootdir必须和你的namenode里面的hdfs的主机名和端口一样。

注:如果运行hbase(zookeeper)的用户无法写入zookeeper文件,导致znode data为空,那么在hbase-site.xml指定一个运行hbase的用户有写入文件权限的目录作为zookeeper数据目录,如/home/hadoop/local/var/zookeeper。

[hadoop@master conf]# vim hbase-env.sh

修改hbase-env.sh文件,添加JDK的配置。内容如下:

export JAVA_HOME=/usr/lib/jvm/java

export HBASE_MANAGES_ZK=true

第一个参数指定了JDK路径;第二个参数设置使用 hbase 默认自带的 Zookeeper

――――――――――[独立安装zookeeper情况]―――――――――――――――

注:如果独立安装zookeeper,则使用变量export HBASE_MANAGES_ZK=false 来禁用hbase自带的zookeeper,独立安装zookeeper方法如下:

在master机器下,配置zookeeper,先解压安装包,使用命令:

[hadoop@master ~]tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/local/opt

进入zookeeper的配置目录,首先把zoo_sample.cfg重命名一下,可以重新复制一遍,使用命令:

[hadoop@master ~]cp zoo_sample.cfg zoo.cfg

[hadoop@master ~]vim zoo.cfg

添加如下内容:

dataDir=/home/hadoop/local/var/zookeeper

server.0=192.168.164.5:2888:3888

server.1=192.168.164.6:2888:3888

server.2=192.168.164.7:2888:3888

其中,2888端口号是zookeeper服务之间通信的端口,而3888是zookeeper与其他应用程序通信的端口。

在目录/home/hadoop/local/var/zookeeper下创建文件,命名为"myid"

[hadoop@master ~]mkdir /home/hadoop/local/var/zookeeper

[hadoop@master ~]/home/hadoop/local/var/zookeeper

[hadoop@master ~]vim myid

在对应的IP的机器上输入对应的编号。

如在192.168.164.5上,"myid"文件内容就是0,在192.168.164.6上,内容就是1,在192.168.164.7上,内容就是2。(后两者在slave1和slave2中操作)。

把zookeeper分别远程拷贝slave1,slave2,使用如下命令(先cd至zookeeper-3.4.5目录):

scp --r zookeeper-3.4.5 hadoop@slave1:local/opt

scp --r zookeeper-3.4.5 hadoop@slave2:local/opt

开启zookeeper服务,在三台机器的zookeeper安装目录下使用命令(先cd至zookeeper-3.4.5目录):

bin/zkServer.sh start

待3台服务器均启动后,如果过程正确的话zookeeper应该已经自动选好leader,进入每台服务器的zookeeper-3.4.5目录,执行以下操作查看zookeeper启动状态:

bin/zkServer.sh status

如果出现以下代码表示安装成功了。

―――――――――――――[独立安装zookeeper情况]――――――――――――――

[hadoop@master conf]# vim regionservers

修改regionservers ,内容如下:

slave1

slave2

[hadoop@master conf]# vim backup-masters

新建backup-masters文件,内容如下:

slave1

[hadoop@master opt]$ scp -r hbase-1.0.3 hadoop@slave1:local/opt/

[hadoop@master opt]$ scp -r hbase-1.0.3 hadoop@slave2:local/opt/

将配置好的hbase-1.0.3复制至slave1和slave2。

启动hbase时要确保hdfs已经启动。

[root@master ~]# su -- hadoop

[hadoop@master ~]$ start-all.sh

(如果是独立安装zookeeper,则启动hdfs后,分别在三台机器上启动zookeeper,独立启动和查看zookeeper方法如上所述。如果是使用Hbase自带的zookeeper,那么不需要独立启动zookeeper,会在下面的start-hbase.sh中自动启动)

[hadoop@master ~]$ start-hbase.sh

slave2: starting zookeeper, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-zookeeper-slave2.out

slave1: starting zookeeper, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-zookeeper-slave1.out

master: starting zookeeper, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-zookeeper-master.out

starting master, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-master-master.out

slave1: starting regionserver, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-regionserver-slave1.out

slave2: starting regionserver, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-regionserver-slave2.out

slave1: starting master, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-master-slave1.out

[hadoop@master ~]$ jps

3811 SecondaryNameNode

5897 HMaster

5832 HQuorumPeer

3957 ResourceManager

6057 Jps

3653 NameNode

[hadoop@master ~]$ ssh slave1

Last login: Sat Apr 22 20:07:06 2017 from master

[hadoop@slave1 ~]$ jps

3766 HQuorumPeer

3869 HRegionServer

2871 DataNode

4085 Jps

2941 NodeManager

3942 HMaster

[hadoop@slave1 ~]$ ssh slave2

Last login: Sat Apr 22 20:10:54 2017 from slave1

[hadoop@slave2 ~]$ jps

2913 NodeManager

3657 HRegionServer

3554 HQuorumPeer

2843 DataNode

3890 Jps

同时在浏览器访问:http://master:16010/master-status 即可看到HBase的状态。http://192.168.164.6:16030/http://192.168.164.7:16030/可以用于查看RegionServer。

关闭HBase,在master机器上执行下面的命令:

[hadoop@master bin]# ./stop-hbase.sh

关闭zookeeper,若使用Hbase的zookeeper,则关闭Hbase时自动关闭。若独立安装zookeeper,则分别在三台机器上使用bin/zkServer.sh stop关闭。

关闭hdfs,在master机器上执行下面的命令:

[hadoop@master bin]# ./stop-all.sh

注意启动顺序为:HDFS->(Zookeeper)->HBase,关闭顺序为:HBase->(Zookeeper)->HDFS。

注意: 如果发现slave1 上面的RegionServer 启动不了,可以在$HBASE_HOME/log 下面查看RegionServer 对应的日志,如果出现下面的错误:

Caused by: java.net.BindException: Problem binding to master.example.com/192.168.222.131:16020 : Address already in use

at org.apache.hadoop.hbase.ipc.RpcServer.bind(RpcServer.java:2371)

at org.apache.hadoop.hbase.ipc.RpcServer$Listener.<init>(RpcServer.java:524)

at org.apache.hadoop.hbase.ipc.RpcServer.<init>(RpcServer.java:1899)

at org.apache.hadoop.hbase.regionserver.RSRpcServices.<init>(RSRpcServices.java:792)

at org.apache.hadoop.hbase.regionserver.HRegionServer.createRpcServices(HRegionServer.java:575)

at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:492)

... 10 more

Caused by: java.net.BindException: Address already in use

那就说明HBase 和RegionServer 端口相同,需要使用下面的方式启动RegionServer

[hadoop@slave1 bin]#./local-regionservers.sh start 1

关闭命令为:[hadoop@slave1 bin]#./local-regionservers.sh stop 1

其中1,2,3标识各个RegionServer 。表示端口号偏移一个值。

备份Hmaster如果启动不了,一般也是这个原因。

使用本地命令进行启动:

[hadoop@slave bin]$ ./local-master-backup.sh start 1

其中1,2,3标识各个HMaster。表示端口号偏移一个值。

关闭使用类似的命令。

重点是保持HBase 和RegionServer 端口不相同就行。

3. Hbase Shell 命令

1)进入HBase Shell。

[hadoop@master ~]# $HBASE_HOME/bin/hbase shell

HBase Shell; enter 'help<RETURN>' for list of supported commands.

Type "exit<RETURN>" to leave the HBase Shell

Version 1.0.1.1, re1dbf4df30d214fca14908df71d038081577ea46, Sun May 17 12:34:26 PDT 2015

2)新建user表。

hbase(main):001:0> create 'user','info'

0 row(s) in 1.2520 seconds

=> Hbase::Table -- user

3)导入user表中的数据。

hbase(main):002:0> put 'user','001','info:name','Tom'

0 row(s) in 0.1370 seconds

hbase(main):003:0> put 'user','001','info:age','22'

0 row(s) in 0.0240 seconds

hbase(main):004:0> put 'user','002','info:name','Kate'

0 row(s) in 0.0230 seconds

hbase(main):005:0> put 'user','002','info:age','30'

0 row(s) in 0.0140 seconds

hbase(main):006:0> put 'user','003','info:name','Jack'

0 row(s) in 0.0120 seconds

hbase(main):007:0> put 'user','003','info:age','36'

0 row(s) in 0.0280 seconds

4)查看user表中的数据。

hbase(main):008:0> scan 'user'

ROW COLUMN+CELL

001 column=info:age, timestamp=1439433026307, value=22

001 column=info:name, timestamp=1439433017825, value=Tom

002 column=info:age, timestamp=1439433043987, value=30

002 column=info:name, timestamp=1439433037118, value=Kate

003 column=info:age, timestamp=1439433057189, value=36

003 column=info:name, timestamp=1439433050416, value=Jack

3 row(s) in 0.0740 seconds

5)查看user表的描述。

hbase(main):009:0> describe 'user'

Table user is ENABLED

user

COLUMN FAMILIES DESCRIPTION

{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_D

ELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSIO

N => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLIC

ATION_SCOPE => '0'}

1 row(s) in 0.0550 seconds

6)删除user表。

hbase(main):010:0> disable 'user'

0 row(s) in 1.2820 seconds

hbase(main):011:0> drop 'user'

0 row(s) in 0.1940 seconds

hbase(main):012:0> list

TABLE

0 row(s) in 0.0250 seconds

=> []

相关推荐
喵叔哟27 分钟前
重构代码之移动字段
java·数据库·重构
念白44331 分钟前
智能病历xml提取
数据库·sql·oracle
qingy_204635 分钟前
【JavaWeb】JavaWeb入门之XML详解
数据库·oracle
大数据面试宝典39 分钟前
用AI来写SQL:让ChatGPT成为你的数据库助手
数据库·人工智能·chatgpt
努力的小雨44 分钟前
快速上手 KSQL:轻松与数据库交互的利器
数据库·经验分享
Gentle5861 小时前
labview中连接sql server数据库查询语句
数据库·labview
Gentle5861 小时前
labview用sql server数据库存取数据到一个单元格
数据库·labview
2401_857636391 小时前
共享汽车管理新纪元:SpringBoot框架应用
数据库·spring boot·汽车
菲兹园长1 小时前
表的设计(MYSQL)
数据库·mysql
huaqianzkh1 小时前
了解Hadoop:大数据处理的核心框架
大数据·hadoop·分布式