Hbase ha高可靠配置(三节点master1,master2,slave)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


为什么要搭建hbase ha?

搭建三节点的HBase HA,可支持自动故障转移,即集群中HMaster进程意外中断后,备用HMaster进程可自动完成切换,不影响用户数据操作。

搭建环境

搭建环境:hadoop3.3.1+hbase2.4.4+zookeeper3.5.10
虚拟机名称:master1, master2, slave 三节点

一、hbase是什么?

HBase是针对谷歌BigTable的开源实现,是一个高可靠,高性能,面向列,可伸缩的分布式是数据库,主要用于存储非结构化和半结构化的松散数据。HBase可以支持超大规模数据存储,它可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。

二、使用步骤

1.安装包准备

1.hadoop-3.3.1.tar.gz
2.hbase-2.4.4-bin.tar.gz
3.apache-zookeeper-3.5.10-bin.tar.gz
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/

安装过程这里不再赘述可以参考我的上两篇文章的安装过程。
Hadoop安装
hbase安装

注意:只看安装过程即可,配置过程可以看下面的。

2.建立虚拟机

代码如下(示例):

  1. 首先先建立三个虚拟机 ,不需要一个一个创建,创建一个然后进行复制
    注意:修改ip 地址,不然会出错。
    在这里插入图片描述
    2.进入虚拟机,并修改各个主机名
    —修改主机名sudo vim /etc/hostname //修改后需要重启虚拟机
    改为桥接模式-查询ip—命令ifconfig—在写入ip如下命令
    —进行三节点互通 //三节点都需配置
    在这里插入图片描述
    3.虚拟机之间可以相互ping通的准备
    Master1
    在这里插入图片描述
    Master2
    在这里插入图片描述
    Slave
    在这里插入图片描述

3.进行环境变量配置

  1. 进行环境配置sudo vim ~/.bashrc
    结束后应使其生效source ~/.bashrc
# jdk
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_341
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=/usr/local/hadoop/bin:$PATH
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}/lin/native
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
# hbase
export HBASE_HOME=/usr/local/hbase
export PATH=${HBASE_HOME}/bin:$PATH
# hive
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
# zookeeper
export ZOOKEEPER_INSTALL=/usr/local/zookeeper/
export PATH=$PATH:$ZOOKEEPER_INSTALL/bin

在这里插入图片描述
在这里插入图片描述
注意:三个节点都需相同配置

4.节点之间ssh免密登录

  1. 设置三个节点ssh免密登录
    Master1 ,master2 可以ping通slave节点
    Master1 和master2节点之间可以互相ping
  2. 下载安装包
    在这里插入图片描述
    本地测试(exit退出)
    在这里插入图片描述
  3. 生成公钥与私钥(一路回车)
    –这个地方的截图忘记了
    –大概方法如下,只需换成不同节点进行执行即可
    在这里插入图片描述
    –进入后一路回车
  4. 密钥传输(注意两个虚拟机都应开着)
cat ./id_rsa.pub >> ./authorized_keys  //将公钥放到autiorized_keys

在这里插入图片描述
–如果一个虚拟机没开则会出现

在这里插入图片描述

scp ~/.ssh/id_rsa.pub hadoop@slave:/home/hadoop   //将meter节点到公钥复制到slave节点中

在这里插入图片描述
–可以查看是否传输成功—进入slave节点的目录下

在这里插入图片描述
5. 此时在slave节点虚拟机上操作
–输入mkdir ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys //密钥加入到slave节点
rm ~/id_rsa.pub //删除密钥文件
在这里插入图片描述
在这里插入图片描述

5.zookeeper安装

  1. 解压路径/usr/local
    在这里插入图片描述
  2. 进入usr/local/zookeeper/conf安装目录下
    –复制zoo_sample.cfg文件并修改名称为zoo.cfg;
    Sudo mv zoo_sample.cfg zoo.cfg
    由于我已经复制过了,这里展示结果。
    在这里插入图片描述
    修改zoo.cfg文件內容
    Sudo vim zoo.cfg
    在这里插入图片描述
    重要:以上配置在三个节点都需配置
    可以利用文件打包发送到各个节点的方式(这里不再赘述)
    在dataDir路径 /usr/local/zookeeper/data 创建myid文件
    Sudo vim myid
    //注意三个节点的myid文件內容不同按照上方配置的数字即可。
    在这里插入图片描述
  3. 测试:三个节点都需启动(注意启动顺序:master1, master2 ,slave)
    在这里插入图片描述
    在这里插入图片描述
    查看状态
    zkServer.sh status
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  4. 出现进程jps //三个节点都有
    在这里插入图片描述
  5. 结束
    zkServer.sh stop

6.Hadoop部署

1.配置Core-site.xml

<configuration>
                <property>
                        <name>fs.defaultFS</name>
                        <value>hdfs://mtcluster</value>
                        <final>true</final>
                </property>
                  <property>
                <name>dfs.nameservices</name>
                <value>mtcluster</value>
                </property>
                <property>
                        <name>hadoop.tmp.dir</name>
                        <value>file:/usr/local/hadoop/tmp</value>
              <description>Abase for other temporary directories.</description>
                </property>
                <property>
                        <name>io.file.buffer.size</name>
                        <value>131072</value>
                </property>
<!--zookeeper server的连接地址 hostname:端口,与zoo.cfg中一致-->
                 <property>
                <name>ha.zookeeper.quorum</name>
                <value>master1:2181,master2:2181,slave:2181</value>
               </property>
                <property>
                        <name>hadoop.proxyuser.spark.hosts</name>
                        <value>*</value>
                </property>
                <property>
                        <name>hadoop.proxyuser.spark.groups</name>
                        <value>*</value>
                </property>

</configuration>

2.配置重要:hdfs-site.xml

<configuration>

        <!-- 完全分布式集群名称 -->
        <property>
                <name>dfs.nameservices</name>
                <value>mtcluster</value>
        </property>
<!-- 集群中NameNode节点都有哪些 ,这里给出了namenode,对后面起namenode进程及zookeeper主备切换都有作用-->
        <property>
                <name>dfs.ha.namenodes.mtcluster</name>
                <value>nn1,nn2</value>
        </property>
         <!-- nn1的RPC通信地址 -->
        <property>
                <name>dfs.namenode.rpc-address.mtcluster.nn1</name>
                <value>master1:9000</value>
        </property>
        <!-- nn2的RPC通信地址 -->
        <property>
                <name>dfs.namenode.rpc-address.mtcluster.nn2</name>
                <value>master2:9000</value>
        </property>

        <!-- nn1的http通信地址 -->
        <property>
                <name>dfs.namenode.http-address.mtcluster.nn1</name>
                <value>master1:50070</value>
        </property>
       <!-- nn2的http通信地址 -->
        <property>
                <name>dfs.namenode.http-address.mtcluster.nn2</name>
                <value>master2:50070</value>
        </property>
        <!--保存FsImage镜像的目录,即namenode里的metadata-->
        <property>
                <name>dfs.namenode.name.dir.mtcluster</name>
                <value>/usr/local/hadoop/tmp/data01/nn</value>
        </property>
         <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master1:8485;master2:8485;slave:8485/mtcluster</value>
</property>

          <!-- journalnode 上用于存放edits日志的目录 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/usr/local/hadoop/tmp/dfs/journalnode</value>
  </property>

       <!--开启HDS HA 实现namenode层的主备切换-->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>dfs.client.failover.proxy.provider.mtcluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
       <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 这里添加shell(bin/true)>可以参看“相关引用”的第三条-->
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence
                        shell(/bin/true)
                </value>
        </property>
        <!-- 关闭权限检查-->
        <property>
                <name>dfs.permissions.enable</name>
                <value>false</value>
        </property>
       <!-- 使用隔离机制时需要ssh无秘钥登录,注意的是这里需要master1 和master2的双向
ssh-->
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>master2:9001</value>
        </property>
        <property>
                <name>dfs.namenode.http-address</name>
                <value>master1:9001</value>
        </property>

        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/hadoop/dfs/data</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <property>
            <name>dfs.webhdfs.enabled</name>
            <value>true</value>
    </property>
</configuration>

3.配置Mapred-site.xml

<configuration>
                <property>
                        <name>mapreduce.framework.name</name>
                        <value>yarn</value>
                </property>
                <property>
                        <name>mapreduce.jobhistory.address</name>
                        <value>master1:10020</value>
                </property>
                <property>
                        <name>mapreduce.jobhistory.webapp.address</name>
                        <value>master1:19888</value>
                </property>
</configuration>

4.配置yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
        <name>yarn.resourcemanager.address</name>
        <value>master1:8032</value>
</property>
<property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master1:8030</value>
</property>
<property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master1:8035</value>
</property>
<property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master1:8033</value>
</property>
<property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master1:8088</value>
 </property>

</configuration>
                      
  1. 修改worker文件(不同的版本可能不同slaves)
    在这里插入图片描述将如上Hadoop配置整体发送给各个节点
tar -xcf ~/hadoop.master.tar.gz ./hadoop
scp hadoop.master.tar.gz hadoop@master2:/home/hadoop 
scp hadoop.master.tar.gz hadoop@slave:/home/hadoop

7.Hbase部署

1.我的解压路径/usr/local
将hadoop中的hdfs-site.xml复制到HBase的conf路径下
sudo cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hbase/conf/
在这里插入图片描述2. 配置hbase-env.sh
在这里我只是查看了,需进入sudo vim hbase-env.sh

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_341
export HBASE_HOME=/usr/local/hbase
export HADOOP_HOME=/usr/local/hadoop
export HBASE_MANAGES_ZK=false
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HADOOP_HOME}/lib/native:/usr/local/lib/
export HBASE_LIBRARY_PATH=${HBASE_LIBRARY_PATH}:/usr/local/lib/:${HADOOP_HOME}/lib/native/

在这里插入图片描述
3.配置hbase-site.xml

<property>
        <name>hbase.rootdir</name>
                <!--mucluster集群名称,与hadoop中的配置保持一致-->
                <value>hdfs://mtcluster/user/hbase</value>
        </property>
        <property>
                <name>zookeeper.znode.parent</name>
                <value>/hbase</value>
        </property>

        <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
          </property>
          <property>
            <name>hbase.tmp.dir</name>
            <value>/home/hadoop/data01/hbase/hbase_tmp</value>
          </property>
          <property>
            <name>hbase.zookeeper.property.dataDir</name>
            <value>/home/hadoop/data01/hbase/zookeeper_data</value>
          </property>
          <property>
            <name>hbase.master.port</name>
            <value>61000</value>
    </property>

       <!--hbase的web页面-->
        <property>
           <name>hbase.master.info.port</name>
           <value>60010</value>
       </property>

          <property>
            <name>hbase.zookeeper.quorum</name>
            <value>master1,master2,slave</value>
          </property>
          <property>
            <name>hbase.zookeeper.property.clientPort</name>
            <value>2181</value>
          </property>
         <property>
            <name>hbase.unsafe.stream.capability.enforce</name>
            <value>false</value>
          </property>
</configuration>

  1. 配置regionservers
    添加
    Master1
    Master2
    Slave
  2. 在/usr/local/hbase/conf路径创建backup-masters
    表示备用master节点,执行的适合,也会在该节点运行HMaster进程
    master2

8.集群启动

  1. -三个节点zk的QuorumPeerMain进程已正常启动
  2. 启动JournalNode服务(三个节点)//注意改变目录
    Master1
    在这里插入图片描述
    Master2
    在这里插入图片描述
    Slave
    在这里插入图片描述
  3. 启动hadoop
    先进行初始化(主节点master1)
    在这里插入图片描述
    进行zkfc初始化
    在这里插入图片描述4. 节点master2操作
    执行fsimge元数据同步命令
    在这里插入图片描述
  4. 启动DFSZKFailoverController进程(master1,master2节点)
    hdfs --daemon start zkfc
    master1
    在这里插入图片描述
    Master2
    在这里插入图片描述
  5. 主节点进行master1
    在这里插入图片描述
    在这里插入图片描述
    Master2
    在这里插入图片描述
  6. Application(job)History进程服务(master1, master2 节点)
    在这里插入图片描述
  7. 在Web页面验证
    Master1
    在这里插入图片描述
    在这里插入图片描述
    9.启动hbase
    在这里插入图片描述在这里插入图片描述
    Master2
    在这里插入图片描述
    在这里插入图片描述

总结

新手创作,文章有什么问题欢迎大佬指点。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值