Hadoop在Linux中实现高可用的核心步骤
在开始配置前,需完成以下基础准备:
JAVA_HOME环境变量;确保节点间网络互通,配置静态IP、主机名(如namenode1、resourcemanager1)及DNS解析。NameNode是HDFS的核心元数据管理组件,其高可用通过Active/Standby模式+ZooKeeper自动故障转移实现:
hdfs-site.xml中添加以下配置:<property> <name>dfs.nameservices</name> <value>mycluster</value> <!-- 集群名称,自定义 --> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>namenode1,namenode2</value> <!-- NameNode节点标识 --> </property> <property> <name>dfs.namenode.rpc-address.mycluster.namenode1</name> <value>namenode1:8020</value> <!-- Active NameNode RPC地址 --> </property> <property> <name>dfs.namenode.rpc-address.mycluster.namenode2</name> <value>namenode2:8020</value> <!-- Standby NameNode RPC地址 --> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value> <!-- JournalNode集群地址 --> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/var/lib/hadoop/hdfs/journalnode</value> <!-- JournalNode本地数据目录 --> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> <!-- 开启自动故障转移 --> </property> <property> <name>ha.zookeeper.quorum</name> <value>zoo1:2181,zoo2:2181,zoo3:2181</value> <!-- ZooKeeper集群地址 --> </property> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> <!-- 使用SSH隔离 --> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> <!-- SSH私钥路径 --> </property> # 启动所有JournalNode(在每个JournalNode节点执行) hdfs --daemon start journalnode # 在Active NameNode(如namenode1)上格式化并启动 hdfs namenode -format hdfs --daemon start namenode # 在Standby NameNode(如namenode2)上同步元数据并启动 hdfs namenode -bootstrapStandby hdfs --daemon start namenode ResourceManager负责集群资源调度,其高可用同样采用主备模式+ZooKeeper协调:
yarn-site.xml中添加以下配置:<property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> <!-- 开启HA --> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarn-cluster</value> <!-- 集群ID,需与HDFS一致 --> </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> <!-- Active RM节点主机名 --> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>resourcemanager2</value> <!-- Standby RM节点主机名 --> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>zoo1:2181,zoo2:2181,zoo3:2181</value> <!-- ZooKeeper集群地址 --> </property> # 在所有ResourceManager节点启动服务 start-yarn.sh # 启动HDFS start-dfs.sh # 启动YARN start-yarn.sh hdfs haadmin -getServiceState namenode1查看Active/Standby状态,正常应显示active或standby。hdfs --daemon stop namenode(在Active节点执行)hdfs haadmin -getServiceState namenode2应显示active。hdfs dfs -touch /testfile,切换后检查文件是否存在hdfs dfs -ls /testfile。/user目录),可使用hdfs dfs -cp命令复制到异地存储。yarn.scheduler.maximum-allocation-mb),启用数据压缩(如Snappy)减少网络传输压力。