Hadoop高可用
实验任务一:Linux 基础环境配置1)查看 ip3个虚拟机都执行 ip a 命令,查看当前IP地址和网络接口2)修改主机名master下执行hostnamectl set-hostname masterbashslave1下执行hostnamectl set-hostname slave1bashslave2下执行hostnamectl set-hostname slave2bash3)修改主机
实验任务一:Linux 基础环境配置
1)查看 ip
3个虚拟机都执行 ip a 命令,查看当前IP地址和网络接口
2)修改主机名
master下执行
hostnamectl set-hostname master
bash
slave1下执行
hostnamectl set-hostname slave1
bash
slave2下执行
hostnamectl set-hostname slave2
bash
3)修改主机映射
三个虚拟机依次执行:
vi /etc/hosts
写入
192.168.26.148 master
192.168.26.149 slave1
192.168.26.150 slave2
4)关闭防火墙
三台都要执行
systemctl stop firewalld
systemctl disable firewalld
查看防火墙状态
systemctl status firewalld
5)设置SSH免密登陆
仅master执行
master输入
ssh-keygen -t rsa
三次回车出现密文如下(大概这个样子,不完全一样)
+--[ RSA 2048]----+
| .o.+. .. |
|. . o.. .E. |
|.o.++ . * . |
|..+o.. + = |
| +. S+ |
| .. . . |
| . |
| |
| |
+-----------------+
ssh-copy-id -i /root/.ssh/id_rsa.pub master
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2
依次输入 yes和root 用户的密码
依次验证
登录一次就及时退出一次(exit)
ssh master
ssh slave1
ssh slave2
6)安装Java JDK环境
执行
mkdir /opt/software/
创建新华三考证指定目录
执行
cp jdk-8u152-linux-x64.tar.gz /opt/software/
把安装包拷贝到新华三考证指定目录/opt/software/
下面开始新华三的JDK实验步骤:
在master主机执行:
a)解压缩JDK包 执行
tar -zxvf /opt/software/jdk-8u152-linux-x64.tar.gz -C /usr/local/src/
b)JDK目录改名
mv /usr/local/src/jdk1.8.0_152/ /usr/local/src/java
c)更改JDK目录拥有者为root用户
chown -R root:root /usr/local/src/java
然后执行ll命令查看拥有者是root用户
d)配置 java 的环境变量
执行
vi /etc/profile
删除最后几行没用的配置参数,新增加以下配置参数
#jdk
export JAVA_HOME=/usr/local/src/java #JAVA_HOME 指向 JAVA 安装目录
export PATH=$PATH:$JAVA_HOME/bin #将 JAVA 安装目录加入 PATH 路径
然后执行
source /etc/profile
使得环境变量生效
e)依次执行以下两个命令:
update-alternatives --install /usr/bin/java java /usr/local/src/java/bin/java 200
update-alternatives --set java /usr/local/src/java/bin/java
实验任务二:ZooKeeper集群安装部署
以下在master主机执行:
实验准备:
cp zookeeper-3.4.8.tar.gz /opt/software/
把ZooKeeper安装包拷贝到新华三考证指定目录/opt/software/
1)解压缩ZooKeeper安装包
tar -zxvf /opt/software/zookeeper-3.4.8.tar.gz -C /usr/local/src/
2)ZooKeeper目录改名
mv /usr/local/src/zookeeper-3.4.8/ /usr/local/src/zookeeper
3)创建 ZooKeeper 数据目录
执行
mkdir /usr/local/src/zookeeper/data
再执行
mkdir /usr/local/src/zookeeper/logs
说明:data 是用来存放数据的,logs 是用来记录日志的
4)配置 ZooKeeper 环境变量
执行
vi /etc/profile
新增加以下配置参数
#zk
export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin
5)修改 zoo.cfg 配置文件
a)复制一个zoo.cfg文件 执行
cp /usr/local/src/zookeeper/conf/zoo_sample.cfg /usr/local/src/zookeeper/conf/zoo.cfg
b)切换到配置文件所在目录
cd /usr/local/src/zookeeper/conf/
c)修改zoo.cfg 执行
vi zoo.cfg
修改并增加以下配置参数:
dataDir=/usr/local/src/zookeeper/data
dataLogDir=/usr/local/src/zookeeper/logs
末尾新增加以下配置参数:
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
6)创建 myid 配置文件
执行
echo 1 > /usr/local/src/zookeeper/data/myid
7)分发JDK
a)执行
scp -r /usr/local/src/java/ root@slave1:/usr/local/src/
b)执行
scp -r /usr/local/src/java/ root@slave2:/usr/local/src/
8)分发 ZooKeeper 集群
a)执行
scp -r /usr/local/src/zookeeper/ root@slave1:/usr/local/src/
b)执行
scp -r /usr/local/src/zookeeper/ root@slave2:/usr/local/src/
9)分发环境变量并使其生效
a)执行
scp /etc/profile root@slave1:/etc/
b)执行
scp /etc/profile root@slave2:/etc/
三台全部执行刷新环境变量
source /etc/profile
使环境变量生效
10)修改另外两个主机的 myid 配置文件
a)在slave1执行
echo 2 > /usr/local/src/zookeeper/data/myid
b)在slave2执行
echo 3 > /usr/local/src/zookeeper/data/myid
11)启动 ZooKeeper 集群
三台依次执行
zkServer.sh start
12)查看 ZooKeeper 集群状态
三台依次执行
zkServer.sh status
执行jps
查看进程QuorumPeerMain
实验任务三:Hadoop HA高可用集群安装部署
实验准备:在master执行
cp hadoop-2.7.1.tar.gz /opt/software/
把Hadoop安装包拷贝到新华三考证指定目录/opt/software/
1)解压缩Hadoop安装包
在master执行
tar -zxvf /opt/software/hadoop-2.7.1.tar.gz -C /usr/local/src/
Hadoop目录改名 执行
mv /usr/local/src/hadoop-2.7.1 /usr/local/src/hadoop
2)配置 Hadoop 环境变量
在master执行
vi /etc/profile
新增加以下配置参数:
#hadoop enviroment
export HADOOP_HOME=/usr/local/src/hadoop #HADOOP_HOME 指向 JAVA 安装目录
export HADOOP_PREFIX=$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 HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3)配置Hadoop环境变量
在master执行
vi /usr/local/src/hadoop/etc/hadoop/hadoop-env.sh
修改hadoop-env.sh 配置文件,末尾新增加以下配置参数:
export JAVA_HOME=/usr/local/src/java
export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop/
记得执行
source /usr/local/src/hadoop/etc/hadoop/hadoop-env.sh
使得Hadoop环境变量生效
4)修改core-site.xml配置文件
在master执行
vi /usr/local/src/hadoop/etc/hadoop/core-site.xml
在<configuration></configuration>
之间添加如下配置参数:
<!-- 指定 hdfs 的 nameservice 为 mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop/tmp</value>
</property>
<!-- 指定 zookeeper 地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<!-- hadoop 链接 zookeeper 的超时时长设置 -->
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>30000</value>
<description>ms</description>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
5)修改hdfs-site.xml配置文件
在master执行
vi /usr/local/src/hadoop/etc/hadoop/hdfs-site.xml
在<configuration> </configuration>
之间添加如下配置参数:
<!-- journalnode 集群之间通信的超时时间 -->
<property>
<name>dfs.qjournal.start-segment.timeout.ms</name>
<value>60000</value>
</property>
<!--指定 hdfs 的 nameservice 为 mycluster,需要和 core-site.xml 中的保持一致
dfs.ha.namenodes.[nameservice id]为在 nameservice 中的每一个 NameNode 设置唯一标示
符。配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。
如果使用"mycluster"作为 nameservice ID,并且使用"master"和"slave1"作为 NameNodes 标
示符 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- mycluster 下面有两个 NameNode,分别是 master,slave1 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>master,slave1</value>
</property>
<!-- master 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.master</name>
<value>master:8020</value>
</property>
<!-- slave1 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.slave1</name>
<value>slave1:8020</value>
</property>
<!-- master 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.master</name>
<value>master:50070</value>
</property>
<!-- slave1 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.slave1</name>
<value>slave1:50070</value>
</property>
<!-- 指定 NameNode 的 edits 元数据的共享存储位置。也就是 JournalNode 列表
该 url 的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
journalId 推荐使用 nameservice,默认端口号是:8485 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/dn</value>
</property>
<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/jn</value>
</property>
<!-- 开启 NameNode 失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 启用 webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- 配置 sshfence 隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
<value>60000</value>
</property>
6)修改mapred-site.xml配置文件
在master执行
cp /usr/local/src/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/src/hadoop/etc/hadoop/mapred-site.xml
在master执行
vi /usr/local/src/hadoop/etc/hadoop/mapred-site.xml
在<configuration> </configuration>
之间添加如下配置参数:
<!-- 指定 mr 框架为 yarn 方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定 mapreduce jobhistory 地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 任务历史服务器的 web 地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
7)修改yarn-site.xml配置文件
在master执行
vi /usr/local/src/hadoop/etc/hadoop/yarn-site.xml
在<configuration> </configuration>
之间添加如下配置参数:
<!-- Site specific YARN configuration properties -->
<!-- 开启 RM 高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定 RM 的 cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</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>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>
<!-- 指定 zk 集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
8) 配置 slaves 配置文件
在master执行
vi /usr/local/src/hadoop/etc/hadoop/slaves
删除localhost并增加以下内容:
master
slave1
slave2
9)为多个服务进程创建存放数据的目录
在master, slave1和slave2都要依次执行以下命令:
mkdir -p /usr/local/src/hadoop/tmp/hdfs/nn
mkdir -p /usr/local/src/hadoop/tmp/hdfs/dn
mkdir -p /usr/local/src/hadoop/tmp/hdfs/jn
mkdir -p /usr/local/src/hadoop/tmp/logs
10)分发 Hadoop安装目录到其他主机
在master依次执行:
scp -r /usr/local/src/hadoop/ root@slave1:/usr/local/src/
scp -r /usr/local/src/hadoop/ root@slave2:/usr/local/src/
再依次在slave1和slave2执行
source /usr/local/src/hadoop/etc/hadoop/hadoop-env.sh
使得Hadoop环境变量生效
11)分发环境变量到其他主机并使其生效
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
再依次在slave1和slave2执行
source /etc/profile
使环境变量生效
12)启动 journalnode 守护进程
在master执行
hadoop-daemons.sh start journalnode
再依次在3个主机执行jsp命命令,查看JournalNode进程应该已经启动
13)格式化NameNode
在master执行格式化命令
hdfs namenode -format
出现提示“Storage directory /usr/local/src/hadoop/tmp/hdfs/nn has been successfully formatted.” 说明NameNode格式化成功
14)格式化ZooKeeper
在master执行
hdfs zkfc -formatZK
注册所需要的ZNode节点
出现提示“Successfully created /hadoop-ha/mycluster in ZK.” 说明ZooKeeper格式化成功
15)在master启动 namenode 和 resourcemanager 进程
在master执行
hadoop-daemon.sh start namenode
在master执行
yarn-daemon.sh start resourcemanager
16)同步NameNode元数据
在master执行
scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* root@slave1:/usr/local/src/hadoop/tmp/hdfs/nn/
拷贝master的NameNode元数据到slave1节点
17)在slave1 启动 namenode 和 resourcemanager 进程
在slave1执行
hadoop-daemon.sh start namenode
在slave1执行
yarn-daemon.sh start resourcemanager
18) 启动HDFS集群
在master执行
start-dfs.sh
启动HDFS集群
19) 启动YARN集群
在master执行
start-yarn.sh
启动YARN集群
20)检查Hadoop HA集群各节点的服务进程
在master, slave1和slave2都要依次执行jps命令:
root@master ~# jps
6224 DataNode
5521 JournalNode
6693 NodeManager
6809 Jps
2858 QuorumPeerMain
5802 ResourceManager
5659 NameNode
6510 DFSZKFailoverController
root@slave1 ~# jps
4308 JournalNode
4597 DataNode
4806 NodeManager
4934 Jps
4392 NameNode
4490 ResourceManager
3132 QuorumPeerMain
4719 DFSZKFailoverController
root@slave2 ~]# jps
4195 DataNode
4452 Jps
3175 QuorumPeerMain
4120 JournalNode
4332 NodeManager
21) 查看HDFS和YARN自带的监控Web页面
浏览器访问
http://192.168.26.148:50070/dfshealth.html
和
http://192.168.26.149:50070/dfshealth.html
查看两个web页面的NameNode状态信息,应该一个显示为Active,另一个显示为Standby,说明HDFS HA高可用集群安装并运行正常
浏览器访问
http://192.168.26.148:8088/cluster/cluster
和
http://192.168.26.149:8088/cluster/cluster
查看两个web页面的ResourceManager HA state,应该一个显示为Active,另一个显示为Standby,说明YARN HA高可用集群运行正常
22)高可用性验证
(1)验证主备NameNode自动切换
a)分别检查standby和master两台主机的NameNode的主备状态,假如是master主机的NameNode处于Active状态,standy主机的NameNode处于StandBy状态
执行
hdfs haadmin -getServiceState master
应该输出:
Active
执行
hdfs haadmin -getServiceState slave1
应该输出:
StandBy
b)在master执行命令
hadoop-daemon.sh stop namenode
停止Active状态的NameNode
c)检查slave1主机的NameNode的主备状态,看其状态是否能通过zookeeper自动切换为Active,执行
hdfs haadmin -getServiceState slave1
应该输出:
active
d)在master主机执行命令
hadoop-daemon.sh start namenode
重新启动之前停止的NameNode,再执行
hdfs haadmin -getServiceState master
查看master主机的NameNode状态是否切换为Standby,应该输出:
standby
(2)验证主备ResourceManager自动切换
a)在master执行
yarn rmadmin -getServiceState rm1
查看master主机的ResourceManager的主备状态,假设为Active
b)在master执行
yarn rmadmin -getServiceState rm2
查看stanby主机的ResourceManager的主备状态,假设为Standby
c)在master执行
yarn-daemon.sh stop resourcemanager
停止master主机的ResourceManager进程
d)在master执行
yarn rmadmin -getServiceState rm2
查看stanby主机的ResourceManager的主备状态,应该自动切换为Active
e)在master执行
yarn-daemon.sh start resourcemanager
重新启动master主机的ResourceManager进程
f)在master命令
yarn rmadmin -getServiceState rm1
查看master主机的ResourceManager的主备状态,应该变成Standby
更多推荐
所有评论(0)