一、配置登录,网络相关
VM虚拟机,克隆后修改ip
cd /etc/sysconfig/network-scripts
vim ifcfg-ens33
* 大家自己看看自己的vm的编辑->虚拟网络编辑器->观察 NAT模式的地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
#HWADDR=00:0C:29:42:15:C2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.100.3
NETMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=223.5.5.5
DNS2=114.114.114.114
重启
关闭防火墙
yum install iptables-services
查看防护墙状态
service iptables status
关闭
service iptables stop
查看防火墙开机启动状态
chkconfig iptables --list
关闭开机启动
chkconfig iptables off
1.设置主机名
设置主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node01
2.配置主机名以及解析
vi /etc/hosts
192.168.100.5 node1
192.168.100.6 node2
192.168.100.7 node3
3.关闭 selinux(安全相关与防火墙类似)
vi /etc/selinux/config
SELINUX=disabled
4.时间同步(时间差距大无法备份)
yum install ntp -y
vi /etc/ntp.conf
server ntp1.aliyun.com
service ntpd start
chkconfig ntpd on
2.配置服务器间ssh免密码登录
高可用模式下,hadoop的故障切换需要通过ssh登录到其他机器,进行主备切换
//生成密钥对
ssh-keygen -t rsa
//连续三次回车,本地生成公钥和私钥,默认存储在~/.ssh目录下
//用ssh-copy-id拷贝公钥到远程机器--注意这里每个电脑全部执行,需要自己登陆自己的
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.5
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.6
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.7
//测试
ssh -p 22 root@192.168.100.5
ssh -p 22 root@192.168.100.6
ssh -p 22 root@192.168.100.7
二、Zookeeper安装
1. 解压
tar -zxvf zookeeper-3.5.8.tar.gz -C /usr/local/HPEU/
2.配置
cd /usr/local/HPEU/apache-zookeeper-3.5.8/conf
//这里面只有zoo_sample.cfg文件,需要将这个文件更名为zoo.cfg,并修改其中的一些配置
cp zoo_sample.cfg zoo.cfg
dataDir=/usr/local/HPEU/apache-zookeeper-3.5.8/zookeeper
dataLogDir=/usr/local/HPEU/apache-zookeeper-3.5.8/zookeeper/logs
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
3.环境变量
vim /etc/profile
//加入这两个
export ZOOKEEPER_HOME=/usr/local/HPEU/apache-zookeeper-3.5.8
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile
4.创建myid
vim /usr/local/HPEU/apache-zookeeper-3.5.8/zookeeper
vim myid
1
值与server对应的一值
比如node01就写1
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
5.复制到其他2个节点
scp -r /usr/local/HPEU root@node02:/usr/local/HPEU
scp -r /usr/local/HPEU root@node03:/usr/local/HPEU
6. 启动
zkServer.sh start
查看节点状态
zkServer.sh status
发现
[root@node02 HPEU]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/HPEU/apache-zookeeper-3.5.8/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
[root@node01 conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/HPEU/apache-zookeeper-3.5.8/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@node03 local]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/HPEU/apache-zookeeper-3.5.8/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
则成功
三、Hadoop部署相关配置
cd /myfiles/hadoop/hadoop-3.2.1/etc/hadoop/core-site.xml
<configuration>
<!--指定hdfs连接地址,集群模式(高可用)-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster</value>
</property>
<!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/myfiles/hadoop/data</value>
</property>
<!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
<property>
<name>ha.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
</configuration>
/myfiles/hadoop/hadoop-3.2.1/etc/hadoop/hdfs-site.xml
<configuration>
<!--指定HDFS副本的数量,不能超过机器节点数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 为namenode集群定义一个services name -->
<property>
<name>dfs.nameservices</name>
<value>cluster</value>
</property>
<!-- nameservice 包含哪些namenode,为各个namenode起名 -->
<property>
<name>dfs.ha.namenodes.cluster</name>
<value>nn01,nn02</value>
</property>
<!-- 名为nn01的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
<property>
<name>dfs.namenode.rpc-address.cluster.nn01</name>
<value>node01:8020</value>
</property>
<!--名为nn01的namenode的http地址和端口号,用来和web客户端通讯 -->
<property>
<name>dfs.namenode.http-address.cluster.nn01</name>
<value>node01:9870</value>
</property>
<!-- 名为nn02的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
<property>
<name>dfs.namenode.rpc-address.cluster.nn02</name>
<value>node02:8020</value>
</property>
<!--名为nn02的namenode的http地址和端口号,用来和web客户端通讯 -->
<property>
<name>dfs.namenode.http-address.cluster.nn02</name>
<value>node02:9870</value>
</property>
<!-- namenode间用于共享编辑日志的journal节点列表 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/cluster</value>
</property>
<!-- journalnode 上用于存放edits日志的目录 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/myfiles/hadoop/journaldata</value>
</property>
<!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence(root:22)</value>
</property>
<!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- connect-timeout超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/myfiles/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/myfiles/hadoop/tmp/dfs/data</value>
</property>
</configuration>
/myfiles/hadoop/hadoop-3.2.1/etc/hadoop/yarn-site.xml
<configuration>
<!-- 启用Resource Manager HA高可用性 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定resourcemanager的名字 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 指定rm1的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node01</value>
</property>
<!-- 指定rm2的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node02</value>
</property>
<!-- 指定zookeeper集群机器 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
<!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
/myfiles/hadoop/hadoop-3.2.1/etc/hadoop/mapred-site.xml
//复制
cp mapred-site.xml.template mapred-site.xml
<configuration>
<!-- 采用yarn作为mapreduce的资源调度框架 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改workers ,hadoop3.0之后就是workers 之前都是slaves
这里设置的是dataNode,后续dataNode就是node02与node03
node02
node03
修改hadoop-env.sh
vim /myfiles/hadoop/hadoop-3.2.1/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/myfiles/java/jdk1.8.0_191
# 指定hadoop相关的pid存放位置
export HADOOP_PID_DIR=/myfiles/hadoop/pids
修改mapred-env.sh、yarn-env.sh文件
export JAVA_HOME=/myfiles/java/jdk1.8.0_191
修改/hadoop/sbin路径下start-dfs.sh,stop-dfs.sh
在文件顶部增加
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root
start-yarn.sh,stop-yarn.sh顶部也需添加以下
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
复制到其他2个节点
scp -r /myfiles/hadoop/ root@node02:/myfiles/hadoop/
scp -r /myfiles/hadoop/ root@node03:/myfiles/hadoop/
二、启动hadoop
启动首先需要格式化
(1)启动journalnode,三台机器都要这一步操作(仅第一次启动hadoop时,需要这一步操作,之后不再需要手动启动journalnode)
hdfs --daemon start journalnode
netstat -tunlp
查看端口8485,是否真的启动成功
(2) 在node01上执行格式化操作,格式化namenode
在node01执行
hdfs namenode -format
//注意:该步骤需要在能够访问外网的前提下执行,否则会报错
.QuorumJournalManager: Waited 21004 ms (timeout=60000 ms) for a response for format. No responses
IPC Server handler 1 on 8485 caught an exception
java.nio.channels.ClosedChannelException
出现如下图,则成功
目前我们准备node01与node02作为nameNode
node02与node03作为dataNode
node01先启动 hadoop-daemon.sh start namenode
node02执行hdfs namenode -bootstrapStandby
node02执行hdfs namenode -bootstrapStandby
(3) 格式化zookeeper节点:node01,node02,node03都执行。hdfs zkfc -formatZK 。
如果是集群一般执行一台即可。如果node03报错,也无妨,只需要看 服务启动的是否足够即可,
如图:
(4) 启动HDFS集群 start-dfs.sh
验证
分别访问两个namenode的web页面,可以查看到一个为active
一个为standby
查看datanode信息,共两个节点,正确。
三台机器分别执行jps
命令,查看进程是否与规划的一致
访问:
192.168.100.5:9870
关机后 重启
zkServer.sh start