设为首页 加入收藏

TOP

Hbase HA 高可用环境搭建
2019-04-14 13:49:21 】 浏览:94
Tags:Hbase 可用 环境 搭建
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32297447/article/details/79604129
像中间一些无密登录,用户权限等可参考此博客
后面会写一个shell脚本去启动、关闭、重启、查看集群的博客
一、安装前准备
集群主机规划
IP编号安装软件主机名进程
192.168.18.27node1jdk/hadoop/hbase主Master27NameNode、DFSZKFailoverController、ResourceManager、HMaster
192.168.18.28node2jdk/hadoop/hbase备份Master28NameNode、DFSZKFailoverController、ResourceManager、HMaster
192.168.18.29node3jdk/hadoop/zookeeper/hbasedn29DataNode、NodeManager、JournalNode、QuorumPeerMain、HRegionServer
192.168.18.30node4jdk/hadoop/zookeeper/hbasedn30DataNode、NodeManager、JournalNode、QuorumPeerMain、HRegionServer
192.168.18.31node5jdk/hadoop/zookeeper/hbasedn31DataNode、NodeManager、JournalNode、QuorumPeerMain、HRegionServer
笔者使用的HBase的版本为1.2.6
二、HBase 安装配置
node1、2、3、4、5分别安装配置HBase,以node1为例
1-配置hbase-env.sh
在配置 hbase-env.sh 前先在 hbase 的安装目录下创建两个文件,如下
$ mkdir logs   # hbase 的日志目录
$ mkdir pids   # hbase 的pids目录
编辑 conf/ hbase-env.sh 文件,添加如下内容
# 配置JDK安装路径
export JAVA_HOME=/home/hadoop/app/jdk
# 配置hadoop安装路径
export HADOOP_HOME=/home/hadoop/app/hadoop
# 配置hbase日志目录
export HBASE_LOG_DIR=${HBASE_HOME}/logs
# 设置HBase的pid目录
export HBASE_PID_DIR=${HBASE_HOME}/pids
# 使用独立的zookeeper集群(默认为true,即使用hbase 的内置的zk)
export HBASE_MANAGES_ZK=false
注释46、47行 *_OPTS 的两行内容(前面加符号‘#)
2.配置hbase-site.xml
$ vi hbase-site.xml
在 configuration 节点中添加如下内容
<!-- 设置HRegionServers共享目录,用来持久化 HBase
         注意:hbase.rootdir 里面的 HDFS 地址是要跟 Hadoop 的 core-site.xml 里面的 
               fs.defaultFS 的 HDFS 的 IP 地址或者域名、端口必须一致
    -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://cluster/hbase</value>
    </property>

    <!-- 设置HBase 的运行模式(false 表示单机模式,true 表示分布式模式,若为 false,HBase 和 ZooKeeper 会运行在同一个 JVM 中) -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

    <!-- 本地文件系统的临时文件夹(/tmp会在重启时清除) -->
    <property>
        <name>hbase.tmp.dir</name>
        <value>/home/hadoop/app/hbase/tmp</value>
    </property>

    <!-- 指定ZooKeeper集群位置,多个用逗号隔开,默认为localhost -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>dn29,dn30,dn31</value>
    </property>

    <!-- ZooKeeper的zoo.conf中的配置(dataDir所设定的位置),快照的存储位置 -->
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/hadoop/app/zookeeper/data</value>
    </property>

    <!-- ZooKeeper 会话超时。Hbase 把这个值传递给 zk 集群,向它推荐一个会话的最大超时时间 -->
    <property>
        <name>zookeeper.session.timeout</name>
        <value>120000</value>
    </property>

    <!-- 当 regionserver 遇到 ZooKeeper session expired , regionserver 将选择 restart 而不是 abort -->
    <property>
        <name>hbase.regionserver.restart.on.zk.expire</name>
        <value>true</value>
    </property>
3.配置regionservers
写希望运行的全部 Regionserver,一行写一个主机名(和hadoop中的slave文件一样),这里列出的 Server 会随着集群的启动而启动,集群的停止而停止
$ vim regionservers
添加如下内容
dn29dn30
dn31
配置完成后,将上述所做的hbase安装文件及配置远程拷贝到其它节点
4.配置环境变量(每个节点)
$ vi ~/.bashrc # 配置的是用户变量
jdk、hadoop、zookeeper、hbase 所有环境变量如下
# Java Environment Variable
export JAVA_HOME=/home/hadoop/app/jdk

# Hadoop Environment Variable
export HADOOP_HOME=/home/hadoop/app/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

# HBase Environment Variable
export HBASE_HOME=//home/hadoop/app/hbase

# PATH
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HBASE_HOME/bin
$ source ~/bash.rc    # 使环境变量立即生效
三、集群启动关闭
hadoop + zookeeper + hbase 集群启动关闭顺序如下
启动:zookeeper、hadoop、hbase
关闭:hbase、hadoop、zookeeper
1.手动启动关闭集群
启动集群
1).启动zookeeper(node3、node4、node5)
$ zkServer.sh start
2).启动journalnode(node3、node4、node5)
$ hadoop-daemon.sh start journalnode
3).格式化HDFS(node1)
注意:格式化后需要把tmp目录拷贝给node2,不然node2的namenode启动不起来,第一次启动时需要格式化
$ hdfs namenode -format$ scp -r /home/hadoop/app/hadoop/tmp hadoop@master28:/home/hadoop/app/hadoop
4).格式化ZKFC(node1)
注意:第一次启动时需要格式化
$ hdfs zkfc -formatZK
5).启动HDFS(node1)
$ start-dfs.sh
6).启动YARN(node1)
$ start-yarn.sh
7).启动resourcemanager(node2)
node2的resourcemanager需要手动单独启动
$ yarn-daemon.sh start resourcemanager
8).启动主HMaster(node1)
注意:启动hbase之前,必须保证hadoop集群和zookeeper集群是可用的
sh start-hbase.sh
9).启动备份的HMaster
在任意一台选择一台你想作为备份的HMster中启动,笔者将node2作为备份的HMaster
sh hbase-daemon.sh start master
集群在首次启动时麻烦一点,以后再手动启动就不需要格式化hdfs 和 zkfc,之后的启动命令,总结如下
$ zkServer.sh start    # node3、node4、node5
$ start-dfs.sh         # node1
$ start-yarn.sh        # node1
$ yarn-daemon.sh start resourcemanager # node2
$ start-hbase.sh   # node1
$ hbase-daemon.sh start master # node2
关闭集群
$ hbase-daemon.sh stop master  # node2
$ stop-hbase.sh    # node1
$ stop-dfs.sh      # node1
$ stop-yarn.sh     # node1
$ yarn-daemon.sh stop resourcemanager  # node2
$ zkServer.sh stop # node3、node4、node5
不管是否是第一次,集群的关闭都一样,命令如下

使用命令查看进程:netstat -ant | grep 16010


四、测试
启动成功后,输入命令 jps 查看进程,如果和主机规划中的一致则成功,反之失败。如下
***********************************************************
当前 node1 上的进程为: 
2804 DFSZKFailoverController
2503 NameNode
4263 Jps
2923 ResourceManager
3182 HMaster

***********************************************************
当前 node2 上的进程为: 
2587 ResourceManager
2460 DFSZKFailoverController
2860 HMaster
4220 Jps
2381 NameNode

***********************************************************
当前 node3 上的进程为: 
2388 QuorumPeerMain
2516 JournalNode
2622 NodeManager
3118 Jps
2447 DataNode

***********************************************************
当前 node4 上的进程为: 
2354 QuorumPeerMain
2419 DataNode
2599 NodeManager
2488 JournalNode
3356 Jps
2799 HRegionServer

***********************************************************
当前 node5 上的进程为: 
2784 HRegionServer
2582 NodeManager
2410 DataNode
3389 Jps
2351 QuorumPeerMain
2479 JournalNode
使用如下命令进入hbase 的shell 客户端对hbase进行操作,后续博客中会有详细介绍
$ hbase shell  # 进入hbase 的 shell 客户端
$ quit             # 退出,或使用exit
访问 WEB UI 页面查看hbase相关信息(http://master27:16010

高可用集群启动常见问题:

1、启动集群查看进程发现master下缺少HMaster进程,但是dn下有HRegionServer这个进程,这时去master机子下hbse检查logs文件会发现报这个问题:File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation

原有是多次执行./hdfs namenode -format 造成,解决办法手动在各个节点中删除tmp文件夹内容的内容然后从新启动datanode服务就可以启动了



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[OOM] hbase堆外内存溢出底层定位 下一篇hbase自带的测试工具Performancee..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目