Hadoop-3.1.3高可用集群部署

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Hadoop-3.1.3高可用集群部署相关的知识,希望能为你提供帮助。
1.  部署前提操作用户:hadoop
操作目录:/home/hadoop/apps
操作机器(3台):hadoop1,hadoop2,hadoop3
3台机器都是Centos7,安装了JDK1.8和一个已启动的Zookeeper-3.5.7集群。
【Hadoop-3.1.3高可用集群部署】以下是添加用户、配置免密登录,关闭防火墙等操作:

# 3台机器都需进行如下配置
# 新增hadoop用户
useradd hadoop
passwd hadoop
New password:
Retype new password:

授权 root 权限,在root下面加一条hadoop的hadoop ALL=(ALL) ALL
#修改权限
chmod 777 /etc/sudoers
vim /etc/sudoers
## Allow root to run any commands anywhere
rootALL=(ALL)ALL
hadoopALL=(ALL)ALL
#恢复权限
chmod 440 /etc/sudoers

# 配置免密登录
#进入到我的home目录,
su - hadoop
ssh-keygen -t rsa (连续按四个回车)
#执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
#将公钥拷贝到要免密登录的机器上
ssh-copy-id hadoop2
ssh-copy-id hadoop3

# 主机名ip地址映射
sudo vim /etc/hosts
192.168.62.161 hadoop1
192.168.62.162 hadoop2
192.168.62.163 hadoop3

# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 禁用selinux
sudo vim /etc/selinux/config
SELINUX=enforcing --> SELINUX=disabled

# 配置时间同步
# 安装ntpdate工具
sudo yum -y install ntp ntpdate
# 设置系统时间与网络时间同步
ntpdate 0.asia.pool.ntp.org
# 将系统时间写入硬件时间
hwclock --systohc



2.  集群节点规划
此集群中Hadoop的NameNode是HA的,Yarn的ResourceManger也是HA的,从而保证了Hadoop集群的高可用。


3.  下载在hadoop1机器上执行
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz



4.  解压
tar -zxvf hadoop-3.1.3.tar.gz



5.  修改环境变量
# 添加环境变量
sudo vim /etc/profile
export HADOOP_HOME=/home/hadoop/apps/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 刷新配置
source /etc/profile



6.  修改配置文件
# 配置文件所在目录
cd /home/hadoop/apps/hadoop-3.1.3/etc/hadoop



6.1.  修改hadoop-env.sh
vim hadoop-env.sh
# Set Hadoop-specific environment variables here.
#指定java_HOME
export JAVA_HOME=/opt/jdk1.8.0_212
#指定hadoop用户,hadoop3.x之后必须配置(我的用户名就叫hadoop)
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_ZKFC_USER=hadoop
export HDFS_JOURNALNODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop



6.2.  修改core-site.xml
vim core-site.xml
< configuration>
< !--集群名称-->
< property>
< name> fs.defaultFS< /name>
< value> hdfs://ns1< /value> < /property>
< !--临时目录:提前创建好-->
< property>
< name> hadoop.tmp.dir< /name>
< value> /home/hadoop/data/hadoop_tmp_data< /value>
< /property>
< !--webUI展示时的用户-->
< property>
< name> hadoop.http.staticuser.user< /name>
< value> hadoop< /value>
< /property>
< !--高可用依赖的zookeeper的通讯地址-->
< property>
< name> ha.zookeeper.quorum< /name>
< value> hadoop1:2181,hadoop2:2181,hadoop3:2181< /value>
< /property>
< !--用于连接hive server2(可选项)-->
< property>
< name> hadoop.proxyuser.hadoop.hosts< /name>
< value> *< /value>
< /property>
< property>
< name> hadoop.proxyuser.hadoop.groups< /name>
< value> *< /value>
< /property>
< /configuration>



6.3.  修改hdfs-site.xml
vim hdfs-site.xml
< configuration>
< property>
< name> dfs.nameservices< /name>
< value> ns1< /value>
< /property>
< !--定义hdfs集群中的namenode的ID号-->
< property>
< name> dfs.ha.namenodes.ns1< /name>
< value> nn1,nn2< /value>
< /property>
< !--定义namenode的主机名和rpc协议的端口-->
< property>
< name> dfs.namenode.rpc-address.ns1.nn1< /name>
< value> hadoop1:8020< /value>
< /property>
< property>
< name> dfs.namenode.rpc-address.ns1.nn2< /name>
< value> hadoop2:8020< /value>
< /property>
< !--定义namenode的主机名和http协议的端口-->
< property>
< name> dfs.namenode.http-address.ns1.nn1< /name>
< value> hadoop1:9870< /value>
< /property>
< property>
< name> dfs.namenode.http-address.ns1.nn2< /name>
< value> hadoop2:9870< /value>
< /property>
< !--定义共享edits的url-->
< property>
< name> dfs.namenode.shared.edits.dir< /name>
< value> qjournal://hadoop1:8485; hadoop2:8485; hadoop3:8485/ns1< /value>
< /property>
< !--定义hdfs的客户端连接hdfs集群时返回active namenode地址-->
< property>
< name> dfs.client.failover.proxy.provider.ns1< /name>

< value> org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider< /value>
< /property>

< !--hdfs集群中两个namenode切换状态时的隔离方法-->
< property

    推荐阅读