Hadoop在Linux中的高可用性如何设置
导读:Hadoop在Linux中的高可用性设置指南 Hadoop在Linux环境中的高可用性(HA)设置需通过多组件协同实现,核心目标是解决NameNode(HDFS元数据管理)、ResourceManager(YARN资源调度)的单点故障问题,...
Hadoop在Linux中的高可用性设置指南
Hadoop在Linux环境中的高可用性(HA)设置需通过多组件协同实现,核心目标是解决NameNode(HDFS元数据管理)、ResourceManager(YARN资源调度)的单点故障问题,同时保障数据冗余与系统稳定性。以下是具体配置步骤:
一、前置准备
- 环境要求
- 所有节点(NameNode、DataNode、ResourceManager、NodeManager、JournalNode、ZooKeeper)安装相同版本的Hadoop(建议2.7+或3.x)。
- 节点间网络互通(关闭防火墙或放行必要端口:HDFS默认8020/50070、YARN默认8030/8088、ZooKeeper默认2181、JournalNode默认8485)。
- 安装并配置JDK 1.8+(
java -version验证)。
- 系统优化
- 调整内核参数(如
vm.swappiness=10减少交换分区使用、net.core.somaxconn=65535提升网络连接数),编辑/etc/sysctl.conf后执行sysctl -p生效。 - 配置SSH免密登录(
ssh-keygen -t rsa生成密钥,ssh-copy-id分发至所有节点),便于故障转移时自动执行命令。 - 同步所有节点系统时间(安装
ntp服务,ntpdate pool.ntp.org同步)。
- 调整内核参数(如
二、配置ZooKeeper集群(协调服务)
ZooKeeper是Hadoop HA的核心协调组件,负责NameNode选主、ResourceManager状态监控及故障转移触发。
- 部署集群:选择3个节点(奇数节点保证多数派原则),安装ZooKeeper(版本3.4+)。
- 配置
zoo.cfg(每节点相同):tickTime=2000 initLimit=10 syncLimit=5 dataDir=/path/to/zk/data # 数据目录 clientPort=2181 server.1=zoo1:2888:3888 # 节点1,2888用于Leader选举,3888用于Leader与其他节点通信 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 - 启动集群:在每节点执行
zkServer.sh start,通过zkServer.sh status确认Leader节点(如Mode: leader)。
三、配置HDFS高可用(NameNode HA)
HDFS HA通过主备NameNode+JournalNode实现元数据同步与故障转移。
- 配置
core-site.xml(全局配置):< property> < name> fs.defaultFS< /name> < value> hdfs://mycluster< /value> < !-- 集群命名空间 --> < /property> < property> < name> ha.zookeeper.quorum< /name> < value> zoo1:2181,zoo2:2181,zoo3:2181< /value> < !-- ZooKeeper集群地址 --> < /property> - 配置
hdfs-site.xml(HDFS专用配置):< property> < name> dfs.nameservices< /name> < value> mycluster< /value> < !-- 与fs.defaultFS一致 --> < /property> < property> < name> dfs.ha.namenodes.mycluster< /name> < value> nn1,nn2< /value> < !-- 主备NameNode标识 --> < /property> < property> < name> dfs.namenode.rpc-address.mycluster.nn1< /name> < value> namenode1:8020< /value> < !-- nn1的RPC地址 --> < /property> < property> < name> dfs.namenode.rpc-address.mycluster.nn2< /name> < value> namenode2:8020< /value> < !-- nn2的RPC地址 --> < /property> < property> < name> dfs.namenode.http-address.mycluster.nn1< /name> < value> namenode1:50070< /value> < !-- nn1的HTTP地址 --> < /property> < property> < name> dfs.namenode.http-address.mycluster.nn2< /name> < value> namenode2:50070< /value> < !-- nn2的HTTP地址 --> < /property> < property> < name> dfs.namenode.shared.edits.dir< /name> < value> qjournal://journalnode1:8485; journalnode2:8485; journalnode3:8485/mycluster< /value> < !-- JournalNode共享编辑日志地址 --> < /property> < property> < name> dfs.ha.automatic-failover.enabled< /name> < value> true< /value> < !-- 开启自动故障转移 --> < /property> < property> < name> dfs.client.failover.proxy.provider.mycluster< /name> < value> org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider< /value> < !-- 客户端故障转移代理 --> < /property> - 启动JournalNode:在3个JournalNode节点执行
hdfs --daemon start journalnode,通过jps确认进程启动。 - 格式化与启动NameNode:
- 在**主NameNode(nn1)**执行
hdfs namenode -format(首次启动需格式化)。 - 启动主NameNode:
hdfs --daemon start namenode。 - 在**备NameNode(nn2)**执行
hdfs namenode -bootstrapStandby(同步主NameNode元数据)。 - 启动备NameNode:
hdfs --daemon start namenode。
- 在**主NameNode(nn1)**执行
- 启动ZKFC(自动故障转移控制器):在主备NameNode节点执行
hdfs --daemon start zkfc(ZKFC会监控NameNode状态,触发故障转移)。
四、配置YARN高可用(ResourceManager HA)
YARN HA通过主备ResourceManager实现资源调度的连续性。
- 配置
yarn-site.xml(YARN专用配置):< property> < name> yarn.resourcemanager.ha.enabled< /name> < value> true< /value> < !-- 开启HA --> < /property> < property> < name> yarn.resourcemanager.cluster-id< /name> < value> yrc< /value> < !-- 集群ID --> < /property> < property> < name> yarn.resourcemanager.ha.rm-ids< /name> < value> rm1,rm2< /value> < !-- 主备ResourceManager标识 --> < /property> < property> < name> yarn.resourcemanager.hostname.rm1< /name> < value> resourcemanager1< /value> < !-- rm1的主机名 --> < /property> < property> < name> yarn.resourcemanager.hostname.rm2< /name> < value> resourcemanager2< /value> < !-- rm2的主机名 --> < /property> < property> < name> yarn.resourcemanager.zk-address< /name> < value> zoo1:2181,zoo2:2181,zoo3:2181< /value> < !-- ZooKeeper集群地址(用于选主) --> < /property> < property> < name> yarn.nodemanager.aux-services< /name> < value> mapreduce_shuffle< /value> < !-- Shuffle服务 --> < /property> - 启动ResourceManager:在主备ResourceManager节点执行
start-yarn.sh,通过yarn rmadmin -getServiceState rm1确认主备状态(active/standby)。
五、配置DataNode(数据节点)
DataNode负责数据存储,需配置为向所有NameNode汇报状态(自动适配主备切换)。
- 配置
hdfs-site.xml(每DataNode相同):< property> < name> dfs.datanode.data.dir< /name> < value> /path/to/datanode/dir< /value> < !-- 数据存储目录 --> < /property> - 启动DataNode:在所有DataNode节点执行
hdfs --daemon start datanode,通过hdfs dfsadmin -report确认DataNode状态。
六、测试高可用性
- 模拟NameNode故障:停止主NameNode(
hdfs --daemon stop namenode),观察备NameNode是否自动接管(通过hdfs dfsadmin -report查看主NameNode切换)。 - 模拟ResourceManager故障:停止主ResourceManager(
yarn --daemon stop resourcemanager),确认备ResourceManager是否变为active。 - 验证数据完整性:上传文件至HDFS,故障转移后检查文件是否可正常读取。
七、监控与维护
- 内置监控:通过Hadoop Web界面(
http://namenode:50070、http://resourcemanager:8088)查看集群状态。 - 第三方工具:集成Prometheus(采集指标)+ Grafana(可视化)监控集群性能,或使用Alertmanager设置告警(如NameNode宕机、磁盘空间不足)。
- 定期维护:备份NameNode元数据(
hdfs dfsadmin -fetchImage)、清理JournalNode日志、升级Hadoop版本时验证兼容性。
通过以上步骤,Hadoop集群可实现NameNode、ResourceManager的高可用,结合ZooKeeper协调与JournalNode元数据同步,有效保障集群在节点故障时的连续性与数据可靠性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Hadoop在Linux中的高可用性如何设置
本文地址: https://pptw.com/jishu/737989.html
