Hadoop学习笔记之HA集群安装部署

1 运行环境

1.1 软件环境

  • 四个节点
  • 64位CentOS 7.0
  • JVM:预装64位JDK1.8及以上版本

1.2 IP与hostname设置

IP HOSTNAME
192.168.36.134 hadoop01
192.168.36.135 hadoop02
192.168.36.136 hadoop03
192.168.36.138 hadoop04

2 安装准备

2.1 准备虚拟机

  • 准备四个虚拟机节点

修改主机名

  • 四个节点分别使用root用户修改/etc/hostname文件,修改里面的内容为对应的主机名
  • 主机名分别为 hadoop01, hadoop02, hadoop03, hadoop04
vi /etc/hostname

2.2 关闭防火墙

  • 分别将四个节点的防火墙都关闭,命令如下
systemctl stop firewalld.service    //关闭防火墙
systemctl diable firewalld.service  //关闭防火墙开机启动
systemctl status firewalld   //查看防火墙状态

2.3 修改hosts列表

  • 分别修改四个节点上的 /etc/hosts 文件,添加以下内容,四个节点都一样
  • 添加完后使用 ping [hostname] 测试配置是否成功
vi /etc/hosts

192.168.36.134 hadoop01
192.168.36.135 hadoop02
192.168.36.136 hadoop03
192.168.36.138 hadoop04

ping hadoop04

2.4 配置时钟同步

  • 使四个节点的时钟同步
//查看时间命令
[lan@hadoop01 ~]$ date
  • 如果时间不同步,可通过以下命令同步网络时间
//同步网络时间
ntpdate time.nuri.net

2.5 配置免秘钥登录

  • lan用户登录hadoop01节点,执行以下指令生成一对秘钥
[lan@hadoop01 ~]$ ssh-keygen -t rsa
//回车——回车——回车
  • 登录hadoop02节点生成秘钥,并传给hadoop01节点
[lan@hadoop02 ~]$ ssh-keygen -t rsa
[lan@hadoop02 ~]$ scp ~/.ssh/id_rsa.pub lan@hadoop01:~/.ssh/id_rsa.pub02
  • 登录hadoop03节点生成秘钥,并传给hadoop01节点
[lan@hadoop03 ~]$ ssh-keygen -t rsa
[lan@hadoop03 ~]$ scp ~/.ssh/id_rsa.pub lan@hadoop01:~/.ssh/id_rsa.pub03
  • 登录hadoop04节点生成秘钥,并传给hadoop01节点
[lan@hadoop04 ~]$ ssh-keygen -t rsa
[lan@hadoop04 ~]$ scp ~/.ssh/id_rsa.pub lan@hadoop01:~/.ssh/id_rsa.pub04
  • 登录hadoop01节点,组合所有公钥
  • 注意修改文件权限
[lan@hadoop01 ~]$ cd ~/.ssh
[lan@hadoop01 .ssh]$ cat id_rsa.pub >> authorized_keys
[lan@hadoop01 .ssh]$ cat id_rsa.pub02 >> authorized_keys
[lan@hadoop01 .ssh]$ cat id_rsa.pub03 >> authorized_keys
[lan@hadoop01 .ssh]$ cat id_rsa.pub04 >> authorized_keys
[lan@hadoop01 .ssh]$ chmod 600 authorized_keys //修改文件权限
  • 在hadoop01上分发秘钥文件给其他节点
[lan@hadoop01 .ssh]$ scp ~/.ssh/authorized_keys lan@hadoop02:~/.ssh/
[lan@hadoop01 .ssh]$ scp ~/.ssh/authorized_keys lan@hadoop03:~/.ssh/
[lan@hadoop01 .ssh]$ scp ~/.ssh/authorized_keys lan@hadoop04:~/.ssh/

//测试免密
ssh hadoop02
  • 注:以上所有登录节点、传输文件过程都需要输入对应节点lan用户的登录秘钥
  • 到此,免密配置成功,所有节点都可以相互之间免密登录

2.6 安装jdk

  • 注:因为hadoop所有组件都是在JVM环境中运行,所以在安装其他组件之前必须首先安装JDK

  • jdk版本推荐安装1.8,可去官网自行下载

  • 下载后上传至服务器用户家目录下

  • 解压,将JDK文件解压,放到/usr/java/目录下,使用root用户

[root@hadoop01 ~]# mkdir /usr/java/
[root@hadoop01 ~]# mv /home/lan/jdk-8u144-linux-x64.tar.gz /usr/java
[root@hadoop01 ~]# cd /usr/java/
[root@hadoop01 ~]# tar -zxvf jdk-8u144-linux-x64.tar.gz
  • 配置环境变量,使用lan用户
[lan@hadoop01 ~]$ vim .bash_profile
  • 添加以下内容
export JAVA_HOME=/usr/java/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
  • 测试
[lan@hadoop01 ~]$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
  • 其他节点也要按如上步骤进行安装配置

3 安装其他组件

3.1 安装zookeeper

  • 注:zookeeper安装只在hadoop01进行配置,其他节点通过hadoop01分发已配置好的安装目录进行配置,这样操作可以避免重复
  1. 解压软件包,将zookeeper-3.4.6.tar.gz解压缩
[lan@hadoop01 ~]$ tar -zxvf zookeeper-3.4.6.tar.gz
  1. 修改配置文件
  • 修改zookeeper配置文件/home/lan/zookeeper-3.4.6/conf/zoo_sample.cfg重命名为zoo.cfg
  • 进入到conf目录下,执行:
[lan@hadoop01 ~]$ mv zoo_sample.cfg zoo.cfg
  • 修改zoo.cfg添加如下内容
[lan@hadoop01 ~]$ vi zoo.cfg

server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop04:2888:3888
  1. 创建相关目录
  • 创建/tmp/zookeeper目录,并在此目录下创建myid文件
[lan@hadoop01 ~]$ mkdir /tmp/zookeeper
[lan@hadoop01 ~]$ cd /tmp/zookeeper
[lan@hadoop01 ~]$ vim myid
  • 在文件中写入数字
1
  1. 分发zookeeper软件包
[lan@hadoop01 ~]$ scp -r ~/zookeeper-3.4.6 lan@hadoop02:~/
[lan@hadoop01 ~]$ scp -r ~/zookeeper-3.4.6 lan@hadoop04:~/
  1. 修改myid文件
ssh lan@hadoop02
mkdir /tmp/zookeeper/
vim /tmp/zookeeper/myid
//修改文件中数字为2
2

ssh lan@hadoop04
mkdir /tmp/zookeeper/
vim /tmp/zookeeper/myid
//修改文件中数字为3
3
  1. 分别在hadoop01、hadoop02、hadoop04节点上修改环境变量,添加以下行
export ZOOKEEPER_HOME=/home/lan/zookeeper-3.4.6
export PATH=$ZOOKEEPER_HOME/bin:$PATH
  1. 启动zookeeper
  • 分别在hadoop01、hadoop02、hadoop04上执行,这里以hadoop01做示例
[lan@hadoop01 ~]$ zkServer.sh start
  • 查看进程
[lan@hadoop01 ~]$ jps
17683 QuorumPeerMain
17701 Jps
  • 在三个节点上都启动了zookeeper后,可查看zookeeper状态
[lan@hadoop01 ~]$ zkServer.sh status
JMX enabled by default
Using config: /home/lan/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower

3.2 安装hadoop

  • hadoop部分的配置分为两部分hdfs和yarn

3.2.1 HDFS

  1. 上传并解压安装包(这里只在hadoop01进行,其他节点由hadoop01节点进行分发配置)
  • 将hadoop-2.7.7.tar.gz安装包上传至服务器
  • 解压安装包
[lan@hadoop01 ~]$ tar -zxvf hadoop-2.7.7.tar.gz
  1. 修改配置文件
  • 修改core-site.xml
[lan@hadoop01 ~]$ vim ~/hadoop-2.7.7/etc/hadoop/core-site.xml
  • 修改为以下内容
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://beh</value>
    <final>false</final>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/lan/hadoopdata</value>
    <final>false</final>
  </property>
  <!-- 设置zookeeper参与选举的节点 -->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop01:2181,hadoop02:2181,hadoop04:2181</value>
    <final>false</final>
  </property>
</configuration>
  • 修改hdfs-site.xml
[lan@hadoop01 ~]$ vim ~/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
  • 修改为以下内容
<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>beh</value>
    <final>false</final>
  </property>
  <!-- 指定双namenode各自的代称 -->
  <property>
    <name>dfs.ha.namenodes.beh</name>
    <value>nn1,nn2</value>
    <final>false</final>
  </property>
  <!-- 指定nn1节点地址 -->
  <property>
    <name>dfs.namenode.rpc-address.beh.nn1</name>
    <value>hadoop01:9000</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.http-address.beh.nn1</name>
    <value>hadoop01:50070</value>
    <final>false</final>
  </property>
  <!-- 指定nn2节点地址 -->
  <property>
    <name>dfs.namenode.rpc-address.beh.nn2</name>
    <value>hadoop02:9000</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.http-address.beh.nn2</name>
    <value>hadoop02:50070</value>
    <final>false</final>
  </property>
  <!-- 指定zk集群地址 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop04:8485/beh</value>
    <final>false</final>
  </property>
  <!-- 开启故障自动转换 -->
  <property>
    <name>dfs.ha.automatic-failover.enabled.beh</name>
    <value>true</value>
    <final>false</final>
  </property>
  <!-- 导入高可用所需jar包 -->
  <property>
    <name>dfs.client.failover.proxy.provider.beh</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/lan/metadata/journal</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
    <final>false</final>
  </property>
  <!-- 配置免密私钥所在目录 -->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/lan/.ssh/id_rsa</value>
    <final>true</final>
  </property>
  <!-- 配置datanode节点个数 -->
  <property>
    <name>dfs.replication</name>
    <value>2</value>
    <final>false</final>
  </property>
</configuration>
  • 修改slaves
[lan@hadoop01 ~]$ vim ~/hadoop-2.7.7/etc/hadoop/slaves
  • 修改为以下内容(datanode对应的节点主机名)
hadoop03
hadoop04

3.2.2 YARN

  • 修改mapred-site.xml(此处要将mapred-site.xml.template文件转存为mapred-site.xml,执行cp mapred-site.xml.template mapred-site.xml)
[lan@hadoop01 ~]$ vim ~/hadoop-2.7.7/etc/hadoop/mapred-site.xml
  • 修改为以下内容
<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
</configuration>
  • 修改yarn-site.xml
[lan@hadoop01 ~]$ vim ~/hadoop-2.7.7/etc/hadoop/yarn-site.xml
  • 修改为以下内容
<configuration>
<!-- 开启RM高可用 -->
   <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>
   </property>
   <!-- 指定RM的cluster id -->
   <property>
     <name>yarn.resourcemanager.cluster-id</name>
     <value>beh</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>hadoop01</value>
   </property>
   <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>hadoop02</value>
   </property>
   <!-- 指定zk集群地址 -->
   <property>
     <name>yarn.resourcemanager.zk-address</name>
     <value>hadoop01:2181,hadoop02:2181,hadoop04:2181</value>
   </property>
   <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
   </property>
   <!--开启故障自动切换-->
	<property>
     <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
     <value>true</value>
   </property>
<property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>hadoop01:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>hadoop01:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hadoop01:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>hadoop01:8031</value>
    </property>

<property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>hadoop02:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>hadoop02:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hadoop02:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>hadoop02:8031</value>
    </property>
        
</configuration>
[lan@hadoop01 ~]$ vim ~/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
[lan@hadoop01 ~]$ vim ~/hadoop-2.7.7/etc/hadoop/yarn-env.sh
  • 修改为以下内容
export JAVA_HOME=/usr/java/jdk1.8.8_144

3.2.3 分发配置文件

  • **将以上配置分发至所有节点
[lan@hadoop01 ~]$ scp -r ~/hadoop-2.7.7 lan@hadoop02:~/
[lan@hadoop01 ~]$ scp -r ~/hadoop-2.7.7 lan@hadoop03:~/
[lan@hadoop01 ~]$ scp -r ~/hadoop-2.7.7 lan@hadoop04:~/

3.2.4 启动HDFS

  • 启动journalnode(进程名:JournalNode),哪些节点配置了此项,就在哪些节点启动(hadoop01,hadoop02,hadoop04),命令如下
hadoop-daemon.sh start journalnode
  • 格式化zookeeper,在hadoop01上执行
[lan@hadoop01 ~]$ hdfs zkfs -formatZK
  • 对hadoop01节点进行格式化和启动namenode(进程名:NameNode)
//格式化
[lan@hadoop01 ~]$ hdfs name -format
//启动namenode
[lan@hadoop01 ~]$ hadoop-daemon.sh start namenode
  • 对hadoop02节点进行格式化和启动
//格式化
[lan@hadoop02 ~]$ hdfs namenode -bootstrapStandby
//启动namenode
[lan@hadoop02 ~]$ hadoop-daemon.sh start namenode
  • 在hadoop01和hadoop02上启动zkfc服务(zkfc服务进程名:DFSZKFailoverController):此时hadoop01和hadoop02就会有一个节点变为active状态
[lan@hadoop01 ~]$ hadoop-daemon.sh start zkfc
[lan@hadoop02 ~]$ hadoop-daemon.sh start zkfc
  • 启动datanode(进程名:DataNode):在hadoop01上执行
[lan@hadoop01 ~]$ hadoop-daemons.sh start datanode

3.2.5 验证是否成功

  • 打开浏览器,访问192.168.36.134:50070以及192.168.36.135:50070,将会看到两个namenode,一个是active而另一个是standby
  • 然后kill掉其中active的namenode进程,另一个standby的namenode将会自动转换为active状态
    在这里插入图片描述
    在这里插入图片描述
  • 杀掉hadoop01节点上的namenode进程
[lan@hadoop01 ~]$ jps
17683 QuorumPeerMain
19364 Jps
18487 JournalNode
19179 DFSZKFailoverController
18669 NameNode
[lan@hadoop01 ~]$ kill -9 18669
[lan@hadoop01 ~]$ jps
17683 QuorumPeerMain
18487 JournalNode
19417 Jps
19179 DFSZKFailoverController
  • 原来为standby的节点转换为了active
    在这里插入图片描述
[lan@hadoop01 ~]$ hadoop-daemon.sh start namenode
starting namenode, logging to /home/lan/hadoop-2.7.7/logs/hadoop-lan-namenode-hadoop01.out
[lan@hadoop01 ~]$ jps
19473 NameNode
17683 QuorumPeerMain
18487 JournalNode
19562 Jps
19179 DFSZKFailoverController

在这里插入图片描述

3.2.6 启动yarn

  • 在hadoop01上启动(此脚本将会启动hadoop01上的resourcemanager及所有nodemanager进程)
[lan@hadoop01 ~]$ start-yarn.sh
  • 在hadoop02上启动resourcemanager
[lan@hadoop02 ~]$ yarn-daemon.sh start resourcemanager

3.2.7 验证是否成功

  • 打开浏览器,访问192.168.36.134:8088以及192.168.36.135:8088

在这里插入图片描述
在这里插入图片描述

3.3 关闭集群

  1. 关闭yarn
//先在hadoop01节点关闭
[lan@hadoop01 ~]$ stop-yarn.sh
//再在hadoop02节点关闭resourcemanager
[lan@hadoop02 ~]$ yarn-daemon.sh stop resourcemanager
  1. 关闭HDFS
  • 在hadoop01下执行
[lan@hadoop01 ~]$ stop-dfs.sh
  1. 关闭zkfc
  • 分别在hadoop01和hadoop02节点关闭
[lan@hadoop01 ~]$ hadoop-daemon.sh stop zkfc
[lan@hadoop02 ~]$ hadoop-daemon.sh stop zkfc
  1. 关闭zookeeper
  • 分别在hadoop01、hadoop02和hadoop04节点关闭
[lan@hadoop01 ~]$ zkServer.sh stop
[lan@hadoop02 ~]$ zkServer.sh stop
[lan@hadoop04 ~]$ zkServer.sh stop
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章