所需资源
VMware:VMware
镜像:Centos镜像
所需包:Hadoop包、jdk、Zookeeper
一、搭建基础环境
虚拟机资源配置
操作系统Centos7 64位处理器2U2核内存4G磁盘大小60G网卡类型VMnat 8镜像CentOS-7-x86_64-DVD-1804.iso
# 除过上述之外的选项均使用默认推荐的选项
1.挂载镜像
2.开机,安装系统
3.修改其中的配置
修改对应的IP
主机IP用户名master192.168.1.6rootslave1192.168.1.7rootslave2192.168.1.8root
# IP地址可以选择和我一样的网段,也可以根据自己的网卡配置来设定,不做强制要求
4.备份本地yum源文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
5.获取阿里yum源配置文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 或者下面的命令,没有wget用下面的
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
6.更新cache
# 更新cache
yum makecache
yum -y update
7.安装 tools工具、上传下载命令 vim
yum -y install net-tools
yum -y install lrzsz
yum -y install vim
yum -y install psmisc
# 这步执行完成就可以创建另外两台虚拟机了,可以克隆,也可以重新创建,克隆步骤自行查阅,新建参考上述步骤
8.修改网卡
# 进入配置网卡目录
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改
BOOTPROTO="static"
ONBOOT="yes"
# 添加网卡,网关,子网掩码,dns
# master
IPADDR="192.168.1.6"
PREFIX="24"
GATEWAY="192.168.1.2"
DNS1="114.114.114.114"
# slave1
IPADDR="192.168.1.7"
PREFIX="24"
GATEWAY="192.168.1.2"
DNS1="114.114.114.114"
# slave2
IPADDR="192.168.1.8"
PREFIX="24"
GATEWAY="192.168.1.2"
DNS1="114.114.114.114"
# 重启网卡
systemctl restart network
9.修改每台机器的主机名
# master 机器执行
hostnamectl set-hostname master
#slave1机器执行
hostnamectl set-hostname slave1
# slave2机器执行
hostnamectl set-hostname slave2
# 执行完以后重启执行bash或者重启会刷新机器名
bash
# 执行完之后需要 查看一下主机名称是否修改完成
cat /etc/hostname
10.修改/etc/hosts文件
# 编辑配置文件
vi /etc/hosts
# 增加
192.168.1.6 master master
192.168.1.7 slave1 slave1
192.168.1.8 slave2 slave2
# 在windows下也要配置一下相同的hosts配置 windows需要配置 可以使用映射值访问C:\Windows\System32\drivers\etc 目录下有hosts 编辑即可 若没有创建一个,此步可以省略,后面访问web页面需要使用ip
192.168.1.6 master master
192.168.1.7 slave1 slave1
192.168.1.8 slave2 slave2
11.关闭防火墙
# 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
# Selinux 配置
yum -y install setroubleshoot
yum -y install setools-console
# 查看SELinux的状态
getenforce
# 关闭集群中的SELinux
vi /etc/selinux/config
# 修改配置
SELINUX=disabled
12.配置ssh免密登录
# 安装ssh服务
yum install -y openssh-server
systemctl start sshd
systemctl enable sshd
systemctl status sshd
# 每个用户免密登录都需要配置一遍ssh免密登录
# 4个回车 生成公钥、私钥
ssh-keygen
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
# 验证,在master 节点
ssh slave1
ssh slave2
13.配置NTP时钟同步
# 安装ntp服务
yum -y install ntp
# 使用阿里云直接同步
ntpdate us.pool.ntp.org
# 或者
ntpdate ntp4.aliyun.com
# 此步基础环境已经搭建完成,建议打个快照
二、配置Java环境
1.解压jdk包到指定目录下
# 软件安装
mkdir -p /opt/software
# 安装包
mkdir -p /usr/local/src
# 将jdk文件上传至/opt/software中
# 解压文件
tar -zxvf jdk-8u241-linux-x64.tar.gz -C /usr/local/src
# 进入解压目录
cd /usr/local/src/
# 更改包名
mv jdk1.8.0_241/ jdk
2.配置环境变量
vi /etc/profile
#java
export JAVA_HOME=/usr/local/src/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
3.生效环境变量
# 生效环境变量
source /etc/profile
# 查看jdk版本
java -version
4.分发变量
# 分发给各个集群同步命令
# scp -r 目录 用户@主机名:地址
scp -r /usr/local/src/jdk root@slave1:/usr/local/src
scp -r /usr/local/src/jdk root@slave2:/usr/local/src
5.集群节点生效
# 环境变量生效
source /etc/profile
# 查看jdk版本
java -version
三、配置 Zookeeper环境
1.解压并安装
# 解压包到指定目录下
tar -zxvf /opt/software/zookeeper-3.4.8.tar.gz -C /usr/local/src/
# 进入解压的目录
cd /usr/local/src/
# 更改包名
mv zookeeper-3.4.8 zookeeper
2.创建 ZooKeeper 数据目录
# 创建data目录,data 是用来传输数据的
mkdir /usr/local/src/zookeeper/data
# 创建logs目录,logs 是用来记录日志的
mkdir /usr/local/src/zookeeper/logs
3.配置环境变量
# 编辑环境变量
vi /etc/profile
# zookeeper environment
export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin
# 使环境变量生效
source /etc/profile
4.修改 zoo.cfg 配置文件
# 进入到 conf 目录下将 zoo.cfg 文件拷贝过来
cp zoo_sample.cfg zoo.cfg
# 修改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
# 上面的 IP 可以换成自己的主机地址,或者换成主机名,一般我们换成主机名
5.创建 myid 配置文件
# 进入指定目录
cd /usr/local/src/zookeeper/data
# 修改文件
echo "1" > myid
6.分发 ZooKeeper 集群
# 分发配置文件
scp -r /usr/local/src/zookeeper/ root@slave1:/usr/local/src/
scp -r /usr/local/src/zookeeper/ root@slave2:/usr/local/src/
# 分发环境变量并使其生效
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
# 三台节点都执行生效环境变量的命令
source /etc/profile
7.修改 myid 配置
# master 对应 1,slave1 对应 2,slave2 对应 3
# 进入指定目录
cd /usr/local/src/zookeeper/data/
# 修改myid值
# master
echo "1">myid
# slave1
echo "2">myid
#slave2
echo "3">myid
#查看myid值,在/usr/local/src/zookeeper/data/目录下
cat myid
8.启动Zookeeper
# 三个节点依次启动
zkServer.sh start
# 查看状态
zkServer.sh status
# 查看进程,三台节点都查看
jps
四、HadoopHA模式安装
1.停止之前启动的Zookeeper
# 停止
stop-all.sh
2.长传文件并解压
# 解压文件到指定目录
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
3.配置 hadoop 环境变量
# 编辑配置文件
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
4.配置 hadoop-env.sh 配置文件
# 进入到 hadoop/etc/hadoop目录下,后面的配置文件都在此目录下
cd /usr/local/src/hadoop/etc/hadoop
# 编辑配置文件
vi hadoop-env.sh
# 在最下面添加如下配置
export JAVA_HOME=/usr/local/src/jdk
5.配置 core-site.xml 配置文件
# 编辑配置文件
vi core-site.xml
# 添加如下配置:
<!-- 指定 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>
6.配置 hdfs-site.xml 配置文件
# 编辑配置文件
vi hdfs-site.xml
# 进行如下配置
<!-- 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:9000</value>
</property>
<!-- slave1 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.slave1</name>
<value>slave1:9000</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>3</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>
7.配置 mapred-site.xml 配置文件
# 将文件cp一份,类似于重命名的操作
cp mapred-site.xml.template mapred-site.xml
# 编辑配置文件
vi mapred-site.xml
#进行如下配置
<!-- 指定 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>
8.配置 yarn-site.xml 配置文件
# 编辑配置文件
vi yarn-site.xml
# 进行如下配置
<!-- 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>
9.配置 masters 配置文件
# 编辑配置文件
vi masters
# 进行如下配置
master
slave1
10.配置 slaves 配置文件
# 编辑配置文件
vi slaves
# 进行如下配置:先删除localhost
master
slave1
slave2
11.解压包到指定目录
# 解压包到指定目录namenode、datanode、journalnode 等存放数据的公共目录为/usr/local/src/hadoop/tmp;在 master 上执行如下:
# 创建以下目录
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
12.分发文件
# 给slave节点分发配置文件
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
scp -r /usr/local/src/hadoop root@slave1:/usr/local/src/
scp -r /usr/local/src/hadoop root@slave2:/usr/local/src/
# 生效环境变量,三台节点都执行
source /etc/profile
13.HA 启动
# 启动zk,master节点执行
zkServer.sh start
# 启动 journalnode 守护进程 ,每个节点都要启动
hadoop-daemons.sh start journalnode
# 初始化 namenode,master节点执行
hdfs namenode -format
# 启动第一个namenode,master节点执行
hadoop-daemon.sh start namenode
# 第二个namenode 格式化同步元数据 在slave1节点
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
注册 ZNode,master节点执行
hdfs zkfc -formatZK
# 启动 hdfs,master节点执行
start-dfs.sh
# 启动 yarn,master节点执行
start-yarn.sh
# 同步 master 数据,复制 namenode 元数据到其它节点(在 master 节点执行),master节点执行
scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave1:/usr/local/src/hadoop/tmp/hdfs/nn/
scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave2:/usr/local/src/hadoop/tmp/hdfs/nn/
# 在 slave1 上启动 resourcemanager 和 namenode 进程
yarn-daemon.sh start resourcemanager
# 启动 MapReduce 任务历史服务器,master节点执行
yarn-daemon.sh start proxyserver
mr-jobhistory-daemon.sh start historyserver
14.查看进程
# master节点执行
jpsall
# 如果报错,三台节点都执行以下命令
jps
# 如果查到的jps进程为:master:9个;slave1:8个;slave2:5个则证明HA模式部署完成
五.访问web页面
1.访问网址
master:50070
slave1:50070
master:8088
slave1:8088
2.测试HA
# 删除master节点的namenode进程
# kill -9 进程号
kill -9 9375
# 刷新web页面,由standby变为active
# 重新启动master的namenode
hadoop-daemon.sh start namenode
版权归原作者 楠师& 所有, 如有侵权,请联系我们删除。