Hadoop HA部署流程

Hadoop HA模式部署

​ 本节点主要介绍安装Hadoop HA模式的主要步骤。本次实训使用三个节点完成集群的搭建,具体集群规划如下所示:

主机名masterslaves1slaves2
HDFSNameNode
DataNode
NameNode
DataNode
DataNode
YARNNodeManagerrResourceManager
NodeManager
ResourceManager
NodeManager

​ 在安装Hadoop HA模式,我们需要完成一些准备工作,包括网络配置、关闭防火墙、安装SSH和安装JDK环境、Zookeeper组件安装等。

一、网络配置

态分配的IP地址是临时的,它会在一定时间内释放该IP地址供其他机器使用,因此使用该方式获取的IP地址不是固定的,这样会导致集群不稳定。因此我们需要设置为静态IP,具体操作如下:

  1. 打开【/etc/sysconfig/network-scripts/ifcfg-ens33】文件。

    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    
  2. 该文件为网卡配置文件,对该文件做以下修改:

    BOOTPROTO="static"
    

    打开虚拟机【编辑】->【虚拟网络编辑器】,查看VMnet8网卡的子网IP地址。

    在这里插入图片描述
    点击【NAT设置】界面,查看网关IP地址。
    在这里插入图片描述

再向ifcfg-ens33添加以下内容:

IPADDR=192.168.80.160	#前3个数必须与网关IP的前3个数必须一致,最后一个数则随机填入1-255的数字,组成新的IP地址,该IP必须是未被占用的。
GATEWAY=192.168.80.2	#输入VMnet8网关IP地址
DNS1=114.114.114.114

注意:此处每台机器节点配置不一样,大家先进行子网IP查询,再添加以上内容。

  1. 重启网络
systemctl restart network
  1. 网络测试,尝试连接百度地址,如果能正常连接成功,则表示网络配置完成。
ping www.baidu.com

在这里插入图片描述

二、关闭防火墙和SELinux

注意:这个步骤只是为了我们学习方便,在实际工作中绝对不可以关闭防火墙,只能在防火墙配置需要开放的端口即可。

  1. 查看当前防火墙状态

    systemctl status firewalld.service
    

    CentOS 7默认是开机启动防火墙。因此我们要关闭防火墙并停止开启自动启动防火墙设置。

    在这里插入图片描述

  2. 关闭当前防火墙

systemctl stop firewalld.service
  1. 关闭防火墙的开机自启
systemctl disable firewalld
  1. 关闭后再查看防火墙状态。
systemctl status firewalld.service

在这里插入图片描述

如果防火墙状态变为Inactive(dead)状态,则表示防火墙关闭成功。

关闭完防火墙后,我们即可使用XShell工具连接。

  1. Linux有一个安全模块:SELinux,用以限制用户和程序的相关权限,来确保系统的安全稳定。SELinux的配置同防火墙一样,非常复杂,课程中不多涉及,后续视情况可以出一章SELinux的配置课程。在当前,我们只需要关闭SELinux功能,避免导致后面的软件运行出现问题即可,

    修改/etc/sysconfig/selinux文件

    vim /etc/sysconfig/selinux
    

    修改文件内容。

    #将第7行的SELINUX=enforcing改为,保存退出后,重启虚拟机即可,千万要注意disabled单词不要写错,不然无法启动系统
    SELINUX=disabled
    

三、安装JDK1.8环境

​ 后续的大数据集群软件,多数是需要Java运行环境的,所以我们为每一台机器都配置JDK环境。

  1. 从Java官网中下载JDK1.8安装包。

  2. 上传JDK安装包到CentOS虚拟机。

    创建一个目录/root/module,专门存放软件安装包

    mkdir /root/module
    

    使用XFTP工具上传JDK安装包到/root/module目录下。

  3. 解压JDK安装包。

    cd /root/module
    tar -zxvf jdk-8u391-linux-x64.tar.gz -C /usr/local/
    
  4. 更改jdk目录名字

    cd /usr/local/
    mv jdk1.8.0_391 jdk1.8
    
  5. 配置环境变量,编辑/etc/profile文件,将JDK路径添加到PATH环境变量中。

    vim /etc/profile
    

    在/etc/profile文件末端添加以下内容

    #JAVA HOME
    export JAVA_HOME=/usr/local/jdk1.8
    export PATH=$PATH:$JAVA_HOME/bin
    
  6. 刷新环境变量

    source /etc/profile
    
  7. 验证JDK是否生效

    java -verison
    

    在这里插入图片描述

    出现Java版本号信息,则证明JDK安装完成。

四、复制CentOS镜像

安装集群化软件,首要条件就是要有多台Linux服务器可用。我们可以使用VMware提供的克隆功能,将我们的虚拟机额外克隆出3台来使用。

  1. 首先,关闭当前CentOS系统虚拟机

  2. 在VMWare工具中新建文件夹,命名为:Hadoop集群,将master机器拖到Hadoop集群文件夹中。

    在这里插入图片描述

  3. 克隆master节点。鼠标右键点击【master】节点,选择【管理】->【克隆】进入虚拟机克隆管理界面。

    在这里插入图片描述

    克隆虚拟机当前状态。

    在这里插入图片描述

    选择【创建完整克隆】,虚拟机名称为slaves1,设置slaves1虚拟机的保存路径。点击【完成】。

    在这里插入图片描述

  4. 重复以上操作,克隆出第二个节点:slaves2,并将slaves1与slaves2放到Hadoop集群文件夹中。
    在这里插入图片描述

  5. 开启slaves1节点,修改slaves1节点的配置。

    ① 修改slaves1节点的主机名为slaves1

    hostnamectl set-hostname slaves1
    

    ② 修改slaves1节点的固定ip为:192.168.80.161**(注意IP地址前3个数需跟VMnet8 IP网关地址前3个数必须一致)**

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    

    修改IPADDR的值

    IPADDR=192.168.80.161
    
  6. 开启slaves2节点,修改slaves2节点的配置。

    按照第5步步骤,将slaves2节点的主机名设置为slaves2,ip设置为:192.168.80.162**(注意IP地址前3个数需跟VMnet8 IP网关地址前3个数必须一致)**

  7. 添加主机名映射

    修改3台节点的/etc/hosts文件。

    vim /etc/hosts
    

    在文件末端添加以下内容

    192.168.80.160	master
    192.168.80.161	slaves1
    192.168.80.162	slaves2
    

五、 配置SSH免密登录

​ 后续安装的集群,都需要远程登录以及远程执行命令,我们可以简单起见,配置三台Linux服务器之间的免密码互相SSH登录。

  1. 在每一台机器执行

    ssh-keygen -t rsa
    

    一直回车确认即可。

  2. 在每一台机器节点执行一下指令,

    ssh-copy-id master
    ssh-copy-id slaves1
    ssh-copy-id slaves2
    #进行免密操作时会询问是否继续连接,输入“yes”后,再输入登录密码完成操作。
    
  3. 执行完毕后,使用SSH测试远程登录,如果三台机器能相互登录,且无须输入密码,即代表免密配置成功。

    ssh master		#远程登录master节点
    exit			#退出登录
    ssh slaves1		#远程登录slaves1节点
    exit			#退出登录
    ssh slaves2		#远程登录slaves2节点
    exit			#退出登录
    

六、配置Zookeeper集群

​ ZooKeeper 在 Hadoop HA 模式中发挥了关键的协调、状态管理和故障处理的作用,大大提高了 Hadoop 集群的可用性和可靠性。以下为Zookeeper配置步骤。

  1. 下载Zookeeper组件。

    从Zookeeper官网中下载Zookeeper3.5.10版本的安装包,下载链接为:Index of /dist/zookeeper/zookeeper-3.5.10 (apache.org)

  2. 使用XFTP工具上传安装包到master节点的/root/module目录下

  3. 解压ZooKeeper到/usr/local目录下

    cd /root/module
    tar -zxvf apache-zookeeper-3.5.10-bin.tar.gz -C /usr/local
    
  4. 切换到/usr/local/文件夹,将zookeeper-3.4.6重命名为zookeeper

    cd /usr/local
    mv apache-zookeeper-3.5.10-bin zookeeper
    
  5. 配置Zookeeper环境变量

    vim /etc/profile
    

    在最下面添加以下内容

    export ZOOKEEPER_HOME=/usr/local/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    
  6. 重新加载环境变量,使环境变量生效。

    source /etc/profile
    
  7. 将/usr/local/zookeeper/conf/zoo_sample.cfg重命名为zoo.cfg(ZooKeeper的配置文件)

    cd /usr/local/zookeeper/conf/
    mv zoo_sample.cfg zoo.cfg
    
  8. 修改Zookeeper的配置文件zoo.cfg

    vi zoo.cfg
    

    修改dataDir内容:

    dataDir=/usr/local/zookeeper/zkdata
    

    在文末添加以下内容:

    server.1=master:2888:3888
    server.2=slaves1:2888:3888
    server.3=slaves2:2888:3888
    
  9. 新建/usr/local/zookeeper/zkdata,在该目录下新建文件myid

    cd /usr/local/zookeeper/
    mkdir zkdata
    cd zkdata
    echo 1 >> myid
    
  10. 复制zookeeper目录到slaves1与slaves2节点

    scp -r /usr/local/zookeeper root@slaves1:/usr/local
    scp -r /usr/local/zookeeper root@slaves2:/usr/local
    
  11. 修改slaves1中的myid文件为2,slaves2中的myid的节点为3

    #在slaves1节点中操作
    cd /usr/local/zookeeper/zkdata/
    echo 2 > myid
    #在slaves2节点中操作
    cd /usr/local/zookeeper/zkdata/
    echo 3 > myid
    
  12. 配置slaves1与slaves2的Zookeeper的环境变量,并使其生效。

    #在slaves1与slaves2节点中操作
    vim /etc/profile
    

    在文件末端添加以下内容:

    export ZOOKEEPER_HOME=/usr/local/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    

    重新加载环境变量,使环境变量生效

    source /etc/profile
    

七、 Hadoop集群部署

  1. 下载Hadoop安装包。打开浏览器,在浏览器地址栏中输入以下地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/。

  2. 选择hadoop-3.1.3.tar.gz 版本下载hadoop安装包。

在这里插入图片描述
下载完毕后,使用XFTP工具将安装包上传到master节点的/root/module目录下。

  1. 解压hadoop安装包到/usr/local目录下

    cd /root/module
    #解压Hadoop压缩包
    tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local/
    
    #更改hadoop目录名称
    mv /usr/local/hadoop-3.1.3 /usr/local/hadoop
    
  2. 配置环境变量

    vim /etc/profile
    

    在/etc/profile文件末端添加Hadoop路径到环境变量中。

    #HADOOP ENV
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    

    保存退出,刷新环境变量。

    source /etc/profile
    
  3. Hadoop的配置文件要修改的地方很多,请细心!!!!进入到/usr/local/hadoop/etc/hadoop文件夹中,配置文件都在这里

    cd /usr/local/hadoop/etc/hadoop
    

    ① 修改core-site.xml文件

    vim core-site.xml
    

    <configuration>标签之间添加fs.defaultFS属性,具体配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License. See accompanying LICENSE file.
    -->
    
    <!-- Put site-specific property overrides in this file. -->
    <configuration>
       <!--指定文件系统的名称-->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://ggb</value>
        </property>
    	<!--配置Hadoop运行产生的临时数据存储目录-->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:///usr/local/hadoop/tmp</value>                 
            <description>Abase for other temporary directories.</description>
        </property>
    	<!--指定自动故障转移的集群-->
        <property>
            <name>ha.zookeeper.quorum</name>
            <value>master:2181,slaves1:2181,slaves2:2181</value>
        </property>
    </configuration>
    

    ② 修改hdfs-site.xml文件

    vim hdfs-site.xml
    

    具体配置内容如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License. See accompanying LICENSE file.
    -->
    
    <!-- Put site-specific property overrides in this file. -->
    
    <configuration>
        <!--配置HDFS块的副本数(全分布式默认副本为3,最大副本512)-->
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
    	<!--配置HDFS元数据的存储目录-->
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:///usr/local/hadoop/tmp/dfs/name</value>
        </property>
    	<!--配置HDFS真正的数据内容(数据块)的存储目录-->
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:///usr/local/hadoop/tmp/dfs/data</value>
        </property>
    	<!--配置虚拟服务名-->
        <property>
            <name>dfs.nameservices</name>
            <value>ggb</value>
        </property>
    	<!--为虚拟服务指定两个NameNode(目前每个服务器最多两个NameNode)-->
        <property>
            <name>dfs.ha.namenodes.ggb</name>
            <value>nn1,nn2</value>
        </property>
    	<!--配置NameNode(nn1)的RPC地址-->
        <property>
            <name>dfs.namenode.rpc-address.ggb.nn1</name>
            <value>master:9000</value>
        </property>
    	<!--配置NameNode(nn2)的RPC地址-->
        <property>
            <name>dfs.namenode.rpc-address.ggb.nn2</name>
            <value>slaves1:9000</value>
        </property>
    	<!--配置NameNode(nn1)的HTTP地址-->
        <property>
            <name>dfs.namenode.http-address.ggb.nn1</name>
            <value>master:9870</value>
        </property>
    	<!--配置NameNode(nn2)的HTTP地址-->
        <property>
            <name>dfs.namenode.http-address.ggb.nn2</name>
            <value>slaves1:9870</value>
        </property>
    	<!--配置JournalNode通信地址-->
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://master:8485;slaves1:8485;slaves2:8485/ggb</value>
        </property>
    	<!--配置NameNode出现故障时,启用备用NameNode的代理-->
        <property>
            <name>dfs.client.failover.proxy.provider.ggb</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
    	<!--配置自动故障转移-->
        <property>
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
    	<!--配置防止脑裂的手段,shell脚本-->
        <property>
            <name>dfs.ha.fencing.methods</name>
            <value>shell(/bin/true)</value>
        </property>
    </configuration>
    

    ③ 修改mapred-site.xml文件

    vim mapred-site.xml
    

    具体配置内容如下:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License. See accompanying LICENSE file.
    -->
    
    <!-- Put site-specific property overrides in this file. -->
    
    <configuration>
        <!-- 指定MapReduce程序运行在Yarn上 -->
        <property>
        	<name>mapreduce.framework.name</name>
        	<value>yarn</value>
      	</property>
    
      	<property>
        	<name>mapreduce.jobhistory.address</name>
        	<value>master:10020</value>
      	</property>
      	<property>
        	<name>mapreduce.jobhistory.webapp.address</name>
        	<value>master:19888</value>
      	</property>
    	<property>
      		<name>yarn.app.mapreduce.am.env</name>
      		<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    	</property>
    	<property>
      		<name>mapreduce.map.env</name>
      		<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    	</property>
    	<property>
      		<name>mapreduce.reduce.env</name>
      		<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    	</property>
    </configuration>
    

    ④ 修改yarn-site.xml文件

    vim yarn-site.xml
    

    具体配置文件如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
        http://www.apache.org/licenses/LICENSE-2.0
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License. See accompanying LICENSE file.
    -->
    <configuration>
    	<!-- 开启RM高可用 -->
        <property>
            <name>yarn.resourcemanager.ha.enabled</name>
            <value>true</value>
        </property>
    
        <!-- 指定RM的cluster id -->
        <property>
            <name>yarn.resourcemanager.cluster-id</name>
            <value>yarn-ha</value>
        </property>
    
        <!-- 指定RM的名字 -->
        <property>
            <name>yarn.resourcemanager.ha.rm-ids</name>
            <value>rm1,rm2</value>
        </property>
    
        <!-- 分别指定RM的地址 -->
        <property>
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>slaves1</value>
        </property>
    
        <property>
            <name>yarn.resourcemanager.hostname.rm2</name>
            <value>slaves2</value>
        </property>
    
        <!-- 指定zk集群地址 -->
        <property>
            <name>yarn.resourcemanager.zk-address</name>
            <value>master:2181,slaves1:2181,slaves2:2181</value>
        </property>
    
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    </configuration>
    

    ⑤ 修改workers文件

    vim workers
    

    在workers文件添加以下内容

    master
    slaves1
    slaves2
    

    ⑥ 修改hadoop-env.sh

    vim hadoop-env.sh
    

    在文件开头添加以下内容

    export JAVA_HOME=/usr/local/jdk1.8
    
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    export YARN_PROXYSERVER_USER=root
    
  4. 将配置好的hadoop目录复制到slaves1,slaves2节点下。

    scp -r /usr/local/hadoop root@slaves1:/usr/local/
    scp -r /usr/local/hadoop root@slaves2:/usr/local/
    
  5. 配置slaves1、slaves2节点的hadoop环境变量。

    分别在slaves1与slaves2节点运行以下指令:

    vim /etc/profile
    

    在文件末端添加以下内容:

    #HADOOP ENV
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    

    保存退出,并重新加载环境变量

    source /etc/profile
    
  6. 启动Zookeeper集群

    分别在master、slaves1、slaves2节点运行以下指令

    zkServer.sh start
    
  7. 启动ournal Node集群

    分别在master、slaves1、slaves2节点运行以下指令

    hdfs --daemon start journalnode
    
  8. 格式化Zookeeper集群

    在master节点运行以下命令:

    hdfs zkfc -formatZK
    
  9. 格式化NameNode

    在master节点运行以下命令:

    hdfs namenode -format
    
  10. 启动master节点的namenode进程

    在master节点运行以下指令:

    hdfs --daemon start namenode
    
  11. 同步 master节点元数据到 salves1上

    在slaves1节点运行以下指令:

    hdfs namenode -bootstrapStandby
    
  12. 启动slaves1节点上的namenode进程

    在slaves1节点运行以下指令:

    hdfs --daemon start namenode
    
  13. 启动集群中所有的DataNode

    在master节点运行以下指令

    start-dfs.sh
    
  14. 启动ZKFC进程

    在master与slaves1节点运行以下指令

    hdfs --daemon start zkfc
    
  15. 验证故障转移,在master节点运行以下指令:

    hdfs --daemon stop namenode
    
  16. 启动Yarn集群,在master节点运行以下指令:

    start-yarn.sh
    
  17. 在任意节点运行以下节点查看resourceManager的状态

    yarn rmadmin -getServiceState rm1	#active
    yarn rmadmin -getServiceState rm1	#standby
    

fs namenode -format
```

  1. 启动master节点的namenode进程

    在master节点运行以下指令:

    hdfs --daemon start namenode
    
  2. 同步 master节点元数据到 salves1上

    在slaves1节点运行以下指令:

    hdfs namenode -bootstrapStandby
    
  3. 启动slaves1节点上的namenode进程

    在slaves1节点运行以下指令:

    hdfs --daemon start namenode
    
  4. 启动集群中所有的DataNode

    在master节点运行以下指令

    start-dfs.sh
    
  5. 启动ZKFC进程

    在master与slaves1节点运行以下指令

    hdfs --daemon start zkfc
    
  6. 验证故障转移,在master节点运行以下指令:

    hdfs --daemon stop namenode
    
  7. 启动Yarn集群,在master节点运行以下指令:

    start-yarn.sh
    
  8. 在任意节点运行以下节点查看resourceManager的状态

    yarn rmadmin -getServiceState rm1	#active
    yarn rmadmin -getServiceState rm1	#standby
    

至此我们的Hadoop高可靠部署完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值