Hadoop在Linux上如何部署高可用
导读:1. 前置准备  环境要求:至少4台Linux服务器(如node1-node4),安装JDK 1.8+、Hadoop 2.7+、ZooKeeper 3.4+;所有节点配置静态IP、主机名映射(/etc/hosts)、SSH免密登录(ssh-...
    
1. 前置准备
- 环境要求:至少4台Linux服务器(如node1-node4),安装JDK 1.8+、Hadoop 2.7+、ZooKeeper 3.4+;所有节点配置静态IP、主机名映射(/etc/hosts)、SSH免密登录(ssh-keygen -t rsa并分发公钥)、时间同步(ntpdate或chrony)。
- ZooKeeper集群部署:在3台节点(如node1-node3)上安装ZooKeeper,配置zoo.cfg(server.1=node1:2888:3888、server.2=node2:2888:3888、server.3=node3:2888:3888),启动ZooKeeper集群(zkServer.sh start)并验证状态(zkServer.sh status)。
2. 配置HDFS高可用(NameNode HA)
- 核心配置文件修改:
- core-site.xml:设置HDFS的默认文件系统指向NameService(如hdfs://mycluster),指定ZooKeeper集群地址(ha.zookeeper.quorum=node1:2181,node2:2181,node3:2181)。
- hdfs-site.xml:
- 定义NameService ID(与core-site.xml一致,如mycluster)、NameNode节点列表(dfs.ha.namenodes.mycluster=nn1,nn2)、RPC地址(dfs.namenode.rpc-address.mycluster.nn1=node1:9000、dfs.namenode.rpc-address.mycluster.nn2=node2:9000)、HTTP地址(dfs.namenode.http-address.mycluster.nn1=node1:9870、dfs.namenode.http-address.mycluster.nn2=node2:9870);
- 配置共享编辑日志存储(JournalNode集群,如dfs.namenode.shared.edits.dir=qjournal://node1:8485; node2:8485; node3:8485/mycluster);
- 开启自动故障转移(dfs.ha.automatic-failover.enabled=true);
- 指定故障转移代理(dfs.client.failover.proxy.provider.mycluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider);
- 配置隔离机制(如SSH强制终止,dfs.ha.fencing.methods=sshfence、dfs.ha.fencing.ssh.private-key-files=/root/.ssh/id_rsa)。
 
- 定义NameService ID(与core-site.xml一致,如
 
- core-site.xml:设置HDFS的默认文件系统指向NameService(如
- JournalNode启动:在3台JournalNode节点上执行hdfs --daemon start journalnode,启动后通过jps验证进程是否存在。
- NameNode格式化与启动:
- 在主NameNode(如node1)上执行hdfs namenode -format,初始化NameNode元数据;
- 启动主NameNode(hdfs --daemon start namenode);
- 在备用NameNode(如node2)上执行hdfs namenode -bootstrapStandby,同步主NameNode的元数据;
- 启动备用NameNode(hdfs --daemon start namenode);
- 在所有NameNode节点上启动ZKFC(hdfs zkfc -formatZK格式化ZooKeeper中的HA状态,然后hdfs --daemon start zkfc),实现自动故障转移。
 
- 在主NameNode(如node1)上执行
3. 配置YARN高可用(ResourceManager HA)
- 核心配置文件修改(yarn-site.xml):
- 开启ResourceManager HA(yarn.resourcemanager.ha.enabled=true);
- 定义集群ID(yarn.resourcemanager.cluster-id=yarn1)、ResourceManager节点列表(yarn.resourcemanager.ha.rm-ids=rm1,rm2)、ZooKeeper地址(yarn.resourcemanager.zk-address=node1:2181,node2:2181,node3:2181);
- 配置ResourceManager的RPC地址(yarn.resourcemanager.hostname.rm1=node1、yarn.resourcemanager.hostname.rm2=node2)。
 
- 开启ResourceManager HA(
- ResourceManager启动:在2台ResourceManager节点上执行start-yarn.sh,启动ResourceManager进程;通过yarn rmadmin -getServiceState rm1验证主备状态。
4. DataNode与NodeManager配置
- DataNode配置:在所有DataNode节点的hdfs-site.xml中配置数据存储目录(dfs.datanode.data.dir=/export/data/hadoop/datanode),启动DataNode(hdfs --daemon start datanode)。
- NodeManager配置:在所有NodeManager节点的yarn-site.xml中配置NodeManager地址(yarn.nodemanager.hostname=nodeX),启动NodeManager(yarn --daemon start nodemanager)。
5. 验证高可用性
- JPS验证:在各节点执行jps,确认进程正常(NameNode节点有NameNode、ZKFC;ResourceManager节点有ResourceManager;JournalNode节点有JournalNode;DataNode节点有DataNode;NodeManager节点有NodeManager)。
- 浏览器验证:访问NameNode Web UI(如http://node1:9870),查看NameNode状态(应显示“Active”或“Standby”);访问ResourceManager Web UI(如http://node1:8088),查看ResourceManager状态。
- 故障转移测试:
- 杀死主NameNode进程(kill -9 < NameNode_PID>),等待10-30秒,备用NameNode应自动切换为Active状态;
- 杀死主ResourceManager进程,备用ResourceManager应自动接管服务;
- 验证数据完整性:上传文件至HDFS,故障转移后检查文件是否可正常读取。
 
- 杀死主NameNode进程(
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Hadoop在Linux上如何部署高可用
本文地址: https://pptw.com/jishu/740322.html
