温馨提示×

Hadoop在Linux里如何实现高可用

小樊
40
2025-10-25 01:13:46
栏目: 智能运维

Hadoop在Linux中实现高可用的核心步骤

1. 准备工作

  • 环境配置:选择CentOS 7或Ubuntu 20.04等稳定Linux发行版;所有节点安装JDK 8(或更高版本),并配置JAVA_HOME环境变量;确保节点间网络互通,配置静态IP、主机名(如namenode1resourcemanager1)及DNS解析。
  • 基础优化:关闭防火墙(systemctl stop firewalld)或开放必要端口(如HDFS的8020、50070,YARN的8032、8088);配置SSH免密登录(ssh-keygen -t rsa并分发公钥),便于故障转移时远程执行命令;同步节点时间(安装NTP服务,ntpdate pool.ntp.org),避免时间差导致的状态不一致。

2. 配置NameNode高可用(HDFS HA)

NameNode是HDFS的核心元数据管理节点,其高可用通过主备NameNode+共享存储+ZooKeeper自动故障转移实现。

  • 共享存储设置:使用JournalNode集群(至少3个)作为共享存储,同步NameNode的编辑日志(EditLog)。在hdfs-site.xml中配置:
    <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/cluster1</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/path/to/journalnode/dir</value> </property> 
  • ZooKeeper集成:部署3节点ZooKeeper集群(需单独部署),在core-site.xml中指定ZooKeeper地址:
    <property> <name>ha.zookeeper.quorum</name> <value>zoo1:2181,zoo2:2181,zoo3:2181</value> </property> 
  • 自动故障转移:在hdfs-site.xml中启用自动故障转移:
    <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> 
  • 启动流程
    1. 启动JournalNode:hdfs --daemon start journalnode(在每个JournalNode节点执行);
    2. 格式化主NameNode:hdfs namenode -format(仅在主NameNode执行一次);
    3. 启动主NameNode:hdfs --daemon start namenode
    4. 将主NameNode元数据同步到备NameNode:hdfs namenode -bootstrapStandby(在备NameNode执行);
    5. 启动备NameNode:hdfs --daemon start namenode
    6. 启动ZKFC(ZooKeeper Failover Controller):hdfs --daemon start zkfc(在每个NameNode节点执行,用于监控状态并触发故障转移)。

3. 配置ResourceManager高可用(YARN HA)

ResourceManager负责YARN的资源调度,其高可用通过主备ResourceManager+ZooKeeper选主实现。

  • YARN配置:在yarn-site.xml中添加以下参数:
    <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarn1</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>resourcemanager1</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>resourcemanager2</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>zoo1:2181,zoo2:2181,zoo3:2181</value> </property> 
  • 启动流程:在每个ResourceManager节点启动服务:start-yarn.sh,ZooKeeper会自动协调主备切换(当主ResourceManager故障时,备ResourceManager会在ZooKeeper的协调下接管服务)。

4. 数据备份与恢复

  • 元数据备份:定期备份NameNode的元数据目录(dfs.namenode.name.dir),可使用hdfs dfsadmin -saveNamespace命令保存当前命名空间到镜像文件。
  • 数据备份:通过hdfs dfs -cp命令复制重要数据到异地节点,或使用Hadoop DistCp工具实现跨集群备份(如hadoop distcp hdfs://cluster1/data hdfs://cluster2/backup)。

5. 监控与告警

  • 内置工具:使用Hadoop的Web UI(NameNode的50070端口、ResourceManager的8088端口)监控集群状态(如NameNode是否Active、ResourceManager资源使用率)。
  • 第三方工具:集成Prometheus(采集集群指标)+ Grafana(可视化展示),或Ganglia(实时监控节点资源),设置告警规则(如NameNode宕机、磁盘空间不足时发送邮件/短信通知)。

6. 测试高可用性

  • 模拟NameNode故障:停止主NameNode进程(hdfs --daemon stop namenode),观察备NameNode是否在ZKFC的作用下自动切换为Active状态(可通过jps命令查看备NameNode进程,或访问其Web UI确认状态)。
  • 模拟ResourceManager故障:停止主ResourceManager进程(yarn --daemon stop resourcemanager),验证备ResourceManager是否接管服务(通过YARN Web UI查看ResourceManager状态)。
  • 数据完整性验证:故障转移后,上传/下载文件测试HDFS功能是否正常,检查数据是否一致(如hdfs dfs -ls /查看目录结构,hdfs dfs -cat /file.txt查看文件内容)。

0