注:安装Hadoop HA(即HDFS和YARN高可用),首先要完成zookeeper的配置,然后再配置hdfs 和yarn 的高可用。
使用超级管理员root登录。
(1)使用ping 命令检测网络是否连通
ping www.baidu.com
使用ctrl+c来停止命令
如果网络没有打开,打开网络:
service network restart
(2)修改ip地址,设置为静态网络。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
选择编辑ifcfg-ens33这个文件修改ip地址信息。
1) 把BOOTPROTO=“hdcp” 改为BOOTPROTO=”static”静态网络ip
2) 设置ONBOOT=“yes”
3) 添加master IP地址为:IPADDR=192.168.100.10
4) 添加子网掩码:NETMASK=255.255.255.0
5) 添加网关: GATEWAY=192.168.100.2
6) DNS1=192.168.100.1
7) 重启网络:systemctl restart network
8) 测试网络有没有连通:ping www.baidu.com
(3)关闭防火墙
#关闭防火墙
systemctl stop firewalld
#禁用防火墙
systemctl disable firewalld
#查看防火墙状态
systemctl status firewalld
(4)设置hosts映射关系
备注:这里是把三个Linux的ip地址保存到三个虚拟机去,相当于我们自己在手机里面存别人的电话号码 一样的道理,这样相互之间就知道对应ip地址的机器是哪一台。所以这个操作也是要在三台虚拟机都要 进行的。给ip地址起名字,几个机器需要互相连通,这样在连接几台机器的时候只需要使用机器名就行,不需要使用ip地址。
1) 编辑hosts文件:
vi /etc/hosts
2) 进入编辑模式 i
3)在最后一行添加
192.168.100.10 master
192.168.100.20 slave1
192.168.100.30 slave2
关机,克隆出两台机器,分别为 slave1 、 slave2
(1)设置slave1 和slave2 的网络
vi /etc/sysconfig/network-scripts/ifcfg-ens33
slave1 的网络为 192.168.100.20/24
slave2 的网络为 192.168.100.30/24
(2)设置master、slave1 和slave2 的主机名
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
(3)使用ping命令,看是否能够进行相互的连通。
在master里面连通slave1和slave2。
在slave1里面连通master和slave2。
在slave2里面连通master和slave1。
(1)在各个机器(master、slave1、slave2)家目录执行
ssh-keygen -t rsa
然后一直回车确认
(2)ls -all :查看所有文件和文件夹,
会在/root/.ssh产生id_rsa和id_rsa.pub文件
查看.ssh目录可以看到id_rsa(私钥), id_rsa.pub (公钥)两个文件
如何能在master中对s1和s2进行免密登录?
需要把master的公钥放到s1和s2的authorized_keys文件里
(执行以下步骤即可)
(3)在master、slave1、slave2中分别执行
(期间需要输入yes ,和对应机器的密码,看提示自行决定)
ssh-copy-id slave1
ssh-copy-id slave2
ssh-copy-id master
(4)设置时间同步(按需设置)
crontab -e
0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
在/opt目录下创建
/module(存放解压或安装好的软件),
/software(tar包等软件包)
目录存放文件
(1) 解压压缩文件:解压hadoop文件和jdk文件,
输入命令时可以用tab键补全
tar -zxvf /opt/software/hadoop-2.7.7.tar.gz –C /opt/module/hadoop
tar -zxvf /opt/software/jdk-8u171-linux-x64.tar.gz –C /opt/module/jdk
(2) 创建一个专门用于配置环境变量的文件
vi /etc/profile.d/bigdata_env.sh
(3) 在bigdata_env.sh文件中设置java的环境变量
export JAVA_HOME=/opt/module/jdk1.8.0_162
export PATH=$JAVE_HOME/bin:$PATH
(4) #使环境变量生效
source /etc/profile
#可以查看java的版本
java –version
到此,master中的java配置已经结束了.
(5) 在slave1和slave2中不用再去安装,直接分发就好了
scp -r /opt/module/jdk1.8.0_162/ slave1:/opt/module
scp -r /opt/module/jdk1.8.0_162/ slave2:/opt/module
(6) 配置s1和s2的环境变量,参考步骤(3)(4)。
master、slave1 和 slave2 三个节点上部署Zookeeper。
解压:
[root@master software]# tar -zxvf apache-zookeeper-3.4.5-bin.tar.gz -C /opt/module/
[root@master module]# mv apache-zookeeper-3.4.5-bin/ zookeeper-3.4.5
[root@master zookeeper-3.4.5]# mkdir zkData
[root@master zookeeper-3.4.5]# cd zkData
[root@master zkData]# vim myid
1
将zookeeper-3.4.5分发到其他两个节点。
[root@master module]# scp -r /opt/module/zookeeper-3.4.5 slave1:/opt/module
[root@master module]# scp -r /opt/module/zookeeper-3.4.5 slave2:/opt/module
修改其他两台的myid: 路径:
cd /opt/module/zookeeper-3.4.5/zkData/myid
[root@slave1 zkData]# vim myid
2
[root@slave2 zkData]# vim myid
3
1.重命名文件:
[root@master conf]# cp zoo_sample.cfg zoo.cfg
2.配置zoo.cfg:
[root@master conf]# vim zoo.cfg
#修改数据存储路径配置
dataDir=/opt/module/zookeeper-3.4.5/zkData
#添加配置
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
[root@master conf]#
scp -r /opt/module/zookeeper-3.4.5/conf/zoo.cfg slave1:/opt/module/zookeeper-3.4.5/conf
[root@master conf]#
scp -r /opt/module/zookeeper-3.4.5/conf/zoo.cfg slave2:/opt/module/zookeeper-3.4.5/conf
[root@master conf]# vim /etc/profile.d/bigdata_env.sh
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.5
export PATH=$PATH:$ZOOKEEPER_HOME/bin
# 更新环境变量
source /etc/profile
(1)分别启动Zookeeper (三台都要执行)
[root@master zookeeper-3.4.5]# zkServer.sh start
[root@slave1 zookeeper-3.4.5]# zkServer.sh start
[root@slave2 zookeeper-3.4.5]# zkServer.sh start
查看状态(三台都要查看)
zkServer.sh status
三台节点中,两个follower。一个leader。
jps:(三台)
[root@slave2 module]# jps
Jps
QuorumPeerMain
都有QuorumPeerMain
停止zookeeper集群 (不用停,高可用会用)
注意:可以不停,等会高可用还要用。
zkServer.sh stop
zkServer.sh stop
zkServer.sh stop
tar -xzvf /opt/software/hadoop-2.7.7.tar.gz -C /opt/module/
cd /opt/module/hadoop-2.7.7/etc/hadoop
注意:中文就不要复制了!!!
fs.defaultFS
hdfs://hdfscluster
HDFS主入口,hadoopcluster仅是作为集群的逻辑名称,可随意更改但务必与hdfs-site.xml中dfs.nameservices值保持一致
hadoop.tmp.dir
/opt/module/hadoop-2.7.7/tmp
默认的hadoop.tmp.dir指向的是/tmp目录,将导致namenode与datanode数据全都保存在易失目录中,此处进行修改
hadoop.http.staticuser.user
root
用户角色配置,不配置此项会导致web页面报错
ha.zookeeper.quorum
master:2181,slave1:2181,slave2:2181
zookeeper集群地址,集群以逗号进行分隔。
hadoop.proxyuser.root.hosts
对root用户不进行限制
*
hadoop.proxyuser.root.groups
*
对root群组不限制
export JAVA_HOME=/opt/module/jdk1.8.0_162
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_ZKFC_USER="root"
export HDFS_JOURNALNODE_USER="root"
dfs.replication
2
副本数配置
dfs.nameservices
hdfscluster
集群名称,此值在接下来的配置中将多次出现务必注意同步修改(core中的相同)
dfs.ha.namenodes.hdfscluster
nn1,nn2
所有的namenode列表,此处也只是逻辑名称,非namenode所在的主机名称。
dfs.namenode.rpc-address.hdfscluster.nn1
master:9820
namenode之间用于RPC通信的地址,value填写namenode所在的主机地址,注意hadoopcluster与nn1要和上文的配置一致
dfs.namenode.rpc-address.hdfscluster.nn2
slave1:9820
dfs.namenode.http-address.hdfscluster.nn1
master:9870
namenode的web访问地址,该版本默认端口9870。建议50070
dfs.namenode.http-address.hdfscluster.nn2
slave1:9870
namenode的web访问地址,该版本默认端口9870。建议50070
dfs.namenode.shared.edits.dir
qjournal://master:8485;slave1:8485;slave2:8485/hdfscluster
journalnode主机地址,最少三台,默认端口8485,格式为 qjournal://jn1:port;jn2:port;jn3:port/${nameservices}
dfs.client.failover.proxy.provider.hdfscluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
故障时自动切换的实现类,照抄即可
dfs.ha.fencing.methods
sshfence
故障时相互操作方式(namenode要切换active和standby),这里我们选ssh方式
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
修改为自己用户的ssh key存放地址
dfs.journalnode.edits.dir
/opt/module/hadoop-2.7.7/editsdir
namenode日志文件输出路径,即journalnode读取变更的位置
dfs.ha.automatic-failover.enabled
true
启用自动故障转移
vim /opt/module/hadoop-2.7.7/etc/hadoop/workers
master
slave1
slave2
vim /opt/module/hadoop-2.7.7/sbin/start-dfs.sh
vim /opt/module/hadoop-2.7.7/sbin/stop-dfs.sh
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
vim /etc/profile.d/bigdata_env.sh
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.7
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
使环境变量生效:
source /etc/profile
scp -r /opt/module/hadoop-2.7.7 slave1:/opt/module
scp -r /opt/module/hadoop-2.7.7 slave2:/opt/module
hadoop-daemon.sh start journalnode
不要管WARNING!!!
然后jps(三台)出现JournalNode 即可。
hdfs namenode -format
hadoop-daemon.sh start namenode
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
hdfs zkfc -formatZK
hadoop-daemon.sh start zkfc
在master上:
start-dfs.sh
(实际上只启动datanode,为了方便不需要每个节点都去启动datanode)
启动后master节点有
DFSZKFailoverController
NameNode
JournalNode
DataNode
QuorumPeerMain
slave1节点上有
NameNode
DFSZKFailoverController
DataNode
QuorumPeerMain
JournalNode
slave2节点上有
DataNode
QuorumPeerMain
JournalNode
(可以不理会 下面 )
任意一台机器进入 zkCli.sh
get -s /hadoop-ha/hdfscluster/ActiveStandbyElectorLock
在以后启动hdfs集群直接在master上使用start-dfs.sh即可
会自动启动NameNode,DataNode,JournalNode,DFSZKFailoverController等节点
注:若途中发现只有master上的datanode启动,slave1,slave2的datanode没启动,则是 slave1,slave2中的/opt/module/hadoop-2.7.7/tmp/dfs/data/current/VERSION与master中的clusterID不一致,修改即可。方法如下:
scp -r /opt/module/hadoop-2.7.7/tmp/dfs/name/current/VERSION slave1:/opt/module/hadoop-2.7.7/tmp/dfs/name/current
(可以不理会 上面)
master:
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
master:10020
mapreduce.jobhistory.webapp.address
master:19888
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
yarncluster
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
master
yarn.resourcemanager.hostname.rm2
slave1
yarn.resourcemanager.zk-address
master:2181,slave1:2181,slave2:2181
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.log-aggregation-enable
true
yarn.log-aggregation.retain-seconds
86400
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
export JAVA_HOME=/opt/module/jdk1.8.0_162
vim /opt/module/hadoop-2.7.7/sbin/start-yarn.sh
vim /opt/module/hadoop-2.7.7/sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=root
YARN_NODEMANAGER_USER=root
scp -r /opt/module/hadoop-2.7.7/etc/hadoop/mapred-site.xml slave1:/opt/module/hadoop-2.7.7/etc/hadoop
scp -r /opt/module/hadoop-2.7.7/etc/hadoop/mapred-site.xml slave2:/opt/module/hadoop-2.7.7/etc/hadoop
scp -r /opt/module/hadoop-2.7.7/etc/hadoop/yarn-site.xml slave1:/opt/module/hadoop-2.7.7/etc/hadoop
scp -r /opt/module/hadoop-2.7.7/etc/hadoop/yarn-site.xml slave2:/opt/module/hadoop-2.7.7/etc/hadoop
scp -r /opt/module/hadoop-2.7.7/etc/hadoop/yarn-env.sh slave1:/opt/module/hadoop-2.7.7/etc/hadoop
scp -r /opt/module/hadoop-2.7.7/etc/hadoop/yarn-env.sh slave2:/opt/module/hadoop-2.7.7/etc/hadoop
scp -r /opt/module/hadoop-2.7.7/sbin/start-yarn.sh slave1:/opt/module/hadoop-2.7.7/sbin
scp -r /opt/module/hadoop-2.7.7/sbin/start-yarn.sh slave2:/opt/module/hadoop-2.7.7/sbin
scp -r /opt/module/hadoop-2.7.7/sbin/stop-yarn.sh slave1:/opt/module/hadoop-2.7.7/sbin
scp -r /opt/module/hadoop-2.7.7/sbin/stop-yarn.sh slave2:/opt/module/hadoop-2.7.7/sbin
start-yarn.sh
注:后续启动yarn集群直接使用
start-dfs.sh即可,会自动启动ResourceManager,NodeManager等节点
注意:如果执行完上述命令,通过jps 发现slave1没有ResourceManager 则在slave1上执行下面命令:
yarn-daemon.sh start resourcemanager
yarn高可用验证:
启动在master上有
ResourceManager
NodeManager
在slave1上有
ResourceManager
NodeManager
在slave2上有
NodeManager
HDFS HA和YARN HA若都成功,则
master与slave1上:
NameNode
JournalNode
NodeManager
ResourceManager
DataNode
DFSZKFailoverController
QuorumPeerMain
slave2上有
NodeManager
JournalNode
DataNode
QuorumPeerMain