Hadoop HA高可用搭建2024(V3.3.6)

启动停止命令

启动服务

cd /data/soft/hadoop/sbin
hadoop-daemon.sh start journalnode
./start-all.sh

mapred --daemon start historyserver
yarn --daemon start timelineserver

停止服务

cd /data/soft/hadoop/sbin
hadoop-daemon.sh stop journalnode
./stop-all.sh

mapred --daemon stop historyserver
yarn --daemon stop timelineserver

HA 概述

HA 即高可用,在 Hadoop 中,只有 NN 和 MR 会出现单点故障。所以只需要对 NN 和 MR 做 HA
HA 原理就是额外起一台机子作冗余备份,当主机挂了,就让备机顶上。按照该想法会存在以下问题:

  1. 主备间如何同步 Edit?
  2. 如何检测主机下线?
  3. 如何做故障转移?

对于问题一:Hadoop 引入 JournalNode 解决
对于问题二:使用 ZK 来检测机器状态变化
对于问题三:Hadoop 引入 DFSZKFailoverController 解决
引入新的部件,为了防止这些也是是单点的,所以也得给他们起多个

集群规划

按照以上分析,便有以下集群规划

node01 node02 node03
NameNode NameNode NameNode
DFSZKFailoverController DFSZKFailoverController DFSZKFailoverController
JournalNode JournalNode JournalNode
DataNode DataNode DataNode
ZK ZK ZK
ResourceManager ResourceManager ResourceManager
NodeManager NodeManager NodeManager

ZK 集群搭建

参考
ZooKeeper集群安装

Hadoop安装

Hadoop下载地址:
:::info

tar -zxvf /data/soft/hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 hadoop
chown -R root:root ./hadoop

打开"/etc/profile"配置文件,配置hadoop环境变量(注意,标点符号全都要是英文半角):

export HADOOP_HOME=/data/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath`
#export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"

执行"/etc/profile",让配置生效:

source /etc/profile

测试hadoop安装:

hadoop version

修改配置

hadoop-env.sh

修改hadoop-env.sh文件,设置运行环境变量及运行用户

export JAVA_HOME=/data/soft/sdkman/candidates/java/current
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

core-site.xml

注意:
HA集群名称要和hdfs-site.xml中的配置保持一致
修改存储路径
Zookeeper集群的地址和端口

<configuration>
  <!-- HA集群名称,自定义,该值要和hdfs-site.xml中的配置保持一致  -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
  </property>
  <!-- 指定hadoop运行时产生文件的存储路径 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/data/apps/hadoop</value>
  </property>
  <!-- 设置HDFS web UI访问用户 -->
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
  </property>
  <!-- ZooKeeper集群的地址和端口-->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
  </property>

  <!-- 配置该root允许通过代理访问的主机节点 -->
  <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
  </property>
  <!-- 配置该root允许代理的用户所属组 -->
  <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
  </property>
  <!-- 配置该root允许代理的用户 -->
  <property>
    <name>hadoop.proxyuser.root.
<think>嗯,用户想了解如何搭建Hadoop高可用集群的实验步骤和实验结果。首先,我需要回忆一下Hadoop高可用性配置,特别是HDFS和YARN的HA设置。Hadoop高可用主要通过消除单点故障来实现,比如NameNode和ResourceManager的HA。 首先,用户可能是在做毕业设计或者课程实验,需要实际动手搭建集群。他们可能对Hadoop有一定了解,但具体的高可用配置步骤可能不太清楚。需要明确实验的环境,比如使用多少台机器,操作系统是什么,是否需要配置SSH免密登录,以及Java环境等。 接下来,步骤方面,应该从准备环境开始,包括至少三台节点,可能还需要JournalNode和ZooKeeper节点。需要确保网络配置正确,主机名解析,防火墙设置,时间同步这些基础步骤。然后是安装Java和Hadoop,配置环境变量。 然后是关键的配置文件修改,比如core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。需要详细说明每个配置项的作用,比如指定ZooKeeper地址,NameNode的命名服务,故障转移配置等。 用户可能需要具体的配置示例,所以给出示例配置会比较好。比如在hdfs-site.xml中设置dfs.nameservices为mycluster,配置两个NameNode,以及JournalNodes的地址。同时,ZooKeeper的配置也是重点,需要安装并配置ZooKeeper集群,确保其正常运行。 然后是初始化步骤,格式化ZKFC,启动JournalNode,格式化NameNode,同步元数据,启动HDFS和YARN服务。需要按顺序执行这些步骤,否则可能会导致启动失败。比如必须先启动JournalNode,再格式化NameNode,否则JournalNode可能无法正确记录编辑日志。 在实验结果部分,需要验证各个组件是否正常工作。比如通过jps查看进程,检查Web界面,测试故障转移。可能需要手动杀死Active NameNode,观察是否自动切换。同时,提交MapReduce作业来测试YARN的高可用性是否有效。 可能用户会遇到的问题包括配置错误、端口冲突、服务启动顺序错误,或者防火墙阻止通信。需要提醒用户检查日志,确认各个服务是否正常启动,网络通信是否畅通。另外,时间同步很重要,否则ZooKeeper可能会出现问题。 最后,实验结果需要总结高可用集群的效果,比如NameNode故障自动切换,ResourceManager的容错,以及数据的一致性。同时,可能存在的不足,比如资源消耗增加,配置复杂度高,适合实验环境但生产环境需要更多优化。 需要确保步骤清晰,分点列出,避免遗漏关键配置项。同时,使用中文回答,按照用户要求的结构,先步骤后实验结果。可能用户需要具体的命令示例,比如格式化命令、启动命令等,所以给出具体命令会更有帮助。还要注意LaTeX格式的正确使用,比如变量和配置项用$...$包裹,但用户的问题中并没有太多数学公式,所以可能不需要太多这方面的处理,但按照系统指令,行内表达式需要用$符号,比如$HADOOP_HOME$这样的路径。 总之,整理出一个结构清晰、步骤详细、验证方法明确的指南,帮助用户顺利完成实验,并理解高可用集群的运作原理和效果。</think>### Hadoop高可用集群搭建实验步骤 --- #### **一、实验环境准备** 1. **节点规划**(最低要求): - 3台Linux服务器(CentOS 7+或Ubuntu 18.04+) - 角色分配: - **NameNode (NN)**:2台(Active + Standby) - **JournalNode (JN)**:3台(奇数台,用于共享EditLog) - **DataNode (DN)**:每台服务器均可部署 - **ZooKeeper (ZK)**:3台(奇数台,用于故障选举) - **ResourceManager (RM)**:2台(Active + Standby) 2. **基础配置**: - 配置主机名与静态IP(如`node1`, `node2`, `node3`) - 配置SSH免密登录(所有节点互通) - 关闭防火墙或开放端口(如`8020`, `8485`, `2181`, `8088`等) - 同步时间(使用`ntpdate`或`chronyd`) 3. **安装依赖**: - JDK 8+(配置`JAVA_HOME`) - Hadoop 3.x(如3.3.6,解压到`/opt/hadoop`) - ZooKeeper 3.6+(解压到`/opt/zookeeper`) --- #### **二、配置文件修改** 1. **Hadoop核心配置**: - **`core-site.xml`**: ```xml <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> <!-- 命名服务名称 --> </property> <property> <name>ha.zookeeper.quorum</name> <value>node1:2181,node2:2181,node3:2181</value> <!-- ZK集群地址 --> </property> ``` - **`hdfs-site.xml`**: ```xml <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> <!-- 两个NameNode标识 --> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node1:8020</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node1:9870</value> </property> <!-- 类似配置nn2 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/hadoop/journal</value> <!-- JournalNode数据目录 --> </property> ``` - **`yarn-site.xml`**: ```xml <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarn-cluster</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 配置RM节点地址 --> ``` 2. **ZooKeeper配置**: - **`zoo.cfg`**: ```properties server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888 ``` --- #### **三、初始化与启动** 1. **启动ZooKeeper集群**: ```bash # 在每个ZK节点执行 /opt/zookeeper/bin/zkServer.sh start ``` 2. **格式化HDFS HA**: - 在**JournalNode节点**启动服务: ```bash hadoop-daemon.sh start journalnode ``` - 在**第一个NameNode**格式化并同步元数据: ```bash hdfs namenode -format -clusterId mycluster hdfs zkfc -formatZK # 初始化ZKFC hadoop-daemon.sh start namenode ``` - 在**第二个NameNode**同步元数据: ```bash hdfs namenode -bootstrapStandby hadoop-daemon.sh start namenode ``` 3. **启动HDFS与YARN**: ```bash start-dfs.sh start-yarn.sh ``` --- #### **四、实验结果验证** 1. **进程检查**: - 通过`jps`命令确认进程: - NameNode、DataNode、JournalNode、ZKFC - ResourceManager、NodeManager 2. **Web界面验证**: - HDFS状态:`http://node1:9870`(Active NN显示为`active`) - YARN状态:`http://node1:8088`(Active RM显示为`active`) 3. **故障转移测试**: - 手动杀死Active NameNode进程,观察Standby自动切换为Active。 - 提交MapReduce作业(如WordCount),验证YARN调度正常。 --- #### **五、实验结果总结** 1. **成功指标**: - NameNode和ResourceManager实现自动故障转移。 - 数据写入HDFS后,Standby NN可读取完整元数据。 - ZooKeeper选举日志显示正常(无`ERROR`)。 2. **可能问题**: - 配置文件中端口冲突或路径权限错误。 - 时间不同步导致ZK选举失败。 - JournalNode未启动导致EditLog无法同步。 3. **改进方向**: - 增加DataNode数量提升存储容量。 - 配置HDFS Federation扩展命名空间。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值