Hadoop HA部署

发布时间 2023-12-31 17:16:08作者: sober_zero

实现Hadoop高可用性部署

Hadoop High Availability(HA)是一种设计模式,用于确保在Hadoop分布式文件系统(HDFS)和资源管理器(ResourceManager)等关键组件中发生故障时,系统能够继续提供服务。HA的目标是减小单点故障对系统可用性的影响,使Hadoop集群在面临硬件故障或其他问题时能够保持稳定运行。

Hadoop是一个用于分布式存储和处理大规模数据的框架。在生产环境中,确保Hadoop集群的高可用性是至关重要的。本文将介绍如何配置Hadoop的高可用性(HA)部署。

准备工作

• JDK

• ZooKeeper

配置ZooKeeper

1、解压

tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/

2、配置环境变量

vi /etc/profile

export ZOOKEEPER_HOME=/opt/module/apache-zookeeper-3.5.7-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile

3、编辑zoo.cfg文件

在ZooKeeper的配置文件中指定集群中的每个节点和端口。

cd /opt/module/apache-zookeeper-3.5.7-bin/conf/

cp zoo_sample.cfg zoo.cfg

vi zoo.cfg

# 对照添加或修改以下内容
tickTime=2000
dataDir=/opt/module/apache-zookeeper-3.5.7-bin/zkdata     #zkdata需要自行创建
clientPort=2181
initLimit=5
syncLimit=2
server.1=bigdata1:2888:3888
server.2=bigdata2:2888:3888
server.3=bigdata3:2888:3888

4、配置myid

cd /opt/module/apache-zookeeper-3.5.7-bin
# 创建zkdata
mkdir zkdata
cd zkdata

echo 1 > myid

5、分发

# 分发环境变量
scp /etc/profile bigdata2:/etc/profile
scp /etc/profile bigdata2:/etc/profile
# 分发zookeeper
scp -r /opt/module/apache-zookeeper-3.5.7-bin/ bigdata2:/opt/module/
scp -r /opt/module/apache-zookeeper-3.5.7-bin/ bigdata3:/opt/module/

分发完成以后,刷新一下从节点的环境变量,并修改从节点的myid配置,将其修改为2、3,三台机子的myid不可重复。

6、启动zookeeper

# 三台机子同时启动
zkServer.sh start
# 查看状态
zkServer.sh status

Hadoop HA部署

1、解压

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module

2、配置环境变量

vi /etc/profile

export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

source /etc/profile

3、修改配置文件

♦ 修改hadoop-env.sh文件

cd $HADOOP_HOME/etc/hadoop

vi hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_212

♦ 修改core-site.xml文件

# 这个配置项定义了 Hadoop 中的默认文件系统。
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
# 此配置项指定了 Hadoop 运行时使用的临时目录。
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/module/hadoop-3.1.3/tmp</value>
</property>
# 此配置项用于配置 Hadoop 的高可用性设置中所使用的 ZooKeeper 服务器的地址。
<property>
<name>ha.zookeeper.quorum</name>
 <value>bigdata1:2181,bigdata2:2181,bigdata3:2181</value>
</property>

♦ 修改hdfs-site.xml文件

# 定义HDFS集群的名称服务名称
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
# 定义HDFS集群中名字节点的ID,这里是nn1和nn2
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
# 指定了nn1和nn2名字节点的RPC地址。
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>slave1:8020</value>
</property>
# 指定了nn1和nn2名字节点的HTTP地址。
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>slave1:50070</value>
</property>
# 指定了共享编辑日志的目录。
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/cluster</value>
</property>
# 定义了一个类,用于为HDFS客户端提供故障转移(failover)代理。
<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>
# 指定了SSH隔离方法使用的私钥文件的路径。
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
# 启用或禁用自动故障转移。
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

♦ 修改mapred-site.xml文件

<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>

♦ 修改yarn-site.xml文件

# 启用或禁用 ResourceManager 的高可用性(High Availability)。
<property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
 # 定义 YARN 集群的唯一标识符。
 <property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>cluster1</value>
 </property>
 # 定义了 ResourceManager 的标识符,这里是 rm1 和 rm2。
 <property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>
 # 定义了 rm1 和 rm2 ResourceManager 的主机名(或 IP 地址)。
 <property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>master</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>slave1</value>
 </property>
 # 指定了用于 ResourceManager HA 的 Apache ZooKeeper 服务器的地址。
 <property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>master:2181,slave1:2181,slave2:2181</value>
 </property>
# 启用或禁用 NodeManager 对物理内存的检查。
<property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
</property>
# 启用或禁用 NodeManager 对虚拟内存的检查。
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>


♦ 修改workers文件

bigdata1
bigdata2
bigdata3

4、分发

# 分发环境变量
scp /etc/profile bigdata2:/etc/profile
scp /etc/profile bigdata2:/etc/profile
# 分发hadoop
scp -r /opt/module/hadoop-3.1.3/ bigdata2:/opt/module/
scp -r /opt/module/hadoop-3.1.3/ bigdata3:/opt/module/

5、格式化

# 每个节点需要先启动journalnode 
hadoop-daemon.sh start journalnode

# 格式化zkfc
hdfs zkfc -formatZK

# 格式化hadoop 
hadoop namenode -format

6、启动Hadoop并查看进程

start-all.sh

# 查看nn2的进程状态
 hdfs haadmin -getServiceState nn2
# 查看rm2的进程状态
 yarn rmadmin -getServiceState rm2
# 在三台节点查看进程
 jps