学习Hadoop第二十六课(HBase集群搭建)

       上一节课我们一起学习了单节点HBase建表、插入数据、删除数据、查询数据的知识,这节课我们一起来学习HBase集群的搭建。

第一步:下载HBase安装包hbase-0.96.2-hadoop2-bin.tar.gz

        大家可以到Apache官网下载也可以直接到http://pan.baidu.com/s/1qXGDqo8这个地址进行下载。

第二步:搭建集群

       关于集群的搭建大家可以参考:http://blog.csdn.net/u012453843/article/details/52829830这篇博客进行搭建。

第三步:在集群中安装HBase

        我们把hbase-0.96.2-hadoop2-bin.tar.gz安装包上传到itcast01上(我的第一台服务器的主机名),如下所示,然后我们把它解压到/itcast目录下,使用的命令如下蓝色字体所示。

[root@itcast01 ~]# ls
anaconda-ks.cfg                Desktop    Downloads   glibc-2.14.tar.gz  hadoop-2.2.0.tar.gz     install.log      jdk-7u80-linux-x64.gz  Pictures  Templates
apache-maven-3.3.9-bin.tar.gz  Documents  glibc-2.14  hadoop-2.2.0-src   hbase-0.96.2-hadoop2-bin.tar.gz  install.log.syslog  Music                  Public    Videos
[root@itcast01 ~]# tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C /itcast/

         解压完之后我们来配置HBase的配置文件,我们进入到/itcast/hbase-0.96.2-hadoop2/conf/这个目录下,可以看到如下所示的几个配置文件。我们要修改的是hbase-env.sh、hbase-site.xml和regionservers个文件。

[root@itcast01 conf]# ls
hadoop-metrics2-hbase.properties  hbase-env.cmd  hbase-env.sh  hbase-policy.xml hbase-site.xml  log4j.properties regionservers
[root@itcast01 conf]#

        首先我们来配置第一个文件:hbase-env.sh,这里我们使用工具NodePad++来编辑,关于如何使用NodePad++来编辑服务器配置文件大家可以参考:http://blog.csdn.net/u012453843/article/details/52987666这篇博客来学习。我们修改的地方有两处,第一处是JAVA_HOME,原来是被注释掉了,我们去掉前面的"#"号,然后jdk的版本换成我们实际安装的版本(默认版本是1.6的)。第二处配置是告诉HBase不要再使用自己的Zookeeper了,因为集群就有Zookeeper而且具有高可靠性,比它自己的好多了,因此它自己的就不要用了,把原来的true值改为false;这个配置开始也是被注释掉了,我们也像第一个配置一样打开它。改完之后保存,我们就修改完第一个配置文件了。

          接着我们来配置第二个配置文件:hbase-site.xml,配置的内容以Tab键进行缩进。如下图所示。配置的内容大家可以到http://download.csdn.net/detail/u012453843/9669534这个地址下载hbase集群搭建.txt文件复制粘贴就可以了!

配置的三项内容注释中已经说的很清楚了,我就不多说了。

         接着我们再来修改第三个配置文件:regionservers(被管理者),HBase做为管理者的是HMaster,被管理者是HRegionServer,被管理者一般有多个。这里我们把itcast03、itcast04、itcast05、itcast06做为HBase的被管理者。之所以没有把itcast02也当成被管理者是因为对于集群来说,高可靠性是最重要的,为了高可靠性我们至少有三台设备作为管理者(当然,我们这里简单点,就弄两个管理者,我们一会儿让itcast02也成为管理者)修改完后保存。

       配置完上面的内容后,这里还有个问题,那就是HBase需要依赖集群的HDFS和Zookeeper,关于Zookeeper,我们在HBase的配置文件中已经明确指定了,但是关于HDFS,我们只是配置了http://ns1,它并不知道具体的映射关系,也就是说只是告诉HBase的小弟HRegionServer应该连NameNode,但是它并不知道NameNode具体在哪几台设备上,也不知道DataNode在哪几台设备上,那么这样的话,HRegionServer进程便无法正常启动。为了解决这个问题,我们有两种方式可以解决:第一种是在hbase-site.xml中配置映射关系,第二种就是把有映射关系的文件拷贝到HBase的conf目录下,这样HBase就会自动去读取配置文件并获取映射关系,从而可以正常启动HRegionServer进程。为了简单,我们这里就采用第二种方法即向HBase的conf目录下。

       我们进入到hadoop的配置文件目录,如下所示。

[root@itcast01 itcast]#cd /itcast/hadoop-2.2.0/
[root@itcast01 hadoop-2.2.0]# ls
bin  etc  include  lib  libexec  logs  sbin  share  tmp
[root@itcast01 hadoop-2.2.0]# cd etc
[root@itcast01 etc]# ls
hadoop
[root@itcast01 etc]# cd hadoop/
[root@itcast01 hadoop]# ls
capacity-scheduler.xml  hadoop-env.sh               httpfs-env.sh            mapred-env.cmd              ssl-client.xml.example
configuration.xsl       hadoop-metrics2.properties  httpfs-log4j.properties  mapred-env.sh               ssl-server.xml.example
container-executor.cfg  hadoop-metrics.properties   httpfs-signature.secret  mapred-queues.xml.template  yarn-env.cmd
core-site.xml           hadoop-policy.xml           httpfs-site.xml          mapred-site.xml             yarn-env.sh
hadoop-env.cmd          hdfs-site.xml               log4j.properties         slaves                      yarn-site.xml

      我们把core-site.xml和hdfs-site.xml两个文件拷贝到HBase的配置文件目录下。
[root@itcast01 hadoop]# scp core-site.xml hdfs-site.xml /itcast/hbase-0.96.2-hadoop2/conf/

     拷贝完之后我们到HBase的conf目录下看看是不是已经拷进来了,如下所示,发现确实已经有hadoop的那两个配置文件了。
[root@itcast01 hadoop]# cd /itcast/hbase-0.96.2-hadoop2/conf/
[root@itcast01 conf]# ls
core-site.xml         hbase-env.cmd  hbase-policy.xml hdfs-site.xml     regionservers
hadoop-metrics2-hbase.properties  hbase-env.sh   hbase-site.xml    log4j.properties
[root@itcast01 conf]#

       到这步我们已经配置好了一台设备的HBase,接下来我们把这台设备上的HBase目录拷贝到其它设备上去。

为了拷贝的速度快点,我们可以把HBase的docs目录删掉再执行下面的命令,docs是文档,我们在Linux上基本上用不着

[root@itcast01 hbase-0.96.2-hadoop2]# ls
bin  CHANGES.txt  conf  docs  hbase-webapps  lib  LICENSE.txt  logs  NOTICE.txt  README.txt
[root@itcast01 hbase-0.96.2-hadoop2]# rm -rf docs/
[root@itcast01 hbase-0.96.2-hadoop2]# ls
bin  CHANGES.txt  conf  hbase-webapps  lib  LICENSE.txt  logs  NOTICE.txt  README.txt
[root@itcast01 hbase-0.96.2-hadoop2]#

       然后依次执行下面5条命令:

[root@itcast01 conf]# scp -r /itcast/hbase-0.96.2-hadoop2/ root@itcast02:/itcast/

[root@itcast01 conf]#scp -r /itcast/hbase-0.96.2-hadoop2/ root@itcast03:/itcast/

[root@itcast01 conf]#scp -r /itcast/hbase-0.96.2-hadoop2/ root@itcast04:/itcast/

[root@itcast01 conf]#scp -r /itcast/hbase-0.96.2-hadoop2/ root@itcast05:/itcast/

[root@itcast01 conf]#scp -r /itcast/hbase-0.96.2-hadoop2/ root@itcast06:/itcast/

      拷贝完之后我们需要到这5台设备上的Itcast目录下看看是不是有了hbase-0.96.2-hadoop2,我们拿itcast04来说,如下所示,发现确实已经有这个文件了。

[root@itcast04 bin]# cd /itcast/
[root@itcast04 itcast]# ls
hadoop-2.2.0  hbase-0.96.2-hadoop2  zookeeper-3.4.5
[root@itcast04 itcast]#

       接下来我们便来启动我们的HBase集群。

第一步:启动Zookeeper集群

       我们的Zookeeper集群在itcast04、itcast05、Itcast06上,我们分别在这三台设备上启动Zookeeper。如下所示。

itcast04的Zookeepr启动步骤如下:

[root@itcast04 ~]# cd /itcast/zookeeper-3.4.5/bin
[root@itcast04 bin]# ls
README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out
[root@itcast04 bin]# ./zkServer.sh start
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@itcast04 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@itcast04 bin]#

itcast05的Zookeepr启动步骤如下:

[root@itcast05 ~]# cd /itcast/zookeeper-3.4.5/bin
[root@itcast05 bin]# ls
README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out
[root@itcast05 bin]# ./zkServer.sh start
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@itcast05 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@itcast05 bin]#

itcast06的Zookeepr启动步骤如下:

[root@itcast06 bin]# ls
README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out
[root@itcast06 bin]# ./zkServer.sh start
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@itcast06 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@itcast06 bin]#

第二步:启动HDFS

      我们在itcast01上启动HDFS,如下所示。

[root@itcast01 ~]# cd /itcast/hadoop-2.2.0/
[root@itcast01 hadoop-2.2.0]# sbin/start-dfs.sh
Starting namenodes on [itcast01 itcast02]
itcast01: starting namenode, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-namenode-itcast01.out
itcast02: starting namenode, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-namenode-itcast02.out
itcast06: starting datanode, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-datanode-itcast06.out
itcast05: starting datanode, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-datanode-itcast05.out
itcast04: starting datanode, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-datanode-itcast04.out
Starting journal nodes [itcast04 itcast05 itcast06]
itcast05: starting journalnode, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-journalnode-itcast05.out
itcast04: starting journalnode, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-journalnode-itcast04.out
itcast06: starting journalnode, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-journalnode-itcast06.out
Starting ZK Failover Controllers on NN hosts [itcast01 itcast02]
itcast01: starting zkfc, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-zkfc-itcast01.out
itcast02: starting zkfc, logging to /itcast/hadoop-2.2.0/logs/hadoop-root-zkfc-itcast02.out

       启动完itcast01之后我们查看当前进程,发现DFSZKFailoverControllerNameNode两个进程。说明itcast01上HDFS启动成功。
[root@itcast01 hadoop-2.2.0]# jps
2936 DFSZKFailoverController
2695 NameNode

2978 Jps
[root@itcast01 hadoop-2.2.0]#

       我们再来看itcast02上的进程,发现也有DFSZKFailoverControllerNameNode这两个进程,说明itcast02也正常。

[root@itcast02 ~]# jps
2810 DFSZKFailoverController
2753 NameNode

2843 Jps
[root@itcast02 ~]#

       这时itcast04、itcast05、itcast06上的进程如下所示,也是正常的。

[root@itcast04 bin]# jps
2749 JournalNode
2833 Jps
2689 DataNode
2603 QuorumPeerMain

[root@itcast04 bin]#

第三步:启动HBase

       我们在itcast01上启动HBase,我们先到HBase的bin目录下,然后用命令./start-hbase.sh来启动HBase。如下所示。

[root@itcast01 ~]# cd /itcast/hbase-0.96.2-hadoop2/bin/

[root@itcast01 bin]# ./start-hbase.sh
starting master, logging to /itcast/hbase-0.96.2-hadoop2/bin/../logs/hbase-root-master-itcast01.out
itcast06: starting regionserver, logging to /itcast/hbase-0.96.2-hadoop2/bin/../logs/hbase-root-regionserver-itcast06.out
itcast05: starting regionserver, logging to /itcast/hbase-0.96.2-hadoop2/bin/../logs/hbase-root-regionserver-itcast05.out
itcast03: starting regionserver, logging to /itcast/hbase-0.96.2-hadoop2/bin/../logs/hbase-root-regionserver-itcast03.out
itcast04: starting regionserver, logging to /itcast/hbase-0.96.2-hadoop2/bin/../logs/hbase-root-regionserver-itcast04.out

     启动完HBase之后,我们查看itcast01上的进程,如下所示,发现多了一个HMaster进程,这个进程是HBase的管理进程。
[root@itcast01 bin]# jps
2936 DFSZKFailoverController
2695 NameNode
3755 HMaster
3924 Jps
[root@itcast01 bin]#

     这还不行,我们还需要到itcast03、itcast04、itcast05、itcast06上看看HBase的被管理者进程(HRegionServer)是否正常启动,如下所示。

Itcast03上的进程如下,发现有HRegionServer这个进程。

[root@itcast03 itcast]# jps
2795 HRegionServer
2825 Jps
[root@itcast03 itcast]#

    接着看itcast04上的进程,发现HRegionServer也正常启动了。

[root@itcast04 itcast]# jps
3048 Jps
2749 JournalNode
2689 DataNode
2603 QuorumPeerMain
2925 HRegionServer
[root@itcast04 itcast]#

     再看itcast05上的进程,HRegionServer也正常启动了。

[root@itcast05 bin]# jps
2628 QuorumPeerMain
2764 JournalNode
2922 HRegionServer
3060 Jps
2707 DataNode
[root@itcast05 bin]#

     再看itcast06上的进程,HRegionServer也正常启动了。

[root@itcast06 bin]# jps
2615 QuorumPeerMain
2762 JournalNode
3053 Jps
2921 HRegionServer
2705 DataNode
[root@itcast06 bin]#

第四步:通过管理界面验证HBase集群是否搭建成功。

       经过前三步,我们启动了HBase集群,现在我们从管理界面来验证我们的HBase集群。我们已经知道itcast01是我们HBase的管理者,因此我们从itcast01上来查看管理界面,HBase的端口号是60010,我们使用IP地址:端口号来访问界面。如下图所示,可以看到Region Servers有四台设备,分别是itcast03、itcast04、itcast05、itcast06,这也是我们配置的时候指定的,说明这个没问题。再往下看,我们可以看到"Backup Masters"(备份管理者的数量)是0,这也就意味着,一旦itcast01宕掉的话,整个HBase集群将无法运转。再往下是Tables的信息,当前我们还没有建任何表,因此现在是空的。

        为了实现HBase集群的高可靠性,我们再启动一台设备作为HBase的管理者,我们在itcast02上启动HMaster进程。启动步骤如下所示,启动完之后我们检查是否有HMaster进程,发现是有的,说明在itcast02上也启动成功了HMaster进程。

[root@itcast02 itcast]# cd /itcast/hbase-0.96.2-hadoop2/bin
[root@itcast02 bin]# ls
get-active-master.rb  hbase-cleanup.sh  hbase-config.cmd  hbase-daemons.sh  local-master-backup.sh  region_mover.rb   replication         start-hbase.sh  test
graceful_stop.sh      hbase.cmd         hbase-config.sh   hbase-jruby       local-regionservers.sh  regionservers.sh  rolling-restart.sh  stop-hbase.cmd  thread-pool.rb
hbase                 hbase-common.sh   hbase-daemon.sh   hirb.rb           master-backup.sh        region_status.rb  start-hbase.cmd     stop-hbase.sh   zookeepers.sh
[root@itcast02 bin]# ./hbase-daemon.sh start master
starting master, logging to /itcast/hbase-0.96.2-hadoop2/bin/../logs/hbase-root-master-itcast02.out
[root@itcast02 bin]# jps
2810 DFSZKFailoverController
3403 HMaster
3479 Jps
2753 NameNode
[root@itcast02 bin]#

        既然现在有两个HMaster进程了,那么HBase怎么知道哪个HMaster应该是Active(激活)状态,哪个HMaster应该是Backup(备份)状态呢?其实它是靠Zookeeper来协调的,保证HBase集群同一时刻只能有一个激活的HMaster。

       理论如此,我们还是通过管理界面来验证一下,我们还是访问itcast01的管理界面,如下图所示,可以发现在"Backup Masters"一栏出现了itcast02,说明itcast02当前处于Backup(备份状态)。

     在管理界面的最下方有一些描述信息,如下图所示,我们可以点击下图红色圈住的"zk dump"来查看详细信息。

      详细信息如下图所示,可以看到,Active状态的是itcast01,Backup状态的是itcast02,被管理者是itcast03、itcast04、itcast05、itcast06等等。

        下面我们来验证一下该集群的高可靠性。为了验证,我们先强制杀死itcast01上的HMaster进程,如下所示,我们要想杀死HMaster进程,需要先知道它的进程号是多少,我们使用jps命令来查看当前所有进程,发现HMaster进程的进程号是3755,因此我们便需要杀死3755进程,强制杀死进程的命令是:kill -9 进程号,这里我们使用kill -9 3755来杀死这个进程,杀死后我们再使用jps命令来查看当前进程,发现已经没有HMaster进程了。

[root@itcast01 bin]# jps
2936 DFSZKFailoverController
2695 NameNode
3755 HMaster
4276 Jps
[root@itcast01 bin]# kill -9 3755
[root@itcast01 bin]# jps
4362 Jps
2936 DFSZKFailoverController
2695 NameNode
[root@itcast01 bin]#

       杀死了itcast01上的HMaster进程之后,HBase集群就剩下一个HMaster进程了,我们这时来看一下itcast01上是否还能查看管理界面,如下图所示,发现itcast01已经无法浏览管理界面了(因为我们已经杀死了它的HMaster进程了)

       既然itcast01的管理界面无法看了,我们便来看看itcast02的管理界面,发现itcast02已经自动变成Active状态了,现在Backup状态的设备数量为0。

         接下来我们再启动itcast01的HMaster,如下所示。

[root@itcast01 bin]# ./hbase-daemon.sh start master
starting master, logging to /itcast/hbase-0.96.2-hadoop2/bin/../logs/hbase-root-master-itcast01.out
[root@itcast01 bin]# jps
4446 HMaster
2936 DFSZKFailoverController
2695 NameNode
4563 Jps
[root@itcast01 bin]#

        启动完itcast01的HMaster之后我们再来看一下itcast01的管理界面,如下图所示,很明显界面信息比较少,这是Backup状态的HMaster的界面。当然,我们也可以通过点击"zk dump",来查看详情。


       查看"zk dump"详情图片如下,可以看到现在itcast02是Active状态,itcast01是Backup状态。这说明我们的HBase集群具有自动切换角色的功能,从而保证了集群的高可靠性。

 

 第五步:查看HBase的文件存储信息

      我们在配置HBase的时候配置过<value>http://ns1/hbase</value>这么一条信息,这条配置意味着,HBase将在HDFS系统的根目录下创建一个hbase的目录,并将HBase产生的数据放到这个目录下面。那么我们通过查看HDFS系统来验证是否已经生成了Hbase的目录。我们浏览:http://169.254.254.10:50070来浏览,其中169.254.254.10是我的itcast01的IP地址,你根据你的IP地址来输入。50070是查看HDFS的端口。会出现如下图所示的界面,我们点击"Browse the filesystem"。

      点击上图的"Browse the filesystem"之后我们可以看到如下图所示的界面,发现确实多了hbase这么一个目录。我们进去hbase目录看看都有哪些东西。

      点击上图的"habase"之后我们会进入到如下图所示的界面,可以看到这些都是HBase的相关目录,用来存放HBase产生的数据。

第六步:创建表并在管理界面查看我们建的表

     首先我们需要进入到hbase的shell模式,如下所示。

[root@itcast01 bin]# ./hbase shell
2016-11-02 01:14:41,546 INFO  [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.96.2-hadoop2, r1581096, Mon Mar 24 16:03:18 PDT 2014
      接着我们使用建表语句:create 'user','info','data'来新建一张表,这句话的意思是,创建一张名叫"user"的表,这张表有两个列族,分别叫"info"列族和"data"列族。
hbase(main):001:0> create 'user','info','data'
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/itcast/hbase-0.96.2-hadoop2/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/itcast/hadoop-2.2.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
0 row(s) in 2.6720 seconds
=> Hbase::Table - user
     创建完之后先在shell模式下查看是否有这张表,使用命令list来查看,如下所示,发现是有的。
hbase(main):002:0> list
TABLE                                                                                                                                                                                                      
user                                                                                                                                                                                                       
1 row(s) in 0.0510 seconds
=> ["user"]
hbase(main):003:0>
     我们主要是去管理界面看是否有我们刚才建的表,现在itcast02是Active状态的管理者,因此我们访问itcast02的管理界面,如下图所示(我只截取了一小部分),可以看到,在Tables一栏中确实已经有一张名叫"user"的表了,而且在"Description"描述当中,有这张表两个列族的信息。

      好了,关于HBase集群搭建我们便一起学完了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值