实现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
标签:opt,部署,Hadoop,module,hadoop,etc,export,HA
From: https://www.cnblogs.com/zyanch/p/17937754