HA高可用搭建
规划:
NN-1 NN-2 DN ZK ZKFC JNN
node01 y y y
node02 y y y y y
node03 y y y
node04 y y
描述:
在四台虚拟机中的Linux机器安装hadoop3.1HA分布式集群。
环境和软件相关:
系统: CentOS 7.6
机器1:主机名-node01;IP-192.168.1.61
机器2:主机名-node02;IP-192.168.1.62
机器3:主机名-node03;IP-192.168.1.63
机器4:主机名-node04;IP-192.168.1.64
JDK版本:JDK1.8
JDK安装包全名:jdk-8u201-linux-x64.tar.gz
Hadoop版本:3.1.1
Hadoop安装包全名:hadoop-3.1.1.tar.gz
一、环境配置
1、修改IP
2、修改hosts文件
# vi /etc/hosts
192.168.1.61 note01
192.168.1.62 note02
192.168.1.63 note03
192.168.1.64 note04
3、修改系统参数
# vi /etc/selinux/config
将SELINUX修改为下面的值
SELINUX=disabled
4、关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
5.创建运行hadoop环境的用户hadoop
# useradd hadoop
修改haoop用户的密码
# passwd hadoop
6、ssh免秘钥登录
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa
$ ssh-keygen -t dsa
注:以上都在四台机器的hadoop用户下执行后,在note01节点执行下面的
$ cd ~/.ssh
$ cat *.pub >> authorized_keys
$ ssh note02 cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
$ ssh note03 cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
$ ssh note04 cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
$ chmod 600 authorized_keys
$ scp ~/.ssh/authorized_keys note02:~/.ssh
$ scp ~/.ssh/authorized_keys note03:~/.ssh
$ scp ~/.ssh/authorized_keys note04:~/.ssh
分别在四台机器验证是否配通ssh
$ ssh note01 date
$ ssh note02 date
$ ssh note03 date
$ ssh note04 date
二、安装Java1.8(四台机器都安装)
1、检查是否安装有java
# rpm -qa|grep java
2、卸载JAVA
如上面1未发现安装有java,可忽略此步;
使用命令:
# rpm -e java包名
卸载java,与java有关的全部软件都需要卸载,如遇到卸载不了的,需要强制执行卸载
# rpm -e java包名 --nodeps
3、下载jdk软件包(这里下载1.8 Linux 64位的版本)
去官网下载软件包
https://www.oracle.com/technetwork/java/javase/downloads/index.html
4、上传jdk到服务器
这里上传到/tmp目录
5、解压安装包
# tar -zxvf /tmp/jdk-8u201-linux-x64.tar.gz -C /opt
# mv /opt/jdk1.8.0_191 /opt/jdk1.8
配置环境:在/etc/profile文件添加以下内容
export JAVA_HOME=/opt/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin/
使其配置生效
# source /etc/profile
7、验证JAVA是否安装
# java -version
三、zookeeper安装
上传和解压zookeeper文件
# tar -zxvf /tmp/zookeeper-3.4.6.tar.gz -C /opt
# chown -R hadoop:hadoop /opt/zookeeper-3.4.6
配置zookeeper的环境
# su - hadoop
$ vi .bash_profile
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
使其生效
$ source .bash_profile
$ vi /opt/zookeeper-3.4.6/conf/zoo_sample.cfg
dataDir=/opt/zookeeper-3.4.6/zookeepertmp
dataLogDir=/opt/zookeeper-3.4.6/zookeepertmp/log
server.1=note02:2888:3888
server.2=note03:2888:3888
server.3=note04:2888:3888
注:server后面的数字需要从1开始,代表管理的机器id
创建对应的文件夹和文件
在note02执行
$ mkdir -p /opt/zookeeper-3.4.6/zookeepertmp/log
$ echo "1" > /opt/zookeeper-3.4.6/zookeepertmp/myid
创建对应的文件夹和文件
在note03执行
$ mkdir -p /opt/zookeeper-3.4.6/zookeepertmp/log
$ echo "2" > /opt/zookeeper-3.4.6/zookeepertmp/myid
创建对应的文件夹和文件
在note04执行
$ mkdir -p /opt/zookeeper-3.4.6/zookeepertmp/log
$ echo "3" > /opt/zookeeper-3.4.6/zookeepertmp/myid
启动zookeeper(在note02、note03、note04执行)
$ zkServer.sh start
查看zookeeper状态(在note02、note03、note04执行)
$ zkServer.sh status
注:需要启动zookeeper集群过半的才可以,单单启动一节点会失败。
四、hadoop安装
上传安装包到/tmp路径
解压并更改文件夹属主(note01执行)
# tar -zxvf /tmp/hadoop-3.1.1.tar.gz -C /opt/
# chown -R hadoop:hadoop /opt/hadoop-3.1.1
配置环境(note01执行)
# su - hadoop
$ vi .bash_profile
export HADOOP_HOME=/opt/hadoop-3.1.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使其生效
$ source .bash_profile
配置
修改hadoop-env.sh文件,在文件最后添加内容
$ cd /opt/hadoop-3.1.1/etc/hadoop
$ vi hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_ZKFC_USER=hadoop
export HDFS_JOURNALNODE_USER=hadoop
配置core-site.xml文件
$ vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/ha</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>note02:2181,note03:2181,note04:2181</value>
</property>
</configuration>
注:note01为主机名;使用3版本默认的9820端口
配置hdfs-site.xml文件
$ vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>note01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>note02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>note01:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>note02:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://note01:8485;note02:8485;note03: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</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/hadoop/ha/journalnode</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
配置文件workers
$ vi workers
note02
note03
note04
拷贝文件到note02、note03、note04
# scp -r hadoop-3.1.1 note02:/opt/
# scp -r hadoop-3.1.1 note03:/opt/
# scp -r hadoop-3.1.1 note04:/opt/
在note02、note03、note04执行
# chown -R hadoop:hadoop /opt/hadoop-3.1.1
在node01,node02,node03启动journalnode
$ hdfs --daemon start journalnode
在node01格式化文件系统
$ hdfs namenode -format
当看到有
INFO common.Storage: Storage directory /var/hadoop/peseudo/dfs/name has been successfully formatted.
表示格式化成功!
同步node01的数据到node02
$ hdfs namenode -bootstrapStandby
启动node01的namenode
$ hdfs --daemon start namenode
查看node01是否启动了namenode
$ jps
在node01格式化zkfc
$ hdfs zkfc -formatZK
INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/mycluster in ZK.
在node01启动集群
$ start-dfs.sh
启动后查看进程是否启动
$ jps
查看端口
$ ss -nal
在火狐或谷歌浏览器输入地址:192.168.1.31:9870查看hadoop状态
四、测试hadoop
查看内容
$ hdfs dfs -ls /
创建目录
$ hdfs dfs -mkdir /temp
上传文件
$ hdfs dfs -put /tmp/hadoop-3.1.1.tar.gz /temp
查看内容
$ hdfs dfs -ls /