HBase HA的安装

作者: Davidham3 | 来源:发表于2017-08-21 16:42 被阅读621次

    HBase 简介

    HBase是一个分布式的、面向列的开源数据库,就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,hbase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。它是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

    HBase的常见使用场景如下:
    1、大数据量(100s TB级数据)且有快速随机访问的需求。例如淘宝的交易历史记录,数据量巨大无容置疑,面向普通用户的请求必然要即时响应。
    2、容量的优雅扩展。大数据驱使下的动态扩展系统容量是必须的。
    3、业务场景简单,不需要关系数据库中很多特性(例如交叉列、交叉表,事务,连接等等)。
    4、合理设计rowkey。因为hBase的查询用rowkey是最高效的,也几乎是生产环境下唯一可行的方式。

    在搭建HBase高可用集群时,将HBase的RegionServer部署在HDFS的3个DataNode节点上,HBase的HMaster服务部署在HDFS的2个NameNode(Active和Standby)节点上,部署2个HMaster保证集群的高可用性,防止单点问题。这里使用了独立的ZooKeeper集群,未使用HBase自带的ZooKeeper。

    HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。
    所以这里要配置HBase高可用的话,只需要启动两个HMaster,让Zookeeper自己去选择一个Master Acitve。

    安装过程:

    在master1节点解压hbase安装包
    sudo tar zxvf ./hbase-1.2.6-bin.tar.gz

    进入hbase的conf目录
    cd /usr/local/hbase-1.2.6/conf/

    修改hbase-env.sh
    nano hbase-env.sh添加以下内容

    # 配置JDK安装路径
    export JAVA_HOME=/usr/local/jdk1.7.0_80
    # 配置Hadoop安装路径
    export HADOOP_HOME=/usr/local/hadoop-2.6.5
    # 设置HBase的日志目录
    export HBASE_LOG_DIR=${HBASE_HOME}/logs
    # 使用独立的ZooKeeper集群
    export HBASE_MANAGES_ZK=false
    

    配置hbase-site.xml(注意hbase.rootdir里面myCluster是安装hadoop时设定的
    nano hbase-site.xml
    内容改成下面的:

    <configuration>
            <property>
                <name>hbase.rootdir</name>
                <value>hdfs://mycluster/hbase</value>
            </property>
    
            <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
            </property>
    
            <property>
                <name>hbase.master</name>
                <value>60000</value>
            </property>
    
            <property>
                <name>hbase.tmp.dir</name>
                <value>/usr/local/hbase-1.2.6/tmp</value>
            </property>
    
            <property>
                <name>hbase.zookeeper.quorum</name>
                <value>slave1,slave2,slave3</value>
            </property>
    
            <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/usr/local/zookeeper-3.4.6/data</value>
            </property>
    
            <property>
                <name>hbase.zookeeper.property.clientPort</name>
                <value>2181</value>
            </property>
    
            <property>
                <name>zookeeper.session.timeout</name>
                <value>120000</value>
            </property>
    
            <property>
                <name>hbase.regionserver.restart.on.zk.expire</name>
                <value>true</value>
            </property>
    </configuration>
    

    配置regionservers
    sudo nano regionservers
    修改为以下内容,这里面填写regionservers的hostname

    slave1
    slave2
    slave3
    

    新建backup-masters文件并配置,这里面写的是HMaster的备用节点的hostname
    sudo nano backup-masters
    添加:

    hadoop-master2
    

    创建hbase的缓存文件目录
    cd /usr/local/hbase-1.2.6/
    mkdir tmp

    创建hbase的日志文件目录
    mkdir logs

    改一下权限
    sudo chown -R hadoop-sna .
    sudo chgrp -R hadoop-sna .

    将hbase工作目录同步到集群其它节点

    scp-r /usr/local/hbase-1.2.6/ master2:/usr/local/
    scp-r /usr/local/hbase-1.2.6/ slave1: /usr/local/
    scp-r /usr/local/hbase-1.2.6/ slave2: /usr/local/
    scp-r /usr/local/hbase-1.2.6/ slave3: /usr/local/
    

    在集群各节点上修改用户环境变量
    sudo nano /etc/profile
    添加以下内容:

    export HBASE_HOME=/usr/local/hbase-1.2.6
    export PATH=$PATH:$HBASE_HOME/bin
    

    刷新环境变量
    source /etc/profile

    删除hbase的slf4j-log4j12-1.7.5.jar,解决hbase和hadoop的LSF4J包冲突

    cd /usr/local/hbase-1.2.6/lib
    mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bk
    

    集群启动

    启动zookeeper集群(分别在slave1、slave2和slave3上执行)
    zkServer.sh start
    备注:此命令分别在slave1/slave2/slave3节点启动了QuorumPeerMain。

    启动HDFS(在master1执行)
    start-dfs.sh
    备注:此命令分别在master1/master2节点启动了NameNode和ZKFC,分别在slave1/slave2/slave3节点启动了DataNode和JournalNode。

    启动YARN(在master2执行)
    start-yarn.sh
    备注:此命令在master2节点启动了ResourceManager,分别在slave1/slave2/slave3节点启动了NodeManager。

    启动YARN的另一个ResourceManager(在master1执行,用于容灾)
    yarn-daemon.sh start resourcemanager
    备注:此命令在master1节点启动了ResourceManager。

    启动HBase(在master1执行)
    start-hbase.sh
    备注:此命令分别在master1/master2节点启动了HMaster,分别在slave1/slave2/slave3节点启动了HRegionServer。

    测试

    使用hbase shell进入hbase交互式命令行

    hbase>create 'userinfotable',{NAME=>'username'},{NAME=>'fullname'},{NAME=>'homedir'}
    hbase>put 'userinfotable','r1','username','vcsa'
    hbase>put 'userinfotable','r2','username','sasuser'
    hbase>scan 'userinfotable'
    hbase>disable ‘userinfotable’
    hbase>drop ‘userinfotable’
    hbase>exit
    

    HBase安装完毕

    相关文章

      网友评论

        本文标题:HBase HA的安装

        本文链接:https://www.haomeiwen.com/subject/wtfqdxtx.html