zoukankan      html  css  js  c++  java
  • HBase集群搭建

    HBase集群搭建

    搭建环境:假设我们的linux环境已经准备好,包括网络、JDK、防火墙、主机名、免密登录等都没有问题,而且一定要有zookeeper。下面我们用3台linux虚拟机来搭建Hbase集群,首先启动我们的3台linux虚拟机,主机名分别为hadoop01、hadoop02和hadoop03。

    1.启动zookeeper集群

    启动zookeeper的命令:

    [root@hadoop01 zookeeper]# bin/zkServer.sh start

    查看zookeeper启动状态:

    [root@hadoop01 zookeeper]# bin/zkServer.sh status

    2.启动HDFS集群

    由于Hbase是基于HadoopHDFS的,所以我们还要启动HDFS集群。

    HDFS的启动命令:

    [root@hadoop01 hadoop]# sbin/start-dfs.sh

    通过jps命令看到至少有如下5个进程是正常的:

    [root@hadoop01 hadoop]# jps
    2511 DataNode                  --HDFS的DataNode进程
    2034 QuorumPeerMain            --Zookeeper进程
    2850 DFSZKFailoverController   --ZKFC进程
    2412 NameNode                  --HDFS的NameNode进程
    2683 JournalNode               --JournalNode进程

    在浏览器中访问如下地址,检查NameNode的状态(若显示为“active”说明正常):

    检查DataNode的状态是否正常:

    3.上传Hbase安装包

    我们使用的是Hbase的版本是:hbase-1.2.1-bin.tar.gz

    4.解压Hbase的安装包

    解压命令(其中参数-C表示解压的指定的目录):

    [root@hadoop01 soft]# tar -zxvf hbase-1.2.1-bin.tar.gz -C /root/apps/

    进入到解压后的Hbase目录,把docs目录删除(为了后面拷贝更快一点):

    5.修改配置文件hbase-env.sh

    主要修改2个地方:

    //修改JAVA_HOME
    export JAVA_HOME= /root/apps/jdk1.7.0_80/
    //Hbase其实自己带了zookeeper的jar包,它可以自己启动zookeeper
    //这样的话就会跟我们自己单独部署的那个多种服务共用的zookeeper集群会产生冲突
    //所以这里一般设置为false
    export HBASE_MANAGES_ZK=false

    在hbase-env.sh配置文件还有一些其他的配置,从中选择一些做简单介绍:

    //配置Hbase的classpath路径,这个我们不用配置,Hbase会自动加载它的lib目录
    //如果你把hadoop的配置文件也放到Hbase的classpath下面,Hbase也会去加载
    # export HBASE_CLASSPATH=
    
    //Hbase最大可用的堆内存大小,默认是1G
    # export HBASE_HEAPSIZE=1G
    
    //该项配置可以将数据序列化到JVM自己的堆内存中
    //而不是放到JVM分配给Hbase的堆内存
    # export HBASE_OFFHEAPSIZE=1G
    
    //Hbase在启动的时候会给JVM传递该参数,这是一个种“使用并发标记的垃圾回收器”
    //JVM有很多种垃圾回收器,每一种都有自己的特性,并非某一种垃圾回收比其他的好,这要看用在哪一种程序里面
    //比如服务端和客户端的垃圾回收差别就很大,客户端只要能将垃圾清理干净(暂停用户线程然后清理垃圾,即StopTheWorld)就OK了,但是服务器端不能这样做,它讲究并发
    export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
    
    //传给HMaster的JVM参数,永久区大小和最大永久区大小
    export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
    
    //传给RegionServer的JVM参数,这些JVM参数都可以根据我们的服务器的情况进行调整
    export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
    
    //打印JVM的GC详细信息,并打印GC的时间
    export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
    
    //指定将GC的详细信息打印到哪个文件,便于后续分析
    export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<FILE-PATH>"
    
    export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<FILE-PATH> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M"
    
    //下面3个是打印客户端的一些GC信息设置
    export CLIENT_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
    export CLIENT_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<FILE-PATH>"
    export CLIENT_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<FILE-PATH> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M"
    
    //你可以把用来做备份Master的节点的主机名放到下面的backup-masters文件中,作为Hbase的备选Master主机
    export HBASE_BACKUP_MASTERS=${HBASE_HOME}/conf/backup-masters

    6.修改配置文件hbase-site.xml

    <configuration>
        <!-- 指定hbase在HDFS上存储的路径,路径是自定义的 -->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://ns1/hbase</value>
        </property>
        <!-- 指定hbase是分布式的,让Hbase运行在分布式模式下 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <!—既然在hbase-env.sh中设置了不使用自己的zookeeper,所以这里要指定zookeeper的地址,多个用“,”分割 -->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>hadoop01:2181, hadoop02:2181, hadoop03:2181</value>
        </property>
    </configuration>

    7.修改regionservers

     告诉这个regionservers脚本我们哪些机器用作regionserver节点:

    hadoop01
    hadoop02
    hadoop03

    8.创建backup-masters文件

    由于hbase-env.sh配置文件中关于Hbase备选Master设置如下:

    所以我们需要参加一个“backup-masters文件”(这个名字要和hbase-env.sh配置文件中设置的保持一致),我们设置hadoop02作为备选Master节点:

    hadoop02

    9.拷贝hadoop的配置文件到HBase[重要]

    将hadoop的/root/apps/hadoop/etc/hadoop/目录下面的hdfs-site.xml和core-site.xml这两个配置文件拷贝到HBase的/root/apps/hbase-1.2.1/conf目录下:

    [root@hadoop01 hadoop]# cp hdfs-site.xml core-site.xml /root/apps/hbase-1.2.1/conf/

    10.将配置后的hbase目录拷贝到其他节点

    在hadoop01上分别执行如下命令,将hadoop01上的hbase-1.2.1目录分别拷贝到hadoop02和hadoop03的相同目录下:

    scp -r hbase-1.2.1/  hadoop02:$PWD
    scp -r hbase-1.2.1/  hadoop03:$PWD

    11.同步3台机器的时间

    我们在使用HDFS的时候经常会出现一些莫名奇妙的问题,通常可能是由于多台服务器的时间不同步造成的。因为它要经常去分析一些时间戳、版本或者超时时间等,如果多台服务器的时间差的太远,可能会导致一些误判。

    有两种方式来同步多台服务器的时间:

    (1)在每台服务器上开启时间同步的进程,通过网络时间服务器进行同步;

    (2)如果你的电脑不能联网,可以将多台服务器的时间手动改成一致的;

    我们下面使用第二种方式来设置,使用“date –s”命令来同步时间:

    12.启动Hbase集群

    在启动Hbase集群之前,确保hdfs集群和zookeeper集群都已经启动成功。

    我们打算让hadoop01来做Hbase的Master节点,所以我们在hadoop01上执行启动Hbase的命令“bin/start-hbase.sh”,并使用jps来查看进程,可以看到HMaster进程和HRegionServer两个进程:

    在Hadoop02机器上可以看到HMaster(备用Master)和HRegionServer进程:

    在hadoop03机器上可以看到HRegionServer进程:

    打开浏览器访问:http://hadoop01:16010/

    可以看到hadoop01是Master节点:

     

    在浏览器中访问:http://hadoop02:16010/

    可以看到hadoop02是备用Master节点:

    在浏览器中访问:http://hadoop01:16030

    可以看到hadoop01也是RegionServer节点:

    在浏览器中访问:http://hadoop02:16030/

    可以看到hadoop02也是RegionServer节点:

    在浏览器中访问:http://hadoop03:16030/

    可以看到hadoop03也是RegionServer节点:

    12.测试一下Hbase集群的高可用

    尝试将hadoop01上的HMaster进程kill掉,然后再通过浏览器观察,看hadoop02是否由原来的备用Master转成Master:

     

    在浏览器中已经无法访问http://hadoop01:16010/

    在浏览器中访问http://hadoop02:16010/ 可以看到hadoop02从原来的BackupMaster变成了Master节点,接管了原来hadoop01的工作:

    使用如下命令在hadoop01上重新启动一个Hbase的Master进程:

    [root@hadoop01 hbase-1.2.1]# bin/hbase-daemon.sh start master

    再在浏览器中访问:http://hadoop01:16010/ ,可以看到hadoop01自动成为备用Master节点:

  • 相关阅读:
    Babelfish
    【动态规划】货币面值
    contest 1.18
    contest 1.17
    contest 1.16
    contest 1.15
    contest 1.14
    contest 1.13
    contest 12.31
    [cf]Round #529 (Div. 3)
  • 原文地址:https://www.cnblogs.com/jun1019/p/6260240.html
Copyright © 2011-2022 走看看