# 新建的虚拟机,可以更改为与文档中相同的主机名
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
.ssh免密登录
1),生成秘钥(群发)
ssh-keygen 在输入命令之后,会提示你选择公钥密码、存储位置等
如无特殊需求,比如公钥密码、存储位置等。
这里可以直接回车下一步 秘钥即成功生成在"~/.ssh/"文件夹内
2),配置hosts
# 打开配置文件目录, vi /etc/hosts
# 根据ip信息修改为以下内容
192.168.204.152 master
192.168.204.153 master2
192.168.204.154 slave
# 在每台服务器中都要配置hosts,所以在每台服务器中都执行
(3),采用追加的方式添加公钥(群发)
第一台主机: ssh-copy-id master
yes
000000(输入设置的密码)
第二台主机: ssh-copy-id master2
yes
000000(输入设置的密码)
第三台主机(在此时注意一点的是,这里做输入的时候其他两台主机仍然是第一次连接所以需要先选中yes,在输入密码):
ssh-copy-id slave
yes
000000(输入设置的密码)
2.关闭防火墙
# 关闭防火墙: systemctl stop firewalld
# 设置开机禁用防火墙: systemctl disable firewalld.service
# 检查防火墙状态: systemctl status firewalld
3.jdk的安装与配置
1).解压jdk组件
# 使用xftp将组件上传到/soft目录下
mkdir /soft
# 新建文件目录:
/usr/java mkdir -p /usr/java/
# 进入soft目录下解压jdk
cd /soft
tar -zxvf jdk-8u77-linux-x64.tar.gz -C /usr/java/
(2).配置环境变量
# 在相应配置文件中追加以下内容
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_77
export PATH=$PATH:$JAVA_HOME/bin
# 设置当前环境变量立即生效
source /etc/profile
3).将jdk与环境变量同步到其他两台服务器
scp -r /usr/java/ master2:/usr/
scp /etc/profile master2:/etc/
scp -r /usr/java/ slave:/usr/
scp /etc/profile slave:/etc/
# 在同步文件之后,需要更新配置文件
source /etc/profile
4.Zookeeper安装与配置
(1).解压Zookeeper组件
# 组件使用xftp上传到/soft目录下
# 在三台机器中都新建目录:
/usr/hadoop mkdir /usr/hadoop
# 进入soft目录下解压Zookeeper
cd /soft
tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/hadoop/
(2).配置环境变量
# 在响应配置文件中追加以下内容
vi /etc/profile
export ZOOKEEPER_HOME=/usr/hadoop/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
# 设置当前环境变量立即生效
source /etc/profile
(3).配置Zookeeper
# 1.进入指定路径修改配置文件
cd /usr/hadoop/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg vi zoo.cfg
# 2.删除之前的所有内容,添加以下内容
tickTime=2000
initLimit=10
syncLimit=5
# 数据存放位置
dataDir=/hadoop/zookeeper/zkdata
# 日志存放位置
dataLogDir=/hadoop/zookeeper/zklog
# 端口
clientPort=2181
# 指定部署Zookeeper的三个节点
server.1=master:2888:3888
server.2=master2:2888:3888
server.3=slave:2888:3888
4).同步Zookeeper与环境变量到其他两台服务器
scp -r /usr/hadoop/zookeeper-3.4.10 master2:/usr/hadoop/
scp /etc/profile master2:/etc/
scp -r /usr/hadoop/zookeeper-3.4.10 slave:/usr/hadoop/
scp /etc/profile slave:/etc/
5).创建文件夹
# 在每个节点上均要执行
mkdir -p /hadoop/zookeeper/zkdata
mkdir -p /hadoop/zookeeper/zklog
6).创建myid
# 在/hadoop/zookeeper/zkdata下创建文件myid
cd /hadoop/zookeeper/zkdata
vi myid
# 编辑内容为当前server数值(1,2,3),需要与上面zoo.cfg中的配置相对应:
master1节点 -> 1
master2节点 -> 2
worker1节点 -> 3
5.Hadoop安装与配置
1).解压Hadoop组件
# 将组件上传至soft目录
cd /soft
tar -zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop/
(2).修改相应配置文件
# 进入配置文件目录
cd /usr/hadoop/hadoop-2.7.3/etc/hadoop/
1),配置core-site.xml
<!-- 指定hdfs nameservice -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1/</value>
</property>
<!-- 开启垃圾回收站功能,值为检查点被删除的分钟数,设为0为禁用 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<!-- 指定hadoop数据文件夹 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop/tmp</value>
</property>
<!-- 指定Zookeeper地址及端口 2019年9月9日 14:59:10-->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,master2:2181,slave:2181</value>
</property>
2),配置hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>master:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>master2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>master2:50070</value>
</property>
<!-- 指定JN节点 2019年9月9日 14:58:51-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;master2:8485;slave:8485/ns1</value>
</property>
<!-- 指定JN数据在本地磁盘的存放位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/hadoop/hadoop/edits</value>
</property>
<!-- 开启NameNode自动故障切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置自动故障切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
3),配置yarn-site.xml
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- 配置block副本数 2019年9月9日 14:58:44 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
3),配置yarn-site.xml
<!-- 启用RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 自定义RM的id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<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>master2</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>master2:8088</value>
</property>
<!-- 指定zk集群地址 2019年9月9日 15:00:17-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,master2:2181,slave:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
4),配置mapred-site.xml
# 说明:系统中提供的是一个模版文件,需要先复制成marped-site.xml文件,再进行修改
[root@localhost hadoop]# cp mapred-site.xml.template mapred-site.xml
# 打开配置文件s
vi mapred-site.xml
<!-- 指定mr框架为yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5),配置hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_77
6),配置slaves
[root@master ~]# vim /usr/hadoop/hadoop-2.7.3/etc/hadoop/slaves
# 删除原本的localhost,添加以下内容
master
master2
slave
7),配置环境变量
# 修改配置文件
vi /etc/profile
# 追加以下内容
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 更新配置文件
source /etc/profile
8),同步Hadoop与配置文件复制到其他节点
# 在master节点配置之后,需要同步到其他两台服务器中
[root@master /]# cd /usr/hadoop/
[root@master hadoop]# scp -r /usr/hadoop/hadoop-2.7.3 root@master2:/usr/hadoop/
[root@master hadoop]# scp /etc/profile root@master2:/etc/
[root@master hadoop]# scp -r /usr/hadoop/hadoop-2.7.3 root@slave:/usr/hadoop/
[root@master hadoop]# scp /etc/profile root@slave:/etc/
# 同步完配置文件之后需要更新配置文件
source /etc/profile
6.集群启动
(1).启动Zookeeper
# 在三个节点上都执行以下命令
zkServer.sh start
# 查看状态:一个leader,两个flower
zkServer.sh status
(2).启动JournalNode
# 在三个节点上都执行以下命令
hadoop-daemon.sh start journalnode
# 为了备用节点能够与活跃节点保持同步,两个节点之间增加了一个守护进程“JournalNodes”(JNS),当任何 namespace被活动节点所修改,JNS都会记录edits及相应的操作日志,备用节点会从JNS上读取edits,并将edits中所 记录操作应用在自己的namespace,在发生故障时,备用节点将能确保在自己成为活动节点之前通过JNS读取了所有的 edits,从而确保namespace在故障转移前是完全同步的。
(3).格式化HDFS
# 1.在master上格式化namenode:
hdfs namenode -format
# 在master1上启动namenode:
hadoop-daemon.sh start namenode
# 在master2上格式化namenode:
hdfs namenode -bootstrapStandby
(4).格式化zkfc
# 在master1上执行:
hdfs zkfc -formatZK
(5).启动hdfs
# 在master1上执行:
start-dfs.sh
(6).启动Yarn
# 1.在master1上执行:
start-yarn.sh
# 2.在master2上执行:
yarn-daemon.sh start resourcemanager
7).启动JobHistoryServer
# 在每台主机上都执行以下命令
mr-jobhistory-daemon.sh start historyserver
7.验证NameNode高可用
# 首先分别访问:master:50070和master2:50070网页,查看这两个节点的状态:
master处于active状态;master2处于standby状态
# 我们再手动启动master的namenode服务:
hadoop-daemon.sh start namenode
# 去master:50070网页查看,master处于standby状态;master2处于active状态
8.进程验证
# master节点
[root@master hadoop]# jps
10417 ResourceManager
2226 QuorumPeerMain
10994 Jps
10519 NodeManager
10312 DFSZKFailoverController
10953 NameNode
10044 DataNode
9614 JournalNode
# master2节点
[root@master2 hadoop]# jps
9586 DataNode
9811 NodeManager
10181 NameNode
9882 ResourceManager
9708 DFSZKFailoverController
10285 Jps
9406 JournalNode
2063 QuorumPeerMain
# slave节点
[root@slave zkdata]# jps
9504 DataNode
2085 QuorumPeerMain
9783 Jps
9626 NodeManager
9422 JournalNode